This test from [temp.local] should now compile: template<class T> struct A { struct B { /* ... */ }; typedef void C; void f(); template<class U> void g(U); }; template<class B> void A<B>::f() { B b; // A's B, not the template parameter } template<class B> template<class C> void A<B>::g(C) { B b; // A's B, not the template parameter C c; // the template parameter C, not A's C } but it seems we choose A::C.
This is a dup of bug 87841 *** This bug has been marked as a duplicate of bug 87841 ***