логично, out-of-range value — что с ним делать? UB. дает смысл. а вот в последнем драфте добавили "If the enumeration type does not have a fixed underlying type...". при этом вроде как у scoped enum есть fixed type — int ("For a scoped enumeration type, the underlying type is int if it is not explicitly specified. In both of these cases, the underlying type is said to be fixed."). и что тогда, enum class foo {a,b}; {static_cast<foo>(999);} не UB получается, в последней версии драфта? не дает смысл.
UB только для unscoped enum без явно определённого underlying type, и то нужно попасть вне диапазона между минимальным значением и максимальным
хорошо, где написано, что призойдет в out-of-range случае для scoped enum?
Блин, получается для enum class недостаточно просто switch о всем значениям бахнуть?
Всё верно, default метка не помешает
default метка как раз мешает, т.к. не срабатывает варнинг компилятора на то что ты не все значения обработал
Как вариант – отказаться от enum class в пользу обычного enum, если это возможно. К сожалению, оба обладают слишком большим набором особенностей
ну так и обрабатывай спокойно только те значения, которые указаны в энаме, у тебя ведь явно в этом случае не strong typedef. А кто там решит кастить всякую левую хрень в твой тип ссзб
Обсуждают сегодня