Hi, this is my first time to use the mailing question to ask questions. If I do anything wrong, please remind me directly.
In the C++ Technical Specification
N4680, 8.4.4.3 writes:
For a coroutine f that is a non-static member function, let
P1 denote the type of the implicit object parameter (13.3.1) and P2 ... Pn be the types of the function parameters; otherwise let P1 ... Pn be the types of the function parameters. Let
p1 ... pn be lvalues denoting those objects. Let R be the return type and
F be the function-body of f, T be the type std::experimental::coroutine_traits, and
P be the class type denoted by T::promise_type. Then, the coroutine behaves as if its body were:
This paragraph seems like that every coroutine should have a promise type. But in 18.11.1.1, it says:
The header defines the primary template coroutine_traits such that if
ArgTypes is a parameter pack of types and if R is a type that has a valid (14.8.2) member type
promise_type, then coroutine_traits has the following publicly accessible member:
using promise_type = typename R::promise_type;
Otherwise, coroutine_traits has no members.
It seems like that it is legal that the coroutine_traits<R,ArgTypes...>
would not own a promise_type.
So it is confusing me that whether it is an undefined behavior that the return type of a corouinte don't own a
promise_type.