1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// { dg-do assemble } template <class T, class U> struct S { template <class X, class Y, class Z> friend X f(X, Y, Z); }; template <class X, class Y, class Z> X f(X x, Y, Z) { return x; } template char f(char, long, short); template char* f(char*, long*, short*); template class S<int, double>; template class S<void*, double>; template double* f(double*, long*, short*);