1

次のようなコードをコンパイルしようとしました:

#include <string>
#include <unordered_map>

class A{
};

int main(int argc, char* argv[]){
  std::unordered_map<std::string, std::reference_wrapper<const A>> stringToRef;
  A a;
  const A& b = a;
  stringToRef.insert(std::make_pair("Test", b));
  return 0;
}

しかし、なぜコンパイルされないのかわかりません。同じコードが MS Visual Studio 2012 で正常にコンパイルされたと確信していますが、Visual Studio 2013 では次のコンパイル エラーが報告されます。

error C2280: std::reference_wrapper<const A>::reference_wrapper(_Ty &&): attempting to reference a deleted function

クラスにコピー、移動、代入演算子を追加しようとしましたが、このエラーを取り除くことができませんでした。このエラーが参照している削除された機能を正確に知るにはどうすればよいですか?

4

1 に答える 1

2

を保存したいので、から直接取得するためにstd::reference_wrapper<const A>使用できます。[std::cref][1]a

#include <functional>
#include <string>
#include <unordered_map>
#include <utility>

class A{
};

int main(int argc, char* argv []){
  std::unordered_map<std::string, std::reference_wrapper<const A>> stringToRef;
  A a;
  stringToRef.insert(std::make_pair("Test", std::cref(a)));
  return 0;
}

これは、GCC/Clang+libstdc++Clang+libc++、および MSVS 2013 (ローカルでテスト済み) で動作します。

于 2015-05-08T14:16:04.420 に答える