]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ASTMerge/class-template-partial-spec/Inputs/class-template-partial-spec2.cpp
Vendor import of clang trunk r300422:
[FreeBSD/FreeBSD.git] / test / ASTMerge / class-template-partial-spec / Inputs / class-template-partial-spec2.cpp
1 template<typename T, typename P>
2 struct TwoOptionTemplate {};
3
4 template<typename T>
5 struct TwoOptionTemplate<T, char> {
6   int member;
7 };
8
9
10 template<typename T>
11 struct TwoOptionTemplate<T, double> {
12   float member;
13 };
14
15 template<typename T>
16 struct TwoOptionTemplate<T, T> {
17   T** member;
18 };
19
20 TwoOptionTemplate<int, char> X0;
21 TwoOptionTemplate<int, double> X1;
22 TwoOptionTemplate<void *, wchar_t> X2;
23 TwoOptionTemplate<long, long> X3;
24 TwoOptionTemplate<int, int> X4;
25 TwoOptionTemplate<long, long> SingleDest;
26 TwoOptionTemplate<int, double> SecondDoubleDest;
27
28
29 template<int I, class C>
30 struct IntTemplateSpec {};
31
32 template<class C>
33 struct IntTemplateSpec<4, C> {
34   C member;
35 };
36
37 template<int I>
38 struct IntTemplateSpec<I, void *> {
39   double member;
40   static constexpr int val = I;
41 };
42
43 template<int I>
44 struct IntTemplateSpec<I, double> {
45   char member;
46   static constexpr int val = I;
47 };
48
49 IntTemplateSpec<4, wchar_t>Y0;
50 IntTemplateSpec<5, void *> Y1;
51 IntTemplateSpec<1, int> Y2;
52 IntTemplateSpec<2, int> Y3;
53 IntTemplateSpec<43, double> NumberDest;
54
55 namespace One {
56 namespace Two {
57 namespace Three {
58
59 template<class T>
60 class Parent {};
61
62 } // namespace Three
63
64 } // namespace Two
65
66 template<typename T, typename X>
67 struct Child1: public Two::Three::Parent<unsigned> {
68   char member;
69 };
70
71 template<class T>
72 struct Child1<T, One::Two::Three::Parent<T>> {
73   T member;
74 };
75
76 } // namespace One
77
78 namespace Dst { One::Child1<double, One::Two::Three::Parent<double>> Z0Dst; }
79 One::Child1<int, float> Z1;