1 // PR c++/20420
2 
3 class B
4 {
5 protected:
6   enum E { E1, E2, E3 };
7   struct S { int i; E e; };
8 };
9 
10 class D : private B
11 {
12 public:
13   using B::E;       // { dg-message "previous" }
14   using B::S;       // { dg-message "previous" }
15 
16 private:
17   enum E {};        // { dg-error "conflicts" }
18   struct S {};      // { dg-error "conflicts" }
19 };
20 
21 template<typename T>
22 class BT
23 {
24 protected:
25   enum E { E1, E2, E3 };
26   struct S { int i; E e; };
27 };
28 
29 template<typename T>
30 class DT : private BT<T>
31 {
32 public:
33   using BT<T>::E;   // { dg-message "previous" }
34   using BT<T>::S;   // { dg-message "previous" }
35 
36 private:
37   enum E {};        // { dg-error "conflicts" }
38   struct S {};      // { dg-error "conflicts" }
39 };
40 
41 template class DT<int>;
42 
43 namespace N
44 {
45   int i;
46   enum bob {Q};
47 }
48 
49 void
f()50 f ()
51 {
52   using N::i;
53   using N::i;       // { dg-error "redeclaration" }
54 }
55