ISO C++禁止对"枚举"类型的前向引用

Vla*_*eev 31 c++ clang

鉴于该计划:

enum E : int
{
    A, B, C
};
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

这些错误消息对我没有任何意义.我在这里看不到任何前瞻性参考.

Vla*_*eev 30

指定枚举的基础类型是C++ 11语言功能.要获取要编译的代码,必须添加开关-std=c++11.这适用于GCC和Clang.

对于C++ 03中的枚举,底层整数类型是实现定义的,除非枚举器的值不能适合int或unsigned int.(但是,自VS 2005以来,Microsoft的编译器允许将枚举的基础类型指定为专有扩展.)

  • 你是对的:如果用选项-std = c ++编译11是有效的([在线演示](https://gcc.godbolt.org/#compilers:!((编译器:clang380,选项:' - std %的3Dc%2B%2B11' ,源: '枚举+ E +:+ INT%0A%7B%0A ++++ A,+ B,+ C%0A%7D%3B')),filterAsm:(commentOnly:! T,指令:T,标签:T),版本:3)).gcc超过6时会给你一个明确的警告.随着gcc 6没有std标志. (2认同)
  • @Christophe:也就是说:使用gcc 6,他们(最后)将其更改为默认编译C++ 11,并要求切换符合旧标准. (2认同)