std::unordered_map
aを aに置き換えようとしていtbb::concurrent_hash_map
ます。
私の元のコード:
typedef std::unique_ptr<V> V_ptr;
std::unordered_map<K, V_ptr> hm;
V_ptr v (new V);
K k;
hm.insert (std::make_pair (k, std::move (v)));
clang 3.3 で正常にコンパイルされます。unordered_map を concurrent_hash_map に切り替える:
typedef std::unique_ptr<V> V_ptr;
tbb::concurrent_hash_map<K, V_ptr> hm;
V_ptr v (new V);
K k;
hm.insert (std::make_pair (k, std::move (v)));
エラーが発生します:...stl_pair.h:105:21: error: call to deleted constructor of
'std::unique_ptr<...
これは clang 3.3 のバグですか? 多くのコンテナーで std::unique_ptrs を使用すると、gcc 4.5 で同様のエラーが発生したことを覚えています。(上記の元のコードは、例として gcc 4.5 ではコンパイルされません。) それとも、concurrent_hash_maps について何か見逃したのでしょうか?