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: