Во-первых, я хочу сказать, что согласно cppreference.com, невозможно инициализировать перечисление переменной value.
Согласно http://en.cppreference.com/w/cpp/language/value_initialization, инициализация значения enum фактически выполняет нулевую инициализацию. Из этого следует, что согласно http://en.cppreference.com/w/cpp/language/zero_initialization эффект нулевой инициализации перечисления:
Если
T
является скалярным типом, начальное значение объекта представляет собой интегральную константу нуль, неявно преобразованную вT
.
Однако интегральная постоянная нуля неявно конвертируется в перечисление. В конечном счете, перечисление не может быть инициализировано значением. Это звучит странно, а инициализация ценности - enum работает на VC, GCC и clang. Итак, что говорит об этом стандарт?
Во-вторых, согласно http://en.cppreference.com/w/cpp/language/static_cast:
Тип целочисленного типа с плавающей запятой или перечислением может быть преобразован в любой полный тип перечисления (результат неопределен (до С++ 17) undefined (начиная с С++ 17), если значение выражения, преобразованного к типу перечисления, не является одним из целевых значений перечисления)
Итак, означает ли это, что инициализация значения enum (если оно вообще работает) может фактически привести к поведению undefined, если в перечислении назначения нет счетчика, равного 0
?