// { dg-do assemble } template bool f(T); template struct S1 { typedef T X; friend bool f<>(const S1&); }; template struct S2 { }; template struct S2 > { typedef typename S1::X Y; }; template typename S2 >::Y f(const S1&); template struct S1;