The header
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;