首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clang中C++20协同支持的现状是什么?

Clang中C++20协同支持的现状是什么?
EN

Stack Overflow用户
提问于 2021-07-27 07:43:08
回答 1查看 4.4K关注 0票数 6

根据cppreference.com ( https://en.cppreference.com/w/cpp/compiler_support#C.2B.2B20_features )的说法,自第8版以来,Clang一直部分支持C++20协同服务:

但是如果在Clang主干(即将发布的版本13)中,我会编写

代码语言:javascript
复制
#include <coroutine>

它导致错误( https://gcc.godbolt.org/z/rTfjbarKz ):

代码语言:javascript
复制
/opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/12.0.0/../../../../include/c++/12.0.0/coroutine:334:2: error: "the coroutine header requires -fcoroutines"
#error "the coroutine header requires -fcoroutines"

如果我在命令行中添加了-fcoroutines标志,那么Clang ( https://gcc.godbolt.org/z/qMrv6nMzE ):

代码语言:javascript
复制
clang-13: error: unknown argument: '-fcoroutines'

在Clang中有什么方法可以开始使用C++20协同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-27 07:51:30

请注意,第一个错误出现在GCC标准库中,由此可以推断,-fcoroutines选项是GCC而不是Clang的。

要使用Clang libc++进行构建,您需要添加选项-stdlib=libc++。但这将导致找不到<coroutine>头文件。

由于coroutines仍然处于“实验性”阶段,所以您必须包括<experimental/coroutine>

所以有两件事你需要改变:

(-stdlib=libc++)

  • Include

  • 使用Clang libc++

  • 实验头文件(#include <experimental/coroutine>)

还请注意,由于协同是实验性的,因此头文件中定义的符号将位于std::experimental命名空间中。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68540816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档