xref: /aosp_15_r20/external/clang/test/Modules/Inputs/templates-top.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li template<typename T> class Vector;
2*67e74705SXin Li 
3*67e74705SXin Li template<typename T> class List {
4*67e74705SXin Li public:
5*67e74705SXin Li   void push_back(T);
6*67e74705SXin Li 
7*67e74705SXin Li   struct node {};
8*67e74705SXin Li   node *head;
9*67e74705SXin Li   unsigned size;
10*67e74705SXin Li };
11*67e74705SXin Li 
12*67e74705SXin Li extern List<double> *instantiateListDoubleDeclaration;
13*67e74705SXin Li extern List<long> *instantiateListLongDeclaration;
14*67e74705SXin Li 
15*67e74705SXin Li namespace A {
16*67e74705SXin Li   class Y {
17*67e74705SXin Li     template <typename T> friend class WhereAmI;
18*67e74705SXin Li   };
19*67e74705SXin Li }
20*67e74705SXin Li 
21*67e74705SXin Li template <typename T> class A::WhereAmI {
22*67e74705SXin Li public:
func()23*67e74705SXin Li   static void func() {}
24*67e74705SXin Li };
25*67e74705SXin Li 
26*67e74705SXin Li template<typename T> struct Outer {
27*67e74705SXin Li   struct Inner {};
28*67e74705SXin Li };
29*67e74705SXin Li 
30*67e74705SXin Li template<bool, bool> struct ExplicitInstantiation {
fExplicitInstantiation31*67e74705SXin Li   void f() {}
32*67e74705SXin Li };
33*67e74705SXin Li 
34*67e74705SXin Li template<typename> struct DelayUpdates {};
35*67e74705SXin Li 
36*67e74705SXin Li template<typename T> struct OutOfLineInline {
37*67e74705SXin Li   void f();
38*67e74705SXin Li   void g();
39*67e74705SXin Li   void h();
40*67e74705SXin Li };
f()41*67e74705SXin Li template<typename T> inline void OutOfLineInline<T>::f() {}
g()42*67e74705SXin Li template<typename T> inline void OutOfLineInline<T>::g() {}
h()43*67e74705SXin Li template<typename T> inline void OutOfLineInline<T>::h() {}
44*67e74705SXin Li 
45*67e74705SXin Li namespace EmitDefaultedSpecialMembers {
46*67e74705SXin Li   template<typename T> struct SmallVectorImpl {
SmallVectorImplSmallVectorImpl47*67e74705SXin Li     SmallVectorImpl() {}
~SmallVectorImplSmallVectorImpl48*67e74705SXin Li     ~SmallVectorImpl() {} // non-trivial dtor
49*67e74705SXin Li   };
50*67e74705SXin Li   template<typename T, unsigned N> struct SmallVector : SmallVectorImpl<T> {
51*67e74705SXin Li     // trivial dtor
52*67e74705SXin Li   };
53*67e74705SXin Li   template<unsigned N> struct SmallString : SmallVector<char, N> {
54*67e74705SXin Li     // trivial dtor
55*67e74705SXin Li   };
56*67e74705SXin Li }
57*67e74705SXin Li 
58*67e74705SXin Li template<typename T> struct WithUndefinedStaticDataMember {
59*67e74705SXin Li   static T undefined;
60*67e74705SXin Li };
61