// Matching enum E1 { E1Enumerator1, E1Enumerator2 = 3, E1Enumerator3 } x1; // Value mismatch enum E2 { E2Enumerator1, E2Enumerator2 = 3, E2Enumerator3 } x2; // Name mismatch enum E3 { E3Enumerator1, E3Enumerator2 = 3, E3Enumerator3 } x3; // Missing enumerator enum E4 { E4Enumerator1, E4Enumerator2, E4Enumerator3 } x4; // Extra enumerator enum E5 { E5Enumerator1, E5Enumerator2, E5Enumerator3 } x5; // Matching, with typedef typedef enum { E6Enumerator1, E6Enumerator2 } E6; E6 x6;