#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
}
Meu compilador é clang-18.1.0.
Construa o código com clang++ -std=c++20 -stdlib=libc++ ./main.cpp
e a saída será:
__has_include(<coroutine>)
__cpp_impl_coroutine is defined.
__cpp_coroutines IS NOT defined!
Por que o clang mais recente não define a macro de teste de recursos __cpp_coroutines?
__cpp_coroutines
é uma macro de teste de recurso desatualizada , foi dividida__cpp_lib_coroutine
e__cpp_impl_coroutine
antes da padronização do c++ 20 . Você deve usar as páginas de referência atualizadas do cpp para obter as informações mais recentes https://en.cppreference.com/w/cpp/feature_testClang parece ter parado de definir
__cpp_coroutines
desde a versão 17 https://godbolt.org/z/nc1GhGGTo