// PR c++/71738 template < class > struct S { template < class > struct A { template < class > struct B { template void operator=(Z) { S::i = 0; } }; }; // Note that this friend declaration is useless, since nested classes are // already friends of their enclosing class. template < class X > template < class Y > template < class Z > friend void A < X >::B < Y >::operator= (Z); private: static int i; }; int main() { S::A::B b; b = 0; }