Visual c++ 在VC++;

Visual c++ 在VC++;,visual-c++,c++11,tuples,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

考虑以下代码:

#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));
}
#包括
模板
void mymapfunc(映射和维护、常量K和键)
{
m[键]=1;
}
void f()
{
typedef std::元组对;
std::map m;
mymapfunc(m,对(1,2));
}
该代码在VC++2010中失败,但在GCC4.5中编译良好(没有使用-Wall和-pedantic的警告)。错误在
内部的某个地方,很难破译

如果将
std::tuple
更改为
std::pair
,则一切正常。这是怎么回事?

在关联容器中将
std::tuple
用作键类型(如
std::map
)时会出现这种情况

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

m[K(key)] = 1;
,20.4.2.7[tuple.rel]定义了tuple的关系运算符


如果您添加了
#include
,这个示例也可以很好地编译。

Bah!它是大约一年前发现的,至今仍未修复。不过,谢谢你的回答。