g ++ 4.7.2 обработка использования для псевдонимов типов, кажется, сломана

В следующем коде может показаться, что g ++ 4.7.2 запутывается using основанный псевдоним типа.

Код:

#include <map>

enum class Direction
{
UP=-1,
DOWN=1
};

template <Direction dir>
struct Comparator
{
bool operator()(int lhs, int rhs) const
{
return lhs<rhs; // Comparison should be based on dir
// but let's not even use dir for now
}
};

template <Direction dir>
using IntToIntMap=std::map<int, int, Comparator<dir>>;

template <Direction dir>
void TestFunc()
{
using TheMap=IntToIntMap<dir>; // TheMap should be a synonym for
// IntToIntMap<dir>

typename IntToIntMap<dir>::value_type value1; // This compiles
typename TheMap::value_type value2;           // This does not (???)
}

int main()
{
TestFunc<Direction::UP>();
}

Скомпилируйте код с помощью:

g++ -std=c++11 -Wall --pedantic -o test test.cpp

Неожиданные ошибки времени компиляции:

test.cpp: In instantiation of 'void TestFunc() [with Direction dir =
(Direction)-1]
test.cpp:34:29:   required from here
test.cpp:29:33: error: no type named 'value_type' in 'using TheMap =
IntToIntMap<dir>'

Что не так с рассматриваемой строкой? Является ли код нарушением стандарта C ++ 11 или это ошибка g ++ 4.7.2? Живой код в g ++ — 4.7

3

Решение

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]