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