1
我遇到的問題與MSVC右值引用2012年參數(的Visual C++ 2012)
#include <thread>
#include <string>
#include <future>
void foo(std::promise<std::string> &&prms) { /* some code */ }
int main() {
std::promise<std::string> prms;
// std::future<std::string> ftr = prms.get_future();
std::thread th(&foo, std::move(prms));
// some other code
}
編譯器說:錯誤C2664:「無效(STD ::承諾< _Ty > & &)」:不能從轉換參數1 '的std ::承諾< _Ty>' 到 '的std ::承諾< _Ty> & &'
有沒有我的錯誤(當時如何解決它)或編譯器問題(然後我我想知道這種行爲的起源)?
@KerrekSB - 實際上,這是來自Bartocz Milewski的代碼示例。看看[他的帖子](http://bartoszmilewski.com/2009/03/03/broken-promises-c0x-futures/)(section * future *)。我想知道,爲什麼我不能編譯它。 – Loom
我想知道爲什麼Bartocz正試圖移動這個承諾。 –
@LightnessRacesinOrbit - 我可以猜測,這是一種擺脫範圍問題的方法。如果左值引用'promise',那麼這個問題是可能的。 – Loom