This doesn't compile without a warning on 3.3 (and 3.2.3 FWIW): -------------------------------- template <typename T> struct X { struct Y { struct Z {}; }; friend struct Y::Z; }; -------------------------------- g/x> /home/bangerth/bin/gcc-3.3-pre/bin/c++ -c x.cc x.cc:6: warning: `X<T>::Y::Z' is implicitly a typename x.cc:6: warning: implicit typename is deprecated, please see the documentation for details That's bogus, of course. It's particularly bad, since this warning cannot be switched off and thus makes use of -Werror unusable on some code :-( Since it compiled just fine without problems prior to the implicit typename deprecation, I rate this as a regression. It works just fine on mainline. Kriang, would you mind taking a look? W. PS: Yes, I know the friend declaration isn't necessary. It's just, some other compilers don't :-((
Fixed in 3.3 branch.