// PR c++/20420 class B { protected: enum E { E1, E2, E3 }; struct S { int i; E e; }; }; class D : private B { public: using B::E; // { dg-message "previous" } using B::S; // { dg-message "previous" } private: enum E {}; // { dg-error "conflicts" } struct S {}; // { dg-error "conflicts" } }; template class BT { protected: enum E { E1, E2, E3 }; struct S { int i; E e; }; }; template class DT : private BT { public: using BT::E; // { dg-message "previous" } using BT::S; // { dg-message "previous" } private: enum E {}; // { dg-error "conflicts" } struct S {}; // { dg-error "conflicts" } }; template class DT; namespace N { int i; } void f () { using N::i; using N::i; // { dg-error "declared" } }