enum explicit

Pavel
Pavel

В C++17 можно инициализировать enum значением которого в нём не объявлено:

 
enum class Handle { Invalid };
Handle h { 42 }; // OK as of C++17

Как бы получается, что в функции/методе, где нужет тот же Handle надо делать обработку невалидных значений, что уже исключительная ситуация. Может всё-таки стоит сделать enum, который никуда не кастится и не преобразуется. Получается такие недотип или полукласс с известными значениями. То есть существуют значения только явно объявленные в перечислении и никакие больше. Синтаксис легко сделать как enum explicit - благо смысл передаёт точно.

В объяснении на cppreference пришут, что это позволяет всякие удобности на каких-то ABI, но такой безопасный enum тоже нужен. Сразу пропадает необходимость проверки валидности. Ну и это в принципе в канве type safety.

5
рейтинг
Нет комментариев
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения