// Build don't link: template<class T> struct A { typedef T T1; }; template<class T> struct B { typedef T T2; }; template<class T> struct C { }; template<class E> C<typename E::T2::T1> foo (E) { return C<typename E::T2::T1>(); } void test() { foo(B<A<int> >()); }