使用打包任務時遇到了一些非常奇怪的事情。在閱讀~packaged_task時,我得到的印象是,如果std::packaged_task
在執行之前被銷燬,承諾將被破壞,並且試圖從未來獲得結果應該拋出std::future_error
。std :: packaged_task沒有破壞對破壞的承諾?
但是,在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
上f.get()
而是它塊,等待包裝任務要執行。
嘗試其他編譯器:http://ideone.com/Wt0WOc確實拋出一個std::future_error("Broken promise")
...
我看到在Visual Studio 2013中的錯誤或有我錯過了什麼?
所以我正確地閱讀這些鏈接,這不會在VS 2013中修復? – 2014-09-10 10:46:16
@EmilyL。我說不太可能。根據[本頁FAQ部分的Q5](http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking -changes-in-vs-2013.aspx),他們很少回溯bug修復。 – 2014-09-10 10:46:41
太棒了,我們購買的工作室還不到一年,他們已經離開了我們。 *感嘆*感謝您的確認。接受這個答案,因爲鏈接對我的懷疑進行了最後的確認。 – 2014-09-10 10:48:46