多次调用std :: future :: then的行为是什么?

时间:2018-06-27 04:55:04

标签: c++ asynchronous future

根据并发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或使用其他代码行为?我不清楚。

1 个答案:

答案 0 :(得分:2)

根据cppreference,它是未定义的:

  

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

     

...

     

此函数返回后,valid()false