// { dg-do compile } template struct A { typedef T type; }; template struct B { class type { type(); // { dg-error "private" } }; }; template struct C : A, B { using typename B::type; void f() { type j; // { dg-error "context" } } }; template class C; // { dg-message "required" } template struct D { typedef T type; }; template class E : D { using typename D::type; // { dg-message "previous" } using typename D::type; // { dg-error "redeclaration" } };