16 #ifndef INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_ 17 #define INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_ 22 #ifdef NLIB_CXX11_VARIADIC_TEMPLATES 24 template <
class HEAD,
class... TAIL>
27 typedef Types<TAIL...> Tail;
28 typedef Types<HEAD, TAIL...> type;
34 typedef Types<HEAD> type;
38 typedef Types<Tp0> type;
48 template <
class T1,
class T2>
53 template <
class T1,
class T2,
class T3>
56 typedef Tp2<T2, T3> Tail;
58 template <
class T1,
class T2,
class T3,
class T4>
61 typedef Tp3<T2, T3, T4> Tail;
63 template <
class T1,
class T2,
class T3,
class T4,
class T5>
66 typedef Tp4<T2, T3, T4, T5> Tail;
68 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
71 typedef Tp5<T2, T3, T4, T5, T6> Tail;
73 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
76 typedef Tp6<T2, T3, T4, T5, T6, T7> Tail;
78 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
81 typedef Tp7<T2, T3, T4, T5, T6, T7, T8> Tail;
83 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
86 typedef Tp8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
88 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
92 typedef Tp9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
94 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
99 typedef Tp10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
101 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
102 class T10,
class T11,
class T12>
105 typedef Tp11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
107 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
108 class T10,
class T11,
class T12,
class T13>
111 typedef Tp12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
113 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
114 class T10,
class T11,
class T12,
class T13,
class T14>
117 typedef Tp13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
119 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
120 class T10,
class T11,
class T12,
class T13,
class T14,
class T15>
123 typedef Tp14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> Tail;
126 template <
class T1 = None,
class T2 = None,
class T3 = None,
class T4 = None,
class T5 = None,
127 class T6 = None,
class T7 = None,
class T8 = None,
class T9 = None,
class T10 = None,
128 class T11 = None,
class T12 = None,
class T13 = None,
class T14 = None,
class T15 = None>
130 typedef Tp15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> type;
134 struct Types<None, None, None, None, None, None, None, None, None, None, None, None, None, None,
139 struct Types<T1, None, None, None, None, None, None, None, None, None, None, None, None, None,
141 typedef Tp1<T1> type;
143 template <
class T1,
class T2>
144 struct Types<T1, T2, None, None, None, None, None, None, None, None, None, None, None, None,
146 typedef Tp2<T1, T2> type;
148 template <
class T1,
class T2,
class T3>
149 struct Types<T1, T2, T3, None, None, None, None, None, None, None, None, None, None, None, None> {
150 typedef Tp3<T1, T2, T3> type;
152 template <
class T1,
class T2,
class T3,
class T4>
153 struct Types<T1, T2, T3, T4, None, None, None, None, None, None, None, None, None, None, None> {
154 typedef Tp4<T1, T2, T3, T4> type;
156 template <
class T1,
class T2,
class T3,
class T4,
class T5>
157 struct Types<T1, T2, T3, T4, T5, None, None, None, None, None, None, None, None, None, None> {
158 typedef Tp5<T1, T2, T3, T4, T5> type;
160 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
161 struct Types<T1, T2, T3, T4, T5, T6, None, None, None, None, None, None, None, None, None> {
162 typedef Tp6<T1, T2, T3, T4, T5, T6> type;
164 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
165 struct Types<T1, T2, T3, T4, T5, T6, T7, None, None, None, None, None, None, None, None> {
166 typedef Tp7<T1, T2, T3, T4, T5, T6, T7> type;
168 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
169 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, None, None, None, None, None, None, None> {
170 typedef Tp8<T1, T2, T3, T4, T5, T6, T7, T8> type;
172 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
173 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, None, None, None, None, None, None> {
174 typedef Tp9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
176 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
178 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, None, None, None, None, None> {
179 typedef Tp10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
181 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
182 class T10,
class T11>
183 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, None, None, None, None> {
184 typedef Tp11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
186 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
187 class T10,
class T11,
class T12>
188 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, None, None, None> {
189 typedef Tp12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
191 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
192 class T10,
class T11,
class T12,
class T13>
193 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, None, None> {
194 typedef Tp13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> type;
196 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
197 class T10,
class T11,
class T12,
class T13,
class T14>
198 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, None> {
199 typedef Tp14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> type;
206 #endif // INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_