Из n3290, 5.2.9 Статическое приведение [expr.static.cast]:
10 Значение целочисленного типа или типа перечисления может быть явно преобразовано в тип перечисления.Значение не изменяется, если исходное значение находится в диапазоне значений перечисления (7.2).В противном случае результирующее значение не определено (и может не входить в этот диапазон).[...]
Тип перечисления включает как типы, объявленные с enum
, так и типы, объявленные с enum class
или enum struct
, которые стандартвызывает соответственно перечисления unscoped и перечисления scoped .Более подробно описано в 7.2 объявлениях перечисления [dcl.enum].
Значения типа перечисления не следует путать с его перечислителями .В вашем случае, поскольку все перечисленные вами перечисления имеют int
в качестве базовых типов, диапазон значений такой же, как у int
: от INT_MIN
до INT_MAX
(включительно).
Поскольку 42
имеет тип int
и, очевидно, является значением int
, поведение определено.