Подтвердить что ты не робот

ISO С++ запрещает прямые ссылки на типы "enum"

Учитывая программу:

enum E : int
{
    A, B, C
};

g++ -c test.cpp работает отлично. Однако clang++ -c test.cpp дает следующие ошибки:

test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
     ^
test.cpp:1:8: error: expected unqualified-id
enum E : int
       ^
2 errors generated.

Эти сообщения об ошибках не имеют для меня никакого смысла. Я не вижу никаких прямых ссылок здесь.

4b9b3361

Ответ 1

Указание базового типа для перечисления - это язык С++ 11. Чтобы получить код для компиляции, вы должны добавить переключатель -std=c++11. Это работает как для GCC, так и для Clang.

Для перечислений в С++ 03 базовый тип интеграла определяется реализацией, если значения перечислителя не могут быть помещены в int или unsigned int. (Тем не менее, компилятор Microsoft разрешил указывать базовый тип перечисления как проприетарное расширение со времен VS 2005.)