std::coroutine_traits
| Defined in header <coroutine>
|
||
| template< class R, class... Args > struct coroutine_traits; |
(since C++20) | |
Determines the promise type of 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 member.
Program-defined specializations of coroutine_traits shall defined 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 type of the implicit object parameter, and the rest are parameter types of the function (if any).
If std::coroutind_traits<R, Args...>::promise_type does not exist or is not a class type, the corresponding coroutine definition is ill-formed.
Users may defined 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 |