Карта индексируется кортежами в VC ++ - PullRequest
3 голосов
/ 15 марта 2011

Рассмотрим следующий код:

#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 ]

4 голосов
/ 15 марта 2011

В Visual C ++ 2010 есть ошибка при использовании std::tuple в качестве типа ключа в ассоциативном контейнере (например, std::map).

Обходной путь (упомянутый всвязанный отчет об ошибке) заключается в создании временного std::tuple:

m[K(key)] = 1;
1 голос
/ 15 марта 2011

N3242 , 20.4.2.7 [tuple.rel] определяет реляционные операторы для кортежа.

Если вы добавите #include <map>, этот пример также хорошо компилируется в libc ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...