パッケージ化されたタスクを使用しているときに、非常に奇妙なことに遭遇しました。~packaged_taskを読むと、 astd::packaged_task
が実行される前に a が破棄された場合、約束が破られ、将来から結果を取得しようとすると がスローされるという印象を受け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
オンになることを期待していますf.get()
が、代わりにブロックされ、パッケージ化されたタスクが実行されるのを待ちます。
別のコンパイラを試す: http://ideone.com/Wt0WOcは実際にstd::future_error("Broken promise")
...をスローします。
Visual Studio 2013 にバグがありますか、それとも何か見落としていますか?