Ecco un po 'di codice che potrebbe sembrare che avrebbe funzionato:Perché C++ numeric_limits <enum_type> :: max() == 0?
#include <cassert>
#include <limits>
enum test { A = 1 };
int main()
{
int max = std::numeric_limits<test>::max();
assert(max > 0);
}
ma fallisce in entrambi GCC (4.6.2) e clang (2.9) su Linux: max() per i tipi enum è infatti zero! E questo rimane vero anche se si usa lo specificatore del tipo enum C++ 11 per dire esplicitamente quale tipo si vuole che l'enum abbia.
Perché è questo? E per quanto riguarda il comportamento del C++ 11, è qualcosa che viene richiesto in modo esplosivo? Non ho trovato alcuna menzione in N2347, il documento su Strongly Typed Enums.
Cosa vi aspettate il valore da essere? –
Qual è il risultato di is_specialized? – RaptorFactor
@JamesMcNellis: suppongo che si aspetti che sia uguale a numeric_limits :: max. –
RaptorFactor