1 // { dg-do compile { target c++11 } } 2 3 namespace one 4 { 5 struct S 6 { 7 enum { A = 1, B = 2 }; 8 struct T 9 { 10 enum { B = 102 }; 11 12 enum class E1; 13 enum E2 : int; 14 }; 15 }; 16 17 enum class S::T::E1 { A1 = A, B1 = B, C1 }; 18 enum S::T::E2 : int { A1 = A, B1 = B, C1 }; 19 20 static_assert(int(S::T::E1::A1) == 1, "error"); 21 static_assert(int(S::T::E1::B1) == 102, "error"); 22 static_assert(int(S::T::E1::C1) == 103, "error"); 23 24 static_assert(int(S::T::E2::A1) == 1, "error"); 25 static_assert(int(S::T::E2::B1) == 102, "error"); 26 static_assert(int(S::T::E2::C1) == 103, "error"); 27 static_assert(int(S::T::A1) == 1, "error"); 28 static_assert(int(S::T::B1) == 102, "error"); 29 static_assert(int(S::T::C1) == 103, "error"); 30 } 31 32 33 namespace two 34 { 35 namespace S 36 { 37 enum { A = 1, B = 2 }; 38 namespace T 39 { 40 enum { B = 102 }; 41 42 enum class E1; 43 enum E2 : int; 44 } 45 } 46 47 enum class S::T::E1 { A1 = A, B1 = B, C1 }; 48 enum S::T::E2 : int { A1 = A, B1 = B, C1 }; 49 50 static_assert(int(S::T::E1::A1) == 1, "error"); 51 static_assert(int(S::T::E1::B1) == 102, "error"); 52 static_assert(int(S::T::E1::C1) == 103, "error"); 53 54 static_assert(int(S::T::E2::A1) == 1, "error"); 55 static_assert(int(S::T::E2::B1) == 102, "error"); 56 static_assert(int(S::T::E2::C1) == 103, "error"); 57 static_assert(int(S::T::A1) == 1, "error"); 58 static_assert(int(S::T::B1) == 102, "error"); 59 static_assert(int(S::T::C1) == 103, "error"); 60 } 61 62 63