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

bwleehnv  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(151)

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

但是在g10中,它被列为具有完全支持或C20的协程,它没有。
(去掉experimental没有用。)
我是这样编的:g++ -g -std=c++2a -fcoroutines -c main.cpp .
它抱怨没有包含文件生成器,如果我取出#include,该生成器就不是std::的一部分。或者没有定义。我想在新的标准中应该有它的另一个名字吧?或者如果没有,我该怎么做才能得到一个使用co_yield的协程呢?

cwtwac6a

cwtwac6a1#

GCC's status list中,除了它的协程支持之外,没有任何东西表明它支持p0912r5之外的任何东西,p0912r5不提供std::generator,无论是实验性的还是其他的。
我记得VS added <experimental/generator> a few years ago;我想愚者从来没有这样做过。
如果它目前被提议包含在C++中,并且你可以找到相关的提议,也许你可以跟踪它的支持状态。但是老实说,现在,你最好自己写一个工作的,直到它成为某个实际标准的一部分。

*tl;dr:虽然它 * 是 * 一个协程,但这个特性不是 * 协程TS的 * 一部分

nkhmeac6

nkhmeac62#

如果你需要一个g++11及以上的发电机,复制粘贴一个在这里:
https://en.cppreference.com/w/cpp/coroutine/coroutine_handle

相关问题