http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52126
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-02-07 17:23:40 UTC --- (In reply to comment #2) > Further investigation shows that the issue appears only when inheritance from > the template class (class B : private A<T>) is provided explicitly. According > to the standard a nested class defined inside a class template is implicitly > template as well. I don't think that's relevant. The point is that the injected-class-name 'A' and 'A<T>' both refer to the class template, and should work equivalently. It can be reduced to: template<typename T> struct A { int foo; struct B : A<T> { using A::foo; }; };