170 похожих чатов

В смысле, и как тогда. например здесь http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1766 сделали все

логично, 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 получается, в последней версии драфта? не дает смысл.

7 ответов

25 просмотров

UB только для unscoped enum без явно определённого underlying type, и то нужно попасть вне диапазона между минимальным значением и максимальным

ALIVEBEEF- Автор вопроса
Ofee Oficsu
UB только для unscoped enum без явно определённого...

хорошо, где написано, что призойдет в out-of-range случае для scoped enum?

Ofee Oficsu
UB только для unscoped enum без явно определённого...

Блин, получается для enum class недостаточно просто switch о всем значениям бахнуть?

Ofee Oficsu
Всё верно, default метка не помешает

default метка как раз мешает, т.к. не срабатывает варнинг компилятора на то что ты не все значения обработал

Kirill Bolshakov
default метка как раз мешает, т.к. не срабатывает ...

Как вариант – отказаться от enum class в пользу обычного enum, если это возможно. К сожалению, оба обладают слишком большим набором особенностей

Kirill Bolshakov
default метка как раз мешает, т.к. не срабатывает ...

ну так и обрабатывай спокойно только те значения, которые указаны в энаме, у тебя ведь явно в этом случае не strong typedef. А кто там решит кастить всякую левую хрень в твой тип ссзб

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта