Согласно 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 или имеет другое поведение? Мне неясно.