// { dg-do assemble } template struct S { template friend X f(X, Y, Z); }; template X f(X x, Y, Z) { return x; } template char f(char, long, short); template char* f(char*, long*, short*); template class S; template class S; template double* f(double*, long*, short*);