// { dg-do assemble } template <class T> class C; template <class T> struct S { template <class U> void f(U u) { C<U> cu; cu.i = 3; // { dg-error "" } S<double>::f<U> is a friend, but this is // S<int>::f<double>. } }; template <class T> class C { template <class U> friend void S<T>::f(U); int i; // { dg-error "" } private }; int main() { S<int> si; si.f(3.0); }