< cpp‎ | coroutine
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types

Elementary string conversions
Coroutine support
Coroutine traits
Coroutine handle
No-op coroutines
Trivial awaitables
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.


[edit] 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

[edit] Member types

Type Definition
promise_type R::promise_type if it is valid, or provided by program-defined specializations

[edit] 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;

[edit] 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.

[edit] Example