This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2023-01-15


2465. Coroutine parameters passed to a promise constructor

Section: 9.5.4  [dcl.fct.def.coroutine]     Status: CD6     Submitter: Gor Nishanov     Date: 2020-10-19

[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.4.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.4.2 [expr.prim.id.unqual] paragraph 5.

Suggested resolution:

  1. Change 7.5.4.2 [expr.prim.id.unqual] paragraph 4 as follows:

  2. 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.
  3. Change 7.5.4.2 [expr.prim.id.unqual] bullet 5.7 as follows:

  4. A coroutine behaves as if its function-body were replaced by...

Proposed resolution (April, 2021):

  1. Change 9.5.4 [dcl.fct.def.coroutine] paragraph 4 as follows:

  2. 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.
  3. Change 9.5.4 [dcl.fct.def.coroutine] bullet 5.7 as follows:

  4. A coroutine behaves as if its function-body were replaced by: ... where