17 Language support library [language.support]

17.12 Coroutines [support.coroutine]

17.12.2 Coroutine traits [coroutine.traits]

This subclause defines requirements on classes representing coroutine traits, and defines the class template coroutine_­traits that satisfies those requirements. 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.
Program defined specializations of this template shall define a publicly accessible nested type named promise_­type.