私はboost1.53でコルーチンを使用しています。以下のコードを参照してください。
boost::coroutines::coroutine<int()> f(std::bind(foo, ...));
std::vector<decltype(f)> container; // it can be compiled
container.push_back(f); // compile error
エラー:
no matching function for call to ‘std::vector<boost::coroutines::coroutine<int(),0> >::vector(paracel::coroutine<int>&)’
更新:「boost::coroutines::coroutine」にコピー構築/演算子がないため、エラーが発生しました。ここでは、インデックスを「f」にマップするコンテナに「f」を保存したいだけです。
unordered_map と emplace_back も試しましたが、まだ動作しません!
C++ で動作させるにはどうすればよいですか?
Update2: vector,unordered_map, map を emplace_back, push_back, std::move と一緒に試してみましたが、すべて失敗しました。しかし、list と deque は push_back/emplace_back と std::move で問題ありません:
std::deque<decltype(f)> container1;
container.push_back(std::move(f)); // ok
std::deque<decltype(f)> container2;
container.emplace_back(std::move(f)); // ok
std::list<decltype(f)> container3;
container.push_back(std::move(f)); // ok
std::list<decltype(f)> container4;
container.emplace_back(std::move(f)); // ok
なんで?