Преобразование в перечисление без фиксированного базового типа из «гаммы»

Если у вас есть enum без фиксированного базового типа, вы можете получить его базовый тип через std::underlying_type<E>,

enum no_fixed_underlying { bob = 1; };
std::underlying_type_t<no_fixed_underlying> x; // valid

После того, как вы это сделали, это все еще считается не фиксированный базовый тип?

Перечисление без фиксированного базового типа имеет ограниченный диапазон, в основном описываемый как «диапазон битов, которые могут представлять значения перечисления». Преобразование в перечисление со значением, которое находится «вне этих битов», является неопределенным поведением.

Таким образом, учитывая перечисление без фиксированного базового типа, кажется, что вы не можете конвертировать все значения базового типа к значению перечисления.

enum no_fixed_underlying { bob = 1; };
std::underlying_type_t<no_fixed_underlying> x = -1; // valid
auto e = (no_fixed_underlying)x; // undefined behavior!

Это правильно?

В последнем проекте expr.static.cast / 10 и dcl.enum / 8 — это то, на чем я основывался вышеизложенное понимание.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]