Здравствуйте, B0FEE664, Вы писали:
ЕМ>>Потому, что enum создает группу идентификаторов, объединенных общей идеей
BFE>И для этого они лежат в namespace.
Тогда почему там не лежат члены классов?
ЕМ>>Почему в обсуждаемом примере все идентификаторы начинаются на E?
BFE>Предполагаю, что это сокращение от слова ERROR.
А
зачем нужен такой префикс? Уникальность обеспечивается и без него.
BFE>Вот если их поместить в отдельный namespace, то они и не будут выбиваться из схемы (раз уж изначально это не было сделано)
Изначально, напомню, инкапсуляции не было и для полей структур. Ее тоже зря сделали?
BFE>использовать #define для констант уместнее, чем enum.
Я бы сказал, что уместнее использовать [static] const, а при невозможности — #define.

Но это для
разрозненных констант, от которых не ожидается какой-либо регулярности. Если же константы хотя бы в основе завязаны на перечисление, то вполне логично определять их в перечислении.
BFE>Вот сейчас уже есть нормальные константы. Вы перестали использовать перечисления для того, чтобы задавать константы?
Я ж говорил, что для "просто констант" давно использую [static] const. Но, если мне нужны константы, например, для кодов ошибок, разделенных на группы (по степени серьезности, или по ситуациям, по связанным объектам и т.п.), то альтернативой enum будет только ручной инкремент. Вы предлагаете использовать его?
Если Вы до сих пор пытаетесь провести аналогию с шаблонными трюками, то это ж несопоставимые вещи. enum — простая конструкция, ее смысл очевиден любому, кто хоть более-менее знаком с языком. Она не порождает отдаленных последствий. Ну и то, что в языке таки появился enum class, уже говорит о том, что проблему осознали, и приняли меры для ее устранения. А что появилось в языке для замены шаблонной магии? Даже if constexpr можно применить только к исполняемому коду. Это не метапрограммирование, а издевательство.