17.12.3.2 Class template coroutine_traits [coroutine.traits.primary]
The header <coroutine> defines the primary template
coroutine_traits such that
if ArgTypes is a parameter pack of types and
if the qualified-id R::promise_type is valid and
denotes a type ([temp.deduct]),
then coroutine_traits<R,ArgTypes...> has the following publicly
accessible member:
using promise_type = typename R::promise_type;
Otherwise, coroutine_traits<R,ArgTypes...> has no members.