给定以下源代码
#include <thread>
#include <future>
#include <iostream>
#include <string>
#include <chrono>
int main() {
auto task = std::async(std::launch::async, [] {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
throw std::runtime_error("error");
});
try {
while (task.wait_for(std::chrono::seconds(0)) !=std::future_status::ready)
{
std::cout << "Not ready: " << std::endl;
}
task.get();
}
catch (const std::exception& e)
{
std::cout << "Valid: " << task.valid() << std::endl;
}
}
我希望,该程序将响应Valid: 0
。使用 g++ 6.2.0 就是这种情况。但是,使用 MS VS2015 版本 14.0.25431.01 更新 3 的响应是Valid: 1
. 在异常传播到主线程之后,未来的状态不会失效。这是一个错误还是我在这里遇到了未定义的行为?