Почему в C++ numeric_limits::max() == 0?

Вот код, который, казалось бы, должен работать:

#include <cassert>
#include <limits>

enum test { A = 1 };

int main()
{
    int max = std::numeric_limits<test>::max();
    assert(max > 0);
}

Но он не работает ни в GCC (4.6.2), ни в clang (2.9) в Linux: max() для типов enum фактически равен нулю! И это остается верным, даже если вы используете спецификатор типа перечисления C++11, чтобы явно сказать, какой тип вы хотите, чтобы имело ваше перечисление.

Почему так? А что касается поведения C++11, является ли оно чем-то явно требуемым? Я не смог найти упоминания об этом в N2347, документе по сильно типизированным перечислениям.

12
задан John Zwinck 8 February 2012 в 21:37
поделиться