Ответ 1
Указание базового типа для перечисления - это язык С++ 11. Чтобы получить код для компиляции, вы должны добавить переключатель -std=c++11
. Это работает как для GCC, так и для Clang.
Для перечислений в С++ 03 базовый тип интеграла определяется реализацией, если значения перечислителя не могут быть помещены в int или unsigned int. (Тем не менее, компилятор Microsoft разрешил указывать базовый тип перечисления как проприетарное расширение со времен VS 2005.)