1 BEGIN 2 template<typename T = int> struct A {}; 3 template<typename T> struct B {}; 4 template<typename T> struct C; 5 template<typename T> struct D; 6 template<typename T> struct E; 7 template<typename T = int> struct G; 8 template<typename T = int> struct H; 9 template<typename T> struct J {}; 10 template<typename T = int> struct J; 11 struct K : J<> {}; 12 template<typename T = void> struct L; 13 struct FriendL { 14 template<typename T> friend struct L; 15 }; 16 END 17 18 namespace DeferredLookup { 19 template<typename T, typename U = T> using X = U; f()20 template<typename T> void f() { (void) X<T>(); } 21 template<typename T> int n = X<T>(); 22 template<typename T> struct S { X<T> xt; enum E : int; }; 23 template<typename T> enum S<T>::E : int { a = X<T>() }; 24 25 namespace Indirect { 26 template<typename, bool = true> struct A {}; 27 template<typename> struct B { template<typename T> using C = A<T>; }; 28 } 29 } 30