Я сталкиваюсь с чем-то очень странным при использовании пакетных задач. При чтении ~packaged_task У меня создается впечатление, что если std::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
на f.get()
, но вместо этого он блокирует, ожидая выполнения упакованной задачи.
Попытка другого компилятора: http://ideone.com/Wt0WOc действительно бросает std::future_error("Broken promise")
...
Я вижу ошибку в Visual Studio 2013 или что-то пропустил?