g++10 中的 C++20:未定义生成器

C++20 in g++10: generator not defined

此 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;
}

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

(去掉experimental也没有用。)

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

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

GCC's status list alongside its coroutine support says it supports anything other than p0912r5 中的任何内容均未通过实验或其他方式提供 std::generator

我记得VS added <experimental/generator> a few years ago;我想 GCC 从来没有这样做过。

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

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