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