Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Will `typedef enum {} t` allow scoped enum element identifiers in C++0x?

Tags:

c++

enums

c++11

I believe the new C++ standard allows for an extra "scope" for enumerated types:

enum E { e1, e2 };

E var = E::e1;

Since I know lots of source files containing the old C-style enum typedef, I wondered if the new standard would allow using the typedef for these otherwise anonymous enumerated types:

typedef enum { d1, d2 } D;
D var = D::d1; // error?
like image 499
xtofl Avatar asked Feb 10 '10 12:02

xtofl


1 Answers

The new standard will add a new type of strong enum, but the syntax will be slightly different, and old style enums will be compatible (valid code in C++03 will be valid C++0x code) so you will not need to do anything to keep legacy code valid (not the typedef, not anything else).

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

There is a C++ FAQ here that deals with this particular issue.

like image 72
David Rodríguez - dribeas Avatar answered Oct 07 '22 10:10

David Rodríguez - dribeas