`typedef enum {} t`是否允许在C++ 0x中使用带范围的枚举元素标识符?

xto*_*ofl 6 c++ enums c++11

我相信新的C++标准允许枚举类型的额外"范围":

enum E { e1, e2 };

E var = E::e1;
Run Code Online (Sandbox Code Playgroud)

由于我知道很多源文件包含旧的C风格枚举typedef,我想知道新标准是否允许对这些匿名枚举类型使用typedef:

typedef enum { d1, d2 } D;
D var = D::d1; // error?
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 5

新标准将添加一种新类型的强枚举,但语法略有不同,旧样式枚举将兼容(C++ 03中的有效代码将是有效的C++ 0x代码),因此您不需要做任何事情来保持遗留代码有效(不是typedef,而不是其他任何东西).

enum class E { e1, e2 }; // new syntax, use E::e1
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)
Run Code Online (Sandbox Code Playgroud)

这里有一个C++ FAQ 处理这个特殊问题.