1// { dg-do assemble  }
2
3template <class T>
4bool f(T);
5
6template <class T>
7struct S1 {
8  typedef T X;
9  friend bool f<>(const S1&);
10};
11
12template <class T>
13struct S2 {
14};
15
16template <class T>
17struct S2<S1<T> > {
18  typedef typename S1<T>::X Y;
19};
20
21template <class T>
22typename S2<S1<T> >::Y
23f(const S1<T>&);
24
25template struct S1<int>;
26