// { dg-do assemble } // { dg-options "" } // Origin: Mark Mitchell <mark@codesourcery.com> template <class T> struct S1 { typedef T X; }; template <class T> struct B { typedef T I; }; template <class T> struct S2 : public B<T> { struct I {}; typedef typename S1<I>::X IX; void f(IX); }; template <class T> void S2<T>::f(IX) {}