Я думаю, что причина в истории.Возможно, стоит отметить, что в следующей версии C ++ (C ++ 0x, C ++ 1x) введены перечисления областей, которые не допускаются для неявного преобразования в целое число, что делает следующий код некорректным
enum class X { A, B, C };
if(X::B) { ... }
Для чисел имеет смысл разрешить неявное преобразование в bool, хотя для перечислений это не имеет особого смысла, потому что основная цель состоит в том, чтобы перечислить список значений - только вторичные действительные значенияЯ считаю, что большую часть времени интересны счетчики.Перечисления с областью видимости потребуют приведение
if(static_cast<bool>(X::B)) { ... }
. Это добавляет некоторую безопасность типов, которую пока не позволяла необходимая совместимость перечислений C (я думаю, это нарушило бы большой код, если бы оно было запрещено обычными перечислениями).