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()50f () 51 { 52 using N::i; 53 using N::i; // { dg-error "redeclaration" } 54 } 55