class A {}; template struct B { typedef A E; }; template struct C { typedef B D; typedef typename D::E E; void f() throw(E); };