BEGIN template<typename T = int> struct A {}; template<typename T> struct B {}; template<typename T> struct C; template<typename T> struct D; template<typename T> struct E; template<typename T = int> struct G; template<typename T = int> struct H; template<typename T> struct J {}; template<typename T = int> struct J; struct K : J<> {}; template<typename T = void> struct L; struct FriendL { template<typename T> friend struct L; }; END namespace DeferredLookup { template<typename T, typename U = T> using X = U; template<typename T> void f() { (void) X<T>(); } template<typename T> int n = X<T>(); template<typename T> struct S { X<T> xt; enum E : int; }; template<typename T> enum S<T>::E : int { a = X<T>() }; namespace Indirect { template<typename, bool = true> struct A {}; template<typename> struct B { template<typename T> using C = A<T>; }; } } |