C++11 error C2280 (VC++ 2013のバグ)
・threadコンストラクタを介して右辺値参照を渡せないのはVC++の既知バグ(VC++ 2012でも同じ)であることをAlex KorbanのC++ Rocks(p.197)で知った
// promiseをthreadコンストラクタに渡そうとするとエラーになる
error C2280: 'std::promise<int>::promise(const std::promise<int> &)' : 削除された関数を参照しようとしています。
以下がそのコード例。gcc(Ubuntu)では問題なく動く。
// VC++ 2013ではC2280エラーになる
#include <iostream> // std::cout
#include <thread> // std::thread
#include <future> // std::promise, std::future
void producer(std::promise<int> p) {
p.set_value(10);
}
int main()
{
std::promise<int> prom; // create promise
std::future<int> fu = prom.get_future(); // engagement with future
std::thread th(producer, move(prom));
std::cout << fu.get() << '\n';
th.join();
}