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