15

パッケージ化されたタスクを使用しているときに、非常に奇妙なことに遭遇しました。~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 にバグがありますか、それとも何か見落としていますか?

4

2 に答える 2