为何最新版Clang未定义特性测试宏__cpp_coroutines?
问题原因解析
宏的定义逻辑不同
__cpp_impl_coroutine是libc内部的实现标记宏,只要<coroutine>头文件存在且链接了libc,这个宏就会被定义,它仅代表库层面有协程的底层实现,和标准协程特性是否启用无关。__cpp_coroutines是C标准规定的协程特性测试宏,只有当编译器明确启用了C20协程功能时,才会被定义。
Clang的特性启用规则
Clang 18在-std=c++20编译模式下,并不会默认开启协程特性支持,必须额外添加-fcoroutines编译选项,才能启用完整的C++20标准协程功能,此时__cpp_coroutines才会被正确定义。解决办法
将编译命令修改为:clang++ -std=c++20 -stdlib=libc++ -fcoroutines ./main.cpp重新编译后,
__cpp_coroutines即可正常定义。
内容的提问来源于stack exchange,提问作者xmllmx
相关产品推荐
相关产品推荐

