template class C; template struct S { template void f(U u) { C cu; cu.i = 3; // ERROR - S::f is a friend, but this is // S::f. } }; template class C { template friend void S::f(U); int i; // ERROR - private }; int main() { S si; si.f(3.0); }