Каково поведение `std :: future :: then` при вызове более одного раза? - PullRequest
0 голосов
/ 27 июня 2018

Согласно TS Concurrency, что должно произойти в следующем коде?

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 голосов
/ 27 июня 2018

Согласно cppreference , оно не определено:

Прикрепите функцию продолжения к *this. Поведение не определено, если *this не имеет связанного общего состояния (т. Е. valid() == false).

...

После возврата этой функции valid() равно false.

...