Разница между обычными перечислениями (unscoped) и scoped перечислениями в C++ заключается в области видимости и правилах преобразования. 15
Unscoped перечисления экспортируют свои перечислители в объёмлющую область видимости, что может привести к конфликту имён. 5 Такие перечисления могут быть неявно преобразованы к своему базовому типу. 5
Scoped перечисления объявляются с ограничением на область видимости. 5 При использовании таких перечислений нужно всегда указывать имя перечисления вместе с перечислителями. 5 Для scoped перечислений базовый тип по умолчанию определён в стандарте и это int. 5
Некоторые преимущества scoped перечислений:
Из-за нежелательности неявных преобразований рекомендуется использовать scoped, а не unscoped перечисления. 5