111
|
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
|