1 2 #define SOME_MACRO(a,b) 1 3 4 typedef int whatever_t; 5 typedef unsigned char uint8_t; 6 7 enum E1 : int { E1_member1, E1_member2 }; 8 enum E2 : long { E2_member1 }; 9 enum E3 : unsigned int { E3_member1 }; 10 enum E4 : unsigned long long int { } E4_var1, E4_var2; 11 enum E5 : whatever_t { E5_member1 } E5_var1; 12 13 enum class EC1 { }; 14 enum class EC2 : short { EC2_member1, EC2_member2 }; 15 16 enum struct ES1 { }; 17 enum struct ES2 : unsigned { ES2_member1, ES2_member2 }; 18 enum struct ES3 : uint8_t { ES3_member1 = SOME_MACRO(1,whatever appears here), ES3_member2 }; 19 enum struct ES4 : unsigned long long int { ES4_member1 = (1234 * 10) << 1 }; 20 enum struct ES5 : signed whatever_t { } ES4_var1[10]; 21 22 enum { Anon1_member1, Anon1_member2 }; 23 enum : unsigned int { Anon2_member1 }; 24 enum : whatever_t { Anon3_member1 }; 25 26 class Class 27 { 28 enum CE1 : int { CE1_member1 = 10, CE1_member2 = (CE1_member1 << 10) }; 29 enum class CEC1 : unsigned long int { CEC1_member1 }; 30 enum struct CES1 : int { CES1_member1 }; 31 virtual enum CEC1 Function1(enum CE1 parameter); 32 }; 33 34 // Forward declarations: we ignore them. 35 enum F1 : whatever_t; 36 enum class F2; 37 enum class F3 : whatever_t; 38 enum struct F4 : unsigned int; 39 40 // variable declarations 41 enum E1 E1_var1; 42 enum EC1 EC1_var1[10][10]; 43 //enum class EC2 EC2_var1; <-- this is NOT valid C++11 44 45 46 47