当多次调用时,"std::future::then"的行为是什么?



根据并发 TS,下面的代码应该发生什么?

auto f0 = std::async([]{return 0;});
auto f1 = f0.then([](auto& f){ return f.get() + 10; });
auto f2 = f0.then([](auto& f){ if(!f.valid()) return; return f.get() + 10;});

当执行第三行代码时,f0已经有了延续,所以,根据 TS,f0应该抛出异常、中止程序、UB 还是具有不同的行为?我不清楚。

根据 cpp 首选项,它是未定义的:

将延续函数附加到*this。如果*this没有关联的共享状态(即valid() == false(,则行为是未定义的。

此函数返回后,valid()false

最新更新