1 template <typename T> struct A
2 {
3    typedef int X;
4 };
5 
6 template <typename T> struct B
7 {
8    typename A<T>::X x;
9 };
10 
11 template <typename T> struct C
12 {
13    void foo(int);
14    B<A<T>*> b;
15 };
16 
17 template <typename T> struct D
18 {
19    enum { e };
barD20    void bar() { C<T*>::foo(e); }
21 };
22