// 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> >());
}
