패키지 태스크를 사용할 때 매우 이상한 것이 있습니다. ~packaged_task을 읽을 때 std::packaged_task
이 실행되기 전에 파괴되면 약속이 깨지고 미래의 결과를 얻으려고하면 std::future_error
을 던져야한다는 인상을받습니다.std :: packaged_task 파괴시 약속을 어기 지 않으시겠습니까?
그러나 Visual Studio 2013에서는 그렇지 않습니다. 이 다음 코드를 가지고 : 나는 실행하기 위해 포장 작업을 기다리고, std::future_error
차단 f.get()
에 대신을 얻을 것으로 기대하고 있습니다
#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;
}
.
다른 컴파일러를 시도 : http://ideone.com/Wt0WOc 실제로 내가 비주얼 스튜디오 2013의 버그를 보거나 내가 뭔가를 놓친 가지고 std::future_error("Broken promise")
...
암을 던져 무엇입니까?
링크를 올바르게 읽었습니까? VS 2013에서 수정되지 않습니다. –
@ 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), 버그 수정을 거의 뒷받침하지 않습니다. –
위대한, 우리가 구입 한 스튜디오는 겨우 1 살이며 그들은 이미 우리를 꼬집어 남겨두고 있습니다. * 한숨 * 확인해 주셔서 감사합니다. 링크 로이 답변을 수락 내 의심에 최종 확인을 넣어. –