アトミックを含むマップ内にオブジェクトを構築しようとしているため、コピーも移動もできません。
私のC++リファレンスの読みは、マップemplace
がこれを行うことができるはずだということです。ただし、コンストラクターが削除されているか存在しないため、次のコードはコンパイルされません。使用make_pair
しても役に立ちません。
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
これは可能ですか、そうでない場合はなぜですか?
編集: コンパイラは Linux の gcc 4.8.1 です