cplusplus / cplusplus/draft

[over.match.oper] p2, p3, p7 several issues

Open
#5,172 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TeX
Stars
221
Forks
813
Avg merge
16h 4m
Merged PRs (30d)
36

Description

Since operator =, [], -> are isolated from the categories a@b, @a, or a@ as described in Table 17, and we didn't explicitly specify whether these operators are unary operators or binary operators, and we just use for a unary operator @ with... and ** for a binary operator @ with...** to introduce [over.match.oper] p3. Hence, the first issue is:

If T1 is a complete class type or a class currently being defined, the set of member candidates is the result of a search for operator@ in the scope of T1;

It seems that the above rule may not cover operator =, [], ->(although, it's not the intent, however, Table 17 and the initial sentence of p3 together hint that).

The second issue is:

[over.match.oper] p3.2

otherwise, it includes the result of unqualified lookup for operator@ in the rewritten function call ([basic.lookup.unqual], [basic.lookup.argdep]), ignoring all member functions.

In [over.match.oper] p2, we introduce the concept transformed function-call notation, I think we should consistently use the utterance operator@ in the transformed function-call instead of "rewritten function call", after all, the wording "rewritten" will be given other meanings in the below paragraphs, using the former can also avoid the misunderstanding.

The third issue is:

[over.match.oper] p7

The argument list contains all of the operands of the operator.

Consider this example

a++;

Since a has a class type, the expression is transformed to a function-call notations (a).operator@ (0) or operator@(a, 0), in either case, the argument list consists of two arguments anyway. According to p7, the expression a++ merely has one operand a(the value 0 is introduced after the expression is transformed to a function-call notation).

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading [over.match.oper] p2, p3 and p7 alongside Table 17 and the a++ example in this issue. Review the surrounding C++ operator wording and determine whether the three concerns require consistent terminology or explicit operator coverage. Done means the affected paragraphs unambiguously describe candidate lookup, transformed function-call notation, and operand lists.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, tex
Domain
documentation
Issue type
Documentation
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.