如何在Mac上使用C++2a编译生成器和协程

3

我正在为我的MacBook设置C++20环境,但编译代码时遇到了问题。我已经安装了最新的Xcode、llvm和gcc。以下是我尝试编译的代码:

#include <chrono>
#include <experimental/coroutine>
#include <future>
#include <iostream>

using namespace std;

generator<int> getInts(int first, int last) {
  for (auto i = first; i <= last; ++i) {
    co_yield i;
  }
}

int main() {
  for (auto i : getInts(5, 10)) {
    std::cout << i << " ";
  }
}

然而,我遇到了以下错误:
$ g++ gen.cpp -std=c++2a
In file included from gen.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/experimental/coroutine:66:5: warning: 
      <experimental/coroutine> cannot be used with this compiler [-W#warnings]
#   warning <experimental/coroutine> cannot be used with this compiler
    ^

非常感谢能提供任何解决这个编译问题的见解。

1个回答

4

协程 TS 尚未被投票纳入 C++20(事实上,已经进行了三次分别投票,没有在所有投票中达成共识),所以即使 GCC 实现了它(实际上它并没有),也不会通过 -std=c++2a 开关激活。

现在,Clang 实现了协程 TS,您需要使用 -fcoroutines-ts 打开它。而且显然,您必须使用 libc++。


@sbh:好的,请停止在这里发表评论。如果你想提供一个详细的命令行来完成你想要的操作,可以使用“添加答案”按钮。你完全可以为自己的问题添加答案。一次又一次地在现有答案后面添加评论并不是获取信息的合适方式。 - Nicol Bolas
1
2022年的XCode现状如何?它最终实施了吗?真的很想现在开始使用它。 - Lothar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接