xref: /llvm-project/clang/test/Modules/Inputs/template-default-args/a.h (revision 2195ec9ad4ba7dc363762e3aaf7af93085cb30e1)
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