Description
When a coroutine is invoked, after initializing its parameters ([expr.call]), a copy is created for each coroutine parameter. For a parameter of type cv T, the copy is a variable of type cv T with automatic storage duration that is direct-initialized from an xvalue of type T referring to the parameter.
Since [expr.type] p1 says
If an expression initially has the type “reference to T” ([dcl.ref], [dcl.init.ref]), the type is adjusted to T prior to any further analysis.
When we say xvalue
, the type of it should be a non-reference type. However, in [dcl.fct.def.coroutine] p13, T
could be any type such as "lvalue reference type". How could an expression be an xvalue when it has an lvalue reference type? Regardless of [expr.type] p1 or a xvalue of lvalue reference type, [dcl.fct.def.coroutine] p13 conflict with both of them.