We have a policy, established in P1353 (and needing to be added to SD-6):
In some cases a feature requires two macros, one for the language and one for the library. For example, the library does not want to define its three-way comparison operations unless the compiler supports the feature.
For end-users, it is suggested that they test only the library macro, as that will only be true if the language macro is also true. As a result, the language macros contain "impl" to distinguish them from the more general version that is expected to be set by the library. That paper added two papers of macros: one for <=> and one for destroying delete. We have a third such example in coroutines: there is library machinery that needs to be provided only when the compiler has language support for it, and the end user should just check the library macro.
Previous resolution [SUPERSEDED]:
This wording is relative to N4849.
Modify [cpp.predefined], Table [tab:cpp.predefined.ft], as indicated:
Table 18: Feature-test macros [tab:cpp.predefined.ft] Macro name Value […] __cpp_impl_coroutines 201902L […] Modify [version.syn], header <version> synopsis, as indicated:
[…] #define __cpp_lib_constexpr_vector 201907L // also in <vector> #define __cpp_lib_coroutines 201902L // also in <coroutine> #define __cpp_lib_destroying_delete 201806L // also in <new> […]