Вот код, который, казалось бы, должен работать:
#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, документе по сильно типизированным перечислениям.