请考虑以下代码:
#include <tuple>
template <typename Map, typename K>
void mymapfunc(Map& m, const K& key)
{
m[key] = 1;
}
void f()
{
typedef std::tuple<int,int> Pair;
std::map<Pair,int> m;
mymapfunc(m, Pair(1,2));
}
此代码在VC ++ 2010中失败,但在gcc 4.5中编译良好(没有-Wall和-pedantic的警告)。该错误位于<tuple>
内,难以破译。
如果std::tuple
更改为std::pair
,则一切正常。这是怎么回事?
答案 0 :(得分:4)
在关联容器(如std::tuple
)中使用std::map
作为键类型时,有a bug in Visual C++ 2010。
解决方法(在链接的错误报告中提到)是构建一个临时的std::tuple
:
m[K(key)] = 1;
答案 1 :(得分:1)