14440d6eaSRichard Smith BEGIN 287bb5698SRichard Smith template<typename T = int> struct A {}; 387bb5698SRichard Smith template<typename T> struct B {}; 487bb5698SRichard Smith template<typename T> struct C; 587bb5698SRichard Smith template<typename T> struct D; 6e7bd6defSRichard Smith template<typename T> struct E; 795d83959SRichard Smith template<typename T = int> struct G; 895d83959SRichard Smith template<typename T = int> struct H; 96dc8ae10SRichard Smith template<typename T> struct J {}; 106dc8ae10SRichard Smith template<typename T = int> struct J; 116dc8ae10SRichard Smith struct K : J<> {}; 12535ff803SRichard Smith template<typename T = void> struct L; 13535ff803SRichard Smith struct FriendL { 14535ff803SRichard Smith template<typename T> friend struct L; 15535ff803SRichard Smith }; 164440d6eaSRichard Smith END 17*2195ec9aSRichard Smith 18*2195ec9aSRichard Smith namespace DeferredLookup { 19*2195ec9aSRichard Smith template<typename T, typename U = T> using X = U; f()20*2195ec9aSRichard Smith template<typename T> void f() { (void) X<T>(); } 21*2195ec9aSRichard Smith template<typename T> int n = X<T>(); 22*2195ec9aSRichard Smith template<typename T> struct S { X<T> xt; enum E : int; }; 23*2195ec9aSRichard Smith template<typename T> enum S<T>::E : int { a = X<T>() }; 24*2195ec9aSRichard Smith 25*2195ec9aSRichard Smith namespace Indirect { 26*2195ec9aSRichard Smith template<typename, bool = true> struct A {}; 27*2195ec9aSRichard Smith template<typename> struct B { template<typename T> using C = A<T>; }; 28*2195ec9aSRichard Smith } 29*2195ec9aSRichard Smith } 30