MS Visual Studio 2013上的std :: reference_wrapper

时间:2015-05-08 12:59:16

标签: c++ c++11 visual-studio-2013 reference-wrapper

我尝试编译一些非常类似的代码:

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

但无法弄清楚,为什么它没有编译。我很确定,相同的代码在MS Visual Studio 2012上编译得很好 - 但在Visual Studio 2013上,它会报告以下编译错误:

User

我尝试将复制,移动,赋值运算符添加到我的类中 - 但无法解决此错误。如何确切地找出此错误引用的已删除函数?

1 个答案:

答案 0 :(得分: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(在本地测试)。