struct aaa {}; template <typename T> struct abc : T::type {}; template <typename U> struct xyz : abc< xyz<U> > { typedef aaa type; }; int main() { xyz<int> a; return 0; }