【问题标题】:C++20 in g++10: generator not definedg++10 中的 C++20:未定义生成器
【发布时间】:2021-03-25 13:05:52
【问题描述】:

此 MCVE 在 Visual Studio 中运行良好。

#include <experimental/generator>
#include <iostream>

std::experimental::generator<int> f() { for (int i = 0; i < 10; ++i) co_yield i; }

int main ()
{
    for (int i : f())
        std::cout << i << ' ';

    return 0;
}

但在被列为完全支持或 C++20 协程的 g++10 中,它没有。

(取出experimental 没有帮助。)

我正在编译:g++ -g -std=c++2a -fcoroutines -c main.cpp.

它抱怨没有包含文件生成器,如果我取出 #include,则该生成器不是 std:: 的一部分或未定义。我想在新标准中有另一个名字吗?或者如果没有,我该怎么做才能获得使用co_yield 的协程?

【问题讨论】:

  • experimental 部分在&lt;experimental/generator&gt;std::experimental::generator 表示它不是标准的一部分。因此,并非所有编译器都可以在其标准库中实现它。

标签: c++ coroutine c++20 c++-coroutine


【解决方案1】:

GCC's status list 中的任何内容除了它的协程支持外,都表示它支持 p0912r5 以外的任何东西,它不提供 std::generator,无论是实验性的还是其他的。

我记得VS added &lt;experimental/generator&gt; a few years ago;我猜 GCC 从来没有这样做过。

如果它目前被提议包含在 C++ 中,并且您可以找到相关的提议,也许您可​​以跟踪它的支持状态。但老实说,就目前而言,您最好编写自己的作品,直到它成为某些实际标准的一部分。

tl;dr:虽然它一个协程,但此功能不是协程 TS 的一部分。

【讨论】:

  • "此功能不是 Coroutines TS 的一部分。" 或 C++20。
  • 我希望有一个解决方案——我知道 C++20 不包含具有该名称的内容——但我想我的问题表述有误。我会接受并提出另一个问题。
  • @TopologicalSort 我的意思是,答案仍然是 GCC 没有——也不应该期望——拥有它。
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多