template class C; template struct S { template void f(V v) { C cv; cv.i = 3; } }; template class C { template template friend void S::f(V); int i; }; int main() { S si; si.f(3.0); S sl; sl.f('c'); }