如果參數類型在Visual Studio(2012,2013,2013年11月CTP)中返回void
,我發現std::packaged_task
無法推送到std::vector
。例如,在Visual Studio中的std :: packaged_task錯誤?
typedef std::packaged_task<void()> packaged_task;
std::vector<packaged_task> tasks;
packaged_task package;
tasks.push_back(std::move(package));
錯誤消息是:
error C2182: '_Get_value' : illegal use of type 'void'
error C2182: '_Val' : illegal use of type 'void'
error C2182: '_Val' : illegal use of type 'void'
error C2512: 'std::_Promise<int>' : no appropriate default constructor available
error C2665: 'std::forward' : none of the 2 overloads could convert all the argument types
我認爲這是錯誤,因爲此代碼段工作,如果
- 的返回類型不是
void
, - 它在XCode中編譯。
在Visual Studio中是否有解決方案或其他選項?我知道這種提升可以用來取代這個。
解決方法:爲什麼不使用emplace_back – 2014-11-04 11:05:23
我可以用簡單的'auto m = std :: move(package);'來重現此操作。我懷疑這是一個MSVC錯誤。 – Niall 2014-11-04 11:44:03