我有一段代码可以正常使用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
我有点明白,临时正在创建,但不知道如何解决这个问题。有什么想法吗?
答案 0 :(得分:7)
rvalues无法绑定到非const引用。 MSVC有一个“扩展允许这样做。要符合标准,你需要
const auto& refInstance = m_map.find(key);
但是这会返回一个迭代器。使用对迭代器的引用是不常见的。价值很好:
auto refInstance = m_map.find(key);