std::coroutine_traits
|   Defined in header  <coroutine>
  | 
||
|   template< class R, class... Args > struct coroutine_traits;  | 
(since C++20) | |
Determines the promise type from the return type and parameter types of a coroutine. The standand library implementation provides a publicly accessible member type promise_type same as R::promise_type if the qualified-id is valid and denotes a type. Otherwise, it has no such member.
Program-defined specializations of coroutine_traits shall define a publicly accessible member type promise_type; otherwise, the behavior is undefined.
Template parameters
| R | - | return type of the coroutine | 
| Args | - | parameter types of the coroutine, including the implicit object parameter if the coroutine is a non-static member function | 
Member types
| Type | Definition | 
  promise_type
 | 
  R::promise_type if it is valid, or provided by program-defined specializations
 | 
Possible implementation
template<class, class...> struct coroutine_traits {}; template<class R, class... Args> requires requires { typename R::promise_type } struct coroutine_traits<R, Args...> { using promise_type = R::promise_type; };  | 
Notes
If the coroutine is a non-static member function, then the first type in Args... is the type of the implicit object parameter, and the rest are parameter types of the function (if any).
If std::coroutine_traits<R, Args...>::promise_type does not exist or is not a class type, the corresponding coroutine definition is ill-formed.
Users may define explicit or partial specializations of coroutine_traits dependent on program-defined types to avoid modification to return types.
Example
| This section is incomplete Reason: no example  |