// { dg-do assemble } // Origin: Mark Mitchell <mark@codesourcery.com> template <int T> struct S { struct X {}; struct Y {}; template <int U> friend struct S<U>::X; template <int U> friend typename S<U>::Y; // { dg-error "" } typename as friend }; struct T { template <int T> friend struct S<T>::X; }; struct U { template <int T> friend typename S<T>::X; // { dg-error "" } typename as friend };