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 的一部分。
此 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 的一部分。