#include <iostream>
int main() {
#if __has_include(<coroutine>)
std::cout << "__has_include(<coroutine>)" << std::endl;
#endif
#if defined(__cpp_impl_coroutine)
std::cout << "__cpp_impl_coroutine is defined." << std::endl;
#endif
#if defined(__cpp_coroutines)
std::cout << "__cpp_coroutines is defined." << std::endl;
#else
std::cout << "__cpp_coroutines IS NOT defined!" << std::endl;
#endif
}
My compiler is clang-18.1.0.
Build the code with clang++ -std=c++20 -stdlib=libc++ ./main.cpp, and the output is:
__has_include(<coroutine>)
__cpp_impl_coroutine is defined.
__cpp_coroutines IS NOT defined!
Why does the latest clang not define the feature test macro __cpp_coroutines?
__cpp_coroutinesis an outdated feature test macro, it was split into__cpp_lib_coroutineand__cpp_impl_coroutinebefore c++20 was standardised. You should use the up to date cpp reference pages for the latest information https://en.cppreference.com/w/cpp/feature_testClang seems to have stopped defining
__cpp_coroutinessince version 17 https://godbolt.org/z/nc1GhGGTo