由VC ++中的元组索引的映射

时间:2011-03-15 15:49:16

标签: visual-c++ c++11 tuples

请考虑以下代码:

#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,则一切正常。这是怎么回事?

2 个答案:

答案 0 :(得分:4)

在关联容器(如std::tuple)中使用std::map作为键类型时,有a bug in Visual C++ 2010

解决方法(在链接的错误报告中提到)是构建一个临时的std::tuple

m[K(key)] = 1;

答案 1 :(得分:1)

N3242,20.4.2.7 [tuple.rel]定义元组的关系运算符。

如果您添加#include <map>,此示例也会在libc++中编译正确。