30 lines · c
1BEGIN2template<typename T = int> struct A {};3template<typename T> struct B {};4template<typename T> struct C;5template<typename T> struct D;6template<typename T> struct E;7template<typename T = int> struct G;8template<typename T = int> struct H;9template<typename T> struct J {};10template<typename T = int> struct J;11struct K : J<> {};12template<typename T = void> struct L;13struct FriendL {14 template<typename T> friend struct L;15};16END17 18namespace DeferredLookup {19 template<typename T, typename U = T> using X = U;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