clang错误:非const左值引用无法绑定到不兼容的临时

时间:2014-04-10 19:36:38

标签: c++ compiler-errors clang

我有一段代码可以正常使用MSVC,但无法使用clang ++编译

void MyCass::someMethod()
{
   std::wstring key(...);
   auto& refInstance = m_map.find(key); // error here
}

其中m_map定义为

std::map<const std::wstring, std::shared_ptr<IInterface>> m_map;

和clang抱怨

non-const lvalue reference cannot bind to incompatible temporary

我有点明白,临时正在创建,但不知道如何解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

rvalues无法绑定到非const引用。 MSVC有一个“扩展允许这样做。要符合标准,你需要

const auto& refInstance = m_map.find(key);

但是这会返回一个迭代器。使用对迭代器的引用是不常见的。价值很好:

auto refInstance = m_map.find(key);