Created on 2020-10-19.00:00:00 last changed 28 months ago
Proposed resolution (April, 2021):
Change 9.5.4 [dcl.fct.def.coroutine] paragraph 4 as follows:
In the following, pi is an lvalue of type Pi, where p1 denotes *this and pi+1 denotes the ith function parameter for a non-static member function, and pi denotes the ith function parameter otherwise. For a non-static member function, q1 is an lvalue that denotes *this; any other qi is an lvalue that denotes the parameter copy corresponding to pi, as described below.
Change 9.5.4 [dcl.fct.def.coroutine] bullet 5.7 as follows:
A coroutine behaves as if its function-body were replaced by: ... where
...
promise-constructor-arguments is determined as follows: overload resolution is performed on a promise constructor call created by assembling an argument list
with lvalues p1 ... pnq1 ... qn. If a viable constructor is found (12.2.3 [over.match.viable]), then promise-constructor-arguments is(p1, ... , pn)(q1, ... , qn), otherwise promise-constructor-arguments is empty.
Suggested resolution:
Change 7.5.5.2 [expr.prim.id.unqual] paragraph 4 as follows:
In the following, pi is an lvalue of type Pi, where p1 denotes *this and pi+1 denotes the ith function parameter for a non-static member function, and pi denotes the ith function parameter otherwise. Let qi be the corresponding parameter copy, as described below.
Change 7.5.5.2 [expr.prim.id.unqual] bullet 5.7 as follows:
A coroutine behaves as if its function-body were replaced by...
...
promise-constructor-arguments is determined as follows: overload resolution is performed on a promise constructor call created by assembling an argument list with lvalues
pq1 ...pqn. If a viable constructor is found (12.2.3 [over.match.viable]), then promise-constructor-arguments is (pq1, ... ,pqn), otherwise promise-constructor-arguments is empty.
[Accepted as a DR at the June, 2021 meeting.]
The resolution of issue 2436 (in P2107R0) deleted the sentence
A reference to a parameter in the function-body of the coroutine and in the call to the coroutine promise constructor is replaced by a reference to its copy.
replacing it with new wording in 7.5.5.2 [expr.prim.id.unqual] paragraph 1:
An identifier that names a coroutine parameter refers to the copy of the parameter (9.5.4 [dcl.fct.def.coroutine]).
This new approach no longer covers coroutine parameters passed to a promise constructor, since the constructor call is implicit, as described in 7.5.5.2 [expr.prim.id.unqual] paragraph 5.
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-08-19 07:54:33 | admin | set | status: drwp -> cd6 |
2022-02-18 07:47:23 | admin | set | messages: + msg6721 |
2021-11-15 00:00:00 | admin | set | messages: + msg6593 |
2021-11-15 00:00:00 | admin | set | status: drafting -> drwp |
2020-10-19 00:00:00 | admin | create |