Ответ 1
В С++ типы перечислений являются скалярными типами, но в то же время они являются составными типами, поскольку они построены поверх некоторого фундаментального интегрального типа. В случае массива или указателя вы явно укажете "базовый" тип, но в случае перечисления конкретный базовый тип интеграла выбирается неявно и автоматически реализацией. У вас нет ручного контроля над базовым интегральным типом, который по-прежнему не дисквалифицирует типы перечислений как составные по своей природе.
Некоторые компиляторы (а также будущий С++ стандарт С++ 0x) позволяют пользователю указывать базовый целочисленный тип для данного типа перечисления, что делает его более очевидным, что он на самом деле является составным типом. См. здесь для таких примеров, как
enum class Color : char { red, blue };