// { dg-do assemble } // Origin: Jakub Jelinek <jakub@redhat.com> template<class T> struct foo { foo(); void c(); static void d(foo* x) { x->c(); } }; template<class T> struct bar { bar(); }; template <class T> struct baz { typedef foo<T> t; t *e; baz(); ~baz() { t::d(e); } }; template <class T> void foo<T>::c() { bar<T>* x = (bar<T>*)this; x->bar<T>::~bar(); } void a(void) { baz<char> b; }