Есть ли способ узнать, будет ли будущее выбрасывать get()
?
Скажем, у меня есть что-то вроде этого:
#include <cstdlib>
#include <future>
#include <stdexcept>
#include <iostream>
int main() {
srand(time(0));
auto randomSuccess = [] {
if (rand() >= rand())
throw std::runtime_error("Random exception");
};
auto f = std::async(std::launch::deferred, randomSuccess);
f.wait();
// from here, the future is valid
std::cout << "Now future is " << (f.valid() ? "valid" : "not valid yet") << std::endl;
f.get(); // how to know if this will throw?
}
Я бы просто хотел "шпионить"внутреннее состояние будущего, точно так же, как bool valid() const noexcept;
делает, оставляя будущее нетронутым (функция будет const), поэтому помещать блок try/catch
не то, что я хочу делать.