De n3290, 5.2.9 estático fundido [expr.static.cast]:
10 Valor de tipo integral o de enumeración se puede convertir explícitamente a un tipo de enumeración. El valor no se modifica si el valor original está dentro del rango de los valores de enumeración (7.2). De lo contrario, el valor resultante no está especificado (y podría no estar en ese rango). [...]
Enumeración tipo comprende tanto los tipos que se declaran con enum
y aquellos que se declaran con enum class
o enum struct
, que llama la Norma respectivamente sin ámbito enumeraciones y de ámbito enumeraciones. Descrito con más detalles en 7.2 Declaraciones de enumeración [dcl.enum].
Los valores de un tipo de enumeración no se debe confundir con sus enumeradores. En su caso, dado que las enumeraciones que declaró todas tienen int
como sus tipos subyacentes, su rango de valores es el mismo que el de int
: de INT_MIN
a INT_MAX
(inclusive).
Dado que 42
tiene el tipo int
y es obviamente un valor de int
el comportamiento está definido.
Ah, he entendido mal el significado de "valores de enumeración". Gracias. – ecatmur