我在使用打包任务时遇到了一些非常奇怪的事情。在阅读~packaged_task时,我得到的印象是,如果 astd::packaged_task
在执行之前被销毁,则承诺将被打破,并且尝试从未来获取结果应该抛出std::future_error
。
但是,在 Visual Studio 2013 上似乎并非如此。采取以下代码:
#include <iostream>
#include <future>
#include <functional>
int main() {
std::future<int> f;
{
std::packaged_task<int()> task([](){return 3; });
f = task.get_future();
}
std::cout<<f.get()<<std::endl;
return 0;
}
我期待得到一个std::future_error
onf.get()
但它反而阻塞,等待打包的任务被执行。
尝试另一个编译器:http: //ideone.com/Wt0WOc确实会抛出一个std::future_error("Broken promise")
......
我是在 Visual Studio 2013 中看到错误还是我错过了什么?