Рассмотрим следующий код:
#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
, все работает.Что здесь происходит?