Faiss

- Main Page
- Namespaces
- Classes
- Files

- File List

All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
gtest-type-util.h
1 // This file was GENERATED by command:
2 // pump.py gtest-type-util.h.pump
3 // DO NOT EDIT BY HAND!!!
4
5 // Copyright 2008 Google Inc.
6 // All Rights Reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
10 // met:
11 //
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
17 // distribution.
18 // * Neither the name of Google Inc. nor the names of its
19 // contributors may be used to endorse or promote products derived from
20 // this software without specific prior written permission.
21 //
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 //
34 // Author: wan@google.com (Zhanyong Wan)
35
36 // Type utilities needed for implementing typed and type-parameterized
37 // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
38 //
39 // Currently we support at most 50 types in a list, and at most 50
40 // type-parameterized tests in one type-parameterized test case.
41 // Please contact googletestframework@googlegroups.com if you need
42 // more.
43
44 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
45 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
46
47 #include "gtest/internal/gtest-port.h"
48
49 // #ifdef __GNUC__ is too general here. It is possible to use gcc without using
50 // libstdc++ (which is where cxxabi.h comes from).
51 # if GTEST_HAS_CXXABI_H_
52 # include <cxxabi.h>
53 # elif defined(__HP_aCC)
54 # include <acxx_demangle.h>
55 # endif // GTEST_HASH_CXXABI_H_
56
57 namespace testing {
58 namespace internal {
59
60 // GetTypeName<T>() returns a human-readable name of type T.
61 // NB: This function is also used in Google Mock, so don't move it inside of
62 // the typed-test-only section below.
63 template <typename T>
64 std::string GetTypeName() {
65 # if GTEST_HAS_RTTI
66
67 const char* const name = typeid(T).name();
68 # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
69 int status = 0;
70 // gcc's implementation of typeid(T).name() mangles the type name,
71 // so we have to demangle it.
72 # if GTEST_HAS_CXXABI_H_
73 using abi::__cxa_demangle;
74 # endif // GTEST_HAS_CXXABI_H_
75 char* const readable_name = __cxa_demangle(name, 0, 0, &status);
76 const std::string name_str(status == 0 ? readable_name : name);
77 free(readable_name);
78 return name_str;
79 # else
80 return name;
81 # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
82
83 # else
84
85 return "<type>";
86
87 # endif // GTEST_HAS_RTTI
88 }
89
90 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
91
92 // AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
93 // type. This can be used as a compile-time assertion to ensure that
94 // two types are equal.
95
96 template <typename T1, typename T2>
97 struct AssertTypeEq;
98
99 template <typename T>
100 struct AssertTypeEq<T, T> {
101 typedef bool type;
102 };
103
104 // A unique type used as the default value for the arguments of class
105 // template Types. This allows us to simulate variadic templates
106 // (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
107 // support directly.
108 struct None {};
109
110 // The following family of struct and struct templates are used to
111 // represent type lists. In particular, TypesN<T1, T2, ..., TN>
112 // represents a type list with N types (T1, T2, ..., and TN) in it.
113 // Except for Types0, every struct in the family has two member types:
114 // Head for the first type in the list, and Tail for the rest of the
115 // list.
116
117 // The empty type list.
118 struct Types0 {};
119
120 // Type lists of length 1, 2, 3, and so on.
121
122 template <typename T1>
123 struct Types1 {
124 typedef T1 Head;
125 typedef Types0 Tail;
126 };
127 template <typename T1, typename T2>
128 struct Types2 {
129 typedef T1 Head;
130 typedef Types1<T2> Tail;
131 };
132
133 template <typename T1, typename T2, typename T3>
134 struct Types3 {
135 typedef T1 Head;
136 typedef Types2<T2, T3> Tail;
137 };
138
139 template <typename T1, typename T2, typename T3, typename T4>
140 struct Types4 {
141 typedef T1 Head;
142 typedef Types3<T2, T3, T4> Tail;
143 };
144
145 template <typename T1, typename T2, typename T3, typename T4, typename T5>
146 struct Types5 {
147 typedef T1 Head;
148 typedef Types4<T2, T3, T4, T5> Tail;
149 };
150
151 template <typename T1, typename T2, typename T3, typename T4, typename T5,
152 typename T6>
153 struct Types6 {
154 typedef T1 Head;
155 typedef Types5<T2, T3, T4, T5, T6> Tail;
156 };
157
158 template <typename T1, typename T2, typename T3, typename T4, typename T5,
159 typename T6, typename T7>
160 struct Types7 {
161 typedef T1 Head;
162 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
163 };
164
165 template <typename T1, typename T2, typename T3, typename T4, typename T5,
166 typename T6, typename T7, typename T8>
167 struct Types8 {
168 typedef T1 Head;
169 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
170 };
171
172 template <typename T1, typename T2, typename T3, typename T4, typename T5,
173 typename T6, typename T7, typename T8, typename T9>
174 struct Types9 {
175 typedef T1 Head;
176 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
177 };
178
179 template <typename T1, typename T2, typename T3, typename T4, typename T5,
180 typename T6, typename T7, typename T8, typename T9, typename T10>
181 struct Types10 {
182 typedef T1 Head;
183 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
184 };
185
186 template <typename T1, typename T2, typename T3, typename T4, typename T5,
187 typename T6, typename T7, typename T8, typename T9, typename T10,
188 typename T11>
189 struct Types11 {
190 typedef T1 Head;
191 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
192 };
193
194 template <typename T1, typename T2, typename T3, typename T4, typename T5,
195 typename T6, typename T7, typename T8, typename T9, typename T10,
196 typename T11, typename T12>
197 struct Types12 {
198 typedef T1 Head;
199 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
200 };
201
202 template <typename T1, typename T2, typename T3, typename T4, typename T5,
203 typename T6, typename T7, typename T8, typename T9, typename T10,
204 typename T11, typename T12, typename T13>
205 struct Types13 {
206 typedef T1 Head;
207 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
208 };
209
210 template <typename T1, typename T2, typename T3, typename T4, typename T5,
211 typename T6, typename T7, typename T8, typename T9, typename T10,
212 typename T11, typename T12, typename T13, typename T14>
213 struct Types14 {
214 typedef T1 Head;
215 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
216 };
217
218 template <typename T1, typename T2, typename T3, typename T4, typename T5,
219 typename T6, typename T7, typename T8, typename T9, typename T10,
220 typename T11, typename T12, typename T13, typename T14, typename T15>
221 struct Types15 {
222 typedef T1 Head;
223 typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
224 T15> Tail;
225 };
226
227 template <typename T1, typename T2, typename T3, typename T4, typename T5,
228 typename T6, typename T7, typename T8, typename T9, typename T10,
229 typename T11, typename T12, typename T13, typename T14, typename T15,
230 typename T16>
231 struct Types16 {
232 typedef T1 Head;
233 typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
234 T16> Tail;
235 };
236
237 template <typename T1, typename T2, typename T3, typename T4, typename T5,
238 typename T6, typename T7, typename T8, typename T9, typename T10,
239 typename T11, typename T12, typename T13, typename T14, typename T15,
240 typename T16, typename T17>
241 struct Types17 {
242 typedef T1 Head;
243 typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
244 T16, T17> Tail;
245 };
246
247 template <typename T1, typename T2, typename T3, typename T4, typename T5,
248 typename T6, typename T7, typename T8, typename T9, typename T10,
249 typename T11, typename T12, typename T13, typename T14, typename T15,
250 typename T16, typename T17, typename T18>
251 struct Types18 {
252 typedef T1 Head;
253 typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
254 T16, T17, T18> Tail;
255 };
256
257 template <typename T1, typename T2, typename T3, typename T4, typename T5,
258 typename T6, typename T7, typename T8, typename T9, typename T10,
259 typename T11, typename T12, typename T13, typename T14, typename T15,
260 typename T16, typename T17, typename T18, typename T19>
261 struct Types19 {
262 typedef T1 Head;
263 typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
264 T16, T17, T18, T19> Tail;
265 };
266
267 template <typename T1, typename T2, typename T3, typename T4, typename T5,
268 typename T6, typename T7, typename T8, typename T9, typename T10,
269 typename T11, typename T12, typename T13, typename T14, typename T15,
270 typename T16, typename T17, typename T18, typename T19, typename T20>
271 struct Types20 {
272 typedef T1 Head;
273 typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
274 T16, T17, T18, T19, T20> Tail;
275 };
276
277 template <typename T1, typename T2, typename T3, typename T4, typename T5,
278 typename T6, typename T7, typename T8, typename T9, typename T10,
279 typename T11, typename T12, typename T13, typename T14, typename T15,
280 typename T16, typename T17, typename T18, typename T19, typename T20,
281 typename T21>
282 struct Types21 {
283 typedef T1 Head;
284 typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
285 T16, T17, T18, T19, T20, T21> Tail;
286 };
287
288 template <typename T1, typename T2, typename T3, typename T4, typename T5,
289 typename T6, typename T7, typename T8, typename T9, typename T10,
290 typename T11, typename T12, typename T13, typename T14, typename T15,
291 typename T16, typename T17, typename T18, typename T19, typename T20,
292 typename T21, typename T22>
293 struct Types22 {
294 typedef T1 Head;
295 typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
296 T16, T17, T18, T19, T20, T21, T22> Tail;
297 };
298
299 template <typename T1, typename T2, typename T3, typename T4, typename T5,
300 typename T6, typename T7, typename T8, typename T9, typename T10,
301 typename T11, typename T12, typename T13, typename T14, typename T15,
302 typename T16, typename T17, typename T18, typename T19, typename T20,
303 typename T21, typename T22, typename T23>
304 struct Types23 {
305 typedef T1 Head;
306 typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
307 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
308 };
309
310 template <typename T1, typename T2, typename T3, typename T4, typename T5,
311 typename T6, typename T7, typename T8, typename T9, typename T10,
312 typename T11, typename T12, typename T13, typename T14, typename T15,
313 typename T16, typename T17, typename T18, typename T19, typename T20,
314 typename T21, typename T22, typename T23, typename T24>
315 struct Types24 {
316 typedef T1 Head;
317 typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
318 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
319 };
320
321 template <typename T1, typename T2, typename T3, typename T4, typename T5,
322 typename T6, typename T7, typename T8, typename T9, typename T10,
323 typename T11, typename T12, typename T13, typename T14, typename T15,
324 typename T16, typename T17, typename T18, typename T19, typename T20,
325 typename T21, typename T22, typename T23, typename T24, typename T25>
326 struct Types25 {
327 typedef T1 Head;
328 typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
329 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
330 };
331
332 template <typename T1, typename T2, typename T3, typename T4, typename T5,
333 typename T6, typename T7, typename T8, typename T9, typename T10,
334 typename T11, typename T12, typename T13, typename T14, typename T15,
335 typename T16, typename T17, typename T18, typename T19, typename T20,
336 typename T21, typename T22, typename T23, typename T24, typename T25,
337 typename T26>
338 struct Types26 {
339 typedef T1 Head;
340 typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
341 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
342 };
343
344 template <typename T1, typename T2, typename T3, typename T4, typename T5,
345 typename T6, typename T7, typename T8, typename T9, typename T10,
346 typename T11, typename T12, typename T13, typename T14, typename T15,
347 typename T16, typename T17, typename T18, typename T19, typename T20,
348 typename T21, typename T22, typename T23, typename T24, typename T25,
349 typename T26, typename T27>
350 struct Types27 {
351 typedef T1 Head;
352 typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
353 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
354 };
355
356 template <typename T1, typename T2, typename T3, typename T4, typename T5,
357 typename T6, typename T7, typename T8, typename T9, typename T10,
358 typename T11, typename T12, typename T13, typename T14, typename T15,
359 typename T16, typename T17, typename T18, typename T19, typename T20,
360 typename T21, typename T22, typename T23, typename T24, typename T25,
361 typename T26, typename T27, typename T28>
362 struct Types28 {
363 typedef T1 Head;
364 typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
365 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
366 };
367
368 template <typename T1, typename T2, typename T3, typename T4, typename T5,
369 typename T6, typename T7, typename T8, typename T9, typename T10,
370 typename T11, typename T12, typename T13, typename T14, typename T15,
371 typename T16, typename T17, typename T18, typename T19, typename T20,
372 typename T21, typename T22, typename T23, typename T24, typename T25,
373 typename T26, typename T27, typename T28, typename T29>
374 struct Types29 {
375 typedef T1 Head;
376 typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
377 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
378 T29> Tail;
379 };
380
381 template <typename T1, typename T2, typename T3, typename T4, typename T5,
382 typename T6, typename T7, typename T8, typename T9, typename T10,
383 typename T11, typename T12, typename T13, typename T14, typename T15,
384 typename T16, typename T17, typename T18, typename T19, typename T20,
385 typename T21, typename T22, typename T23, typename T24, typename T25,
386 typename T26, typename T27, typename T28, typename T29, typename T30>
387 struct Types30 {
388 typedef T1 Head;
389 typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
390 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
391 T30> Tail;
392 };
393
394 template <typename T1, typename T2, typename T3, typename T4, typename T5,
395 typename T6, typename T7, typename T8, typename T9, typename T10,
396 typename T11, typename T12, typename T13, typename T14, typename T15,
397 typename T16, typename T17, typename T18, typename T19, typename T20,
398 typename T21, typename T22, typename T23, typename T24, typename T25,
399 typename T26, typename T27, typename T28, typename T29, typename T30,
400 typename T31>
401 struct Types31 {
402 typedef T1 Head;
403 typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
404 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
405 T30, T31> Tail;
406 };
407
408 template <typename T1, typename T2, typename T3, typename T4, typename T5,
409 typename T6, typename T7, typename T8, typename T9, typename T10,
410 typename T11, typename T12, typename T13, typename T14, typename T15,
411 typename T16, typename T17, typename T18, typename T19, typename T20,
412 typename T21, typename T22, typename T23, typename T24, typename T25,
413 typename T26, typename T27, typename T28, typename T29, typename T30,
414 typename T31, typename T32>
415 struct Types32 {
416 typedef T1 Head;
417 typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
418 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
419 T30, T31, T32> Tail;
420 };
421
422 template <typename T1, typename T2, typename T3, typename T4, typename T5,
423 typename T6, typename T7, typename T8, typename T9, typename T10,
424 typename T11, typename T12, typename T13, typename T14, typename T15,
425 typename T16, typename T17, typename T18, typename T19, typename T20,
426 typename T21, typename T22, typename T23, typename T24, typename T25,
427 typename T26, typename T27, typename T28, typename T29, typename T30,
428 typename T31, typename T32, typename T33>
429 struct Types33 {
430 typedef T1 Head;
431 typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
432 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
433 T30, T31, T32, T33> Tail;
434 };
435
436 template <typename T1, typename T2, typename T3, typename T4, typename T5,
437 typename T6, typename T7, typename T8, typename T9, typename T10,
438 typename T11, typename T12, typename T13, typename T14, typename T15,
439 typename T16, typename T17, typename T18, typename T19, typename T20,
440 typename T21, typename T22, typename T23, typename T24, typename T25,
441 typename T26, typename T27, typename T28, typename T29, typename T30,
442 typename T31, typename T32, typename T33, typename T34>
443 struct Types34 {
444 typedef T1 Head;
445 typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
446 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
447 T30, T31, T32, T33, T34> Tail;
448 };
449
450 template <typename T1, typename T2, typename T3, typename T4, typename T5,
451 typename T6, typename T7, typename T8, typename T9, typename T10,
452 typename T11, typename T12, typename T13, typename T14, typename T15,
453 typename T16, typename T17, typename T18, typename T19, typename T20,
454 typename T21, typename T22, typename T23, typename T24, typename T25,
455 typename T26, typename T27, typename T28, typename T29, typename T30,
456 typename T31, typename T32, typename T33, typename T34, typename T35>
457 struct Types35 {
458 typedef T1 Head;
459 typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
460 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
461 T30, T31, T32, T33, T34, T35> Tail;
462 };
463
464 template <typename T1, typename T2, typename T3, typename T4, typename T5,
465 typename T6, typename T7, typename T8, typename T9, typename T10,
466 typename T11, typename T12, typename T13, typename T14, typename T15,
467 typename T16, typename T17, typename T18, typename T19, typename T20,
468 typename T21, typename T22, typename T23, typename T24, typename T25,
469 typename T26, typename T27, typename T28, typename T29, typename T30,
470 typename T31, typename T32, typename T33, typename T34, typename T35,
471 typename T36>
472 struct Types36 {
473 typedef T1 Head;
474 typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
475 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
476 T30, T31, T32, T33, T34, T35, T36> Tail;
477 };
478
479 template <typename T1, typename T2, typename T3, typename T4, typename T5,
480 typename T6, typename T7, typename T8, typename T9, typename T10,
481 typename T11, typename T12, typename T13, typename T14, typename T15,
482 typename T16, typename T17, typename T18, typename T19, typename T20,
483 typename T21, typename T22, typename T23, typename T24, typename T25,
484 typename T26, typename T27, typename T28, typename T29, typename T30,
485 typename T31, typename T32, typename T33, typename T34, typename T35,
486 typename T36, typename T37>
487 struct Types37 {
488 typedef T1 Head;
489 typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
490 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
491 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
492 };
493
494 template <typename T1, typename T2, typename T3, typename T4, typename T5,
495 typename T6, typename T7, typename T8, typename T9, typename T10,
496 typename T11, typename T12, typename T13, typename T14, typename T15,
497 typename T16, typename T17, typename T18, typename T19, typename T20,
498 typename T21, typename T22, typename T23, typename T24, typename T25,
499 typename T26, typename T27, typename T28, typename T29, typename T30,
500 typename T31, typename T32, typename T33, typename T34, typename T35,
501 typename T36, typename T37, typename T38>
502 struct Types38 {
503 typedef T1 Head;
504 typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
505 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
506 T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
507 };
508
509 template <typename T1, typename T2, typename T3, typename T4, typename T5,
510 typename T6, typename T7, typename T8, typename T9, typename T10,
511 typename T11, typename T12, typename T13, typename T14, typename T15,
512 typename T16, typename T17, typename T18, typename T19, typename T20,
513 typename T21, typename T22, typename T23, typename T24, typename T25,
514 typename T26, typename T27, typename T28, typename T29, typename T30,
515 typename T31, typename T32, typename T33, typename T34, typename T35,
516 typename T36, typename T37, typename T38, typename T39>
517 struct Types39 {
518 typedef T1 Head;
519 typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
520 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
521 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
522 };
523
524 template <typename T1, typename T2, typename T3, typename T4, typename T5,
525 typename T6, typename T7, typename T8, typename T9, typename T10,
526 typename T11, typename T12, typename T13, typename T14, typename T15,
527 typename T16, typename T17, typename T18, typename T19, typename T20,
528 typename T21, typename T22, typename T23, typename T24, typename T25,
529 typename T26, typename T27, typename T28, typename T29, typename T30,
530 typename T31, typename T32, typename T33, typename T34, typename T35,
531 typename T36, typename T37, typename T38, typename T39, typename T40>
532 struct Types40 {
533 typedef T1 Head;
534 typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
535 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
536 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
537 };
538
539 template <typename T1, typename T2, typename T3, typename T4, typename T5,
540 typename T6, typename T7, typename T8, typename T9, typename T10,
541 typename T11, typename T12, typename T13, typename T14, typename T15,
542 typename T16, typename T17, typename T18, typename T19, typename T20,
543 typename T21, typename T22, typename T23, typename T24, typename T25,
544 typename T26, typename T27, typename T28, typename T29, typename T30,
545 typename T31, typename T32, typename T33, typename T34, typename T35,
546 typename T36, typename T37, typename T38, typename T39, typename T40,
547 typename T41>
548 struct Types41 {
549 typedef T1 Head;
550 typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
551 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
552 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
553 };
554
555 template <typename T1, typename T2, typename T3, typename T4, typename T5,
556 typename T6, typename T7, typename T8, typename T9, typename T10,
557 typename T11, typename T12, typename T13, typename T14, typename T15,
558 typename T16, typename T17, typename T18, typename T19, typename T20,
559 typename T21, typename T22, typename T23, typename T24, typename T25,
560 typename T26, typename T27, typename T28, typename T29, typename T30,
561 typename T31, typename T32, typename T33, typename T34, typename T35,
562 typename T36, typename T37, typename T38, typename T39, typename T40,
563 typename T41, typename T42>
564 struct Types42 {
565 typedef T1 Head;
566 typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
567 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
568 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
569 };
570
571 template <typename T1, typename T2, typename T3, typename T4, typename T5,
572 typename T6, typename T7, typename T8, typename T9, typename T10,
573 typename T11, typename T12, typename T13, typename T14, typename T15,
574 typename T16, typename T17, typename T18, typename T19, typename T20,
575 typename T21, typename T22, typename T23, typename T24, typename T25,
576 typename T26, typename T27, typename T28, typename T29, typename T30,
577 typename T31, typename T32, typename T33, typename T34, typename T35,
578 typename T36, typename T37, typename T38, typename T39, typename T40,
579 typename T41, typename T42, typename T43>
580 struct Types43 {
581 typedef T1 Head;
582 typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
583 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
584 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
585 T43> Tail;
586 };
587
588 template <typename T1, typename T2, typename T3, typename T4, typename T5,
589 typename T6, typename T7, typename T8, typename T9, typename T10,
590 typename T11, typename T12, typename T13, typename T14, typename T15,
591 typename T16, typename T17, typename T18, typename T19, typename T20,
592 typename T21, typename T22, typename T23, typename T24, typename T25,
593 typename T26, typename T27, typename T28, typename T29, typename T30,
594 typename T31, typename T32, typename T33, typename T34, typename T35,
595 typename T36, typename T37, typename T38, typename T39, typename T40,
596 typename T41, typename T42, typename T43, typename T44>
597 struct Types44 {
598 typedef T1 Head;
599 typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
600 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
601 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
602 T44> Tail;
603 };
604
605 template <typename T1, typename T2, typename T3, typename T4, typename T5,
606 typename T6, typename T7, typename T8, typename T9, typename T10,
607 typename T11, typename T12, typename T13, typename T14, typename T15,
608 typename T16, typename T17, typename T18, typename T19, typename T20,
609 typename T21, typename T22, typename T23, typename T24, typename T25,
610 typename T26, typename T27, typename T28, typename T29, typename T30,
611 typename T31, typename T32, typename T33, typename T34, typename T35,
612 typename T36, typename T37, typename T38, typename T39, typename T40,
613 typename T41, typename T42, typename T43, typename T44, typename T45>
614 struct Types45 {
615 typedef T1 Head;
616 typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
617 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
618 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
619 T44, T45> Tail;
620 };
621
622 template <typename T1, typename T2, typename T3, typename T4, typename T5,
623 typename T6, typename T7, typename T8, typename T9, typename T10,
624 typename T11, typename T12, typename T13, typename T14, typename T15,
625 typename T16, typename T17, typename T18, typename T19, typename T20,
626 typename T21, typename T22, typename T23, typename T24, typename T25,
627 typename T26, typename T27, typename T28, typename T29, typename T30,
628 typename T31, typename T32, typename T33, typename T34, typename T35,
629 typename T36, typename T37, typename T38, typename T39, typename T40,
630 typename T41, typename T42, typename T43, typename T44, typename T45,
631 typename T46>
632 struct Types46 {
633 typedef T1 Head;
634 typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
635 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
636 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
637 T44, T45, T46> Tail;
638 };
639
640 template <typename T1, typename T2, typename T3, typename T4, typename T5,
641 typename T6, typename T7, typename T8, typename T9, typename T10,
642 typename T11, typename T12, typename T13, typename T14, typename T15,
643 typename T16, typename T17, typename T18, typename T19, typename T20,
644 typename T21, typename T22, typename T23, typename T24, typename T25,
645 typename T26, typename T27, typename T28, typename T29, typename T30,
646 typename T31, typename T32, typename T33, typename T34, typename T35,
647 typename T36, typename T37, typename T38, typename T39, typename T40,
648 typename T41, typename T42, typename T43, typename T44, typename T45,
649 typename T46, typename T47>
650 struct Types47 {
651 typedef T1 Head;
652 typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
653 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
654 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
655 T44, T45, T46, T47> Tail;
656 };
657
658 template <typename T1, typename T2, typename T3, typename T4, typename T5,
659 typename T6, typename T7, typename T8, typename T9, typename T10,
660 typename T11, typename T12, typename T13, typename T14, typename T15,
661 typename T16, typename T17, typename T18, typename T19, typename T20,
662 typename T21, typename T22, typename T23, typename T24, typename T25,
663 typename T26, typename T27, typename T28, typename T29, typename T30,
664 typename T31, typename T32, typename T33, typename T34, typename T35,
665 typename T36, typename T37, typename T38, typename T39, typename T40,
666 typename T41, typename T42, typename T43, typename T44, typename T45,
667 typename T46, typename T47, typename T48>
668 struct Types48 {
669 typedef T1 Head;
670 typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
671 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
672 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
673 T44, T45, T46, T47, T48> Tail;
674 };
675
676 template <typename T1, typename T2, typename T3, typename T4, typename T5,
677 typename T6, typename T7, typename T8, typename T9, typename T10,
678 typename T11, typename T12, typename T13, typename T14, typename T15,
679 typename T16, typename T17, typename T18, typename T19, typename T20,
680 typename T21, typename T22, typename T23, typename T24, typename T25,
681 typename T26, typename T27, typename T28, typename T29, typename T30,
682 typename T31, typename T32, typename T33, typename T34, typename T35,
683 typename T36, typename T37, typename T38, typename T39, typename T40,
684 typename T41, typename T42, typename T43, typename T44, typename T45,
685 typename T46, typename T47, typename T48, typename T49>
686 struct Types49 {
687 typedef T1 Head;
688 typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
689 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
690 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
691 T44, T45, T46, T47, T48, T49> Tail;
692 };
693
694 template <typename T1, typename T2, typename T3, typename T4, typename T5,
695 typename T6, typename T7, typename T8, typename T9, typename T10,
696 typename T11, typename T12, typename T13, typename T14, typename T15,
697 typename T16, typename T17, typename T18, typename T19, typename T20,
698 typename T21, typename T22, typename T23, typename T24, typename T25,
699 typename T26, typename T27, typename T28, typename T29, typename T30,
700 typename T31, typename T32, typename T33, typename T34, typename T35,
701 typename T36, typename T37, typename T38, typename T39, typename T40,
702 typename T41, typename T42, typename T43, typename T44, typename T45,
703 typename T46, typename T47, typename T48, typename T49, typename T50>
704 struct Types50 {
705 typedef T1 Head;
706 typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
707 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
708 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
709 T44, T45, T46, T47, T48, T49, T50> Tail;
710 };
711
712
713 } // namespace internal
714
715 // We don't want to require the users to write TypesN<...> directly,
716 // as that would require them to count the length. Types<...> is much
717 // easier to write, but generates horrible messages when there is a
718 // compiler error, as gcc insists on printing out each template
719 // argument, even if it has the default value (this means Types<int>
720 // will appear as Types<int, None, None, ..., None> in the compiler
721 // errors).
722 //
723 // Our solution is to combine the best part of the two approaches: a
724 // user would write Types<T1, ..., TN>, and Google Test will translate
725 // that to TypesN<T1, ..., TN> internally to make error messages
726 // readable. The translation is done by the 'type' member of the
727 // Types template.
728 template <typename T1 = internal::None, typename T2 = internal::None,
729 typename T3 = internal::None, typename T4 = internal::None,
730 typename T5 = internal::None, typename T6 = internal::None,
731 typename T7 = internal::None, typename T8 = internal::None,
732 typename T9 = internal::None, typename T10 = internal::None,
733 typename T11 = internal::None, typename T12 = internal::None,
734 typename T13 = internal::None, typename T14 = internal::None,
735 typename T15 = internal::None, typename T16 = internal::None,
736 typename T17 = internal::None, typename T18 = internal::None,
737 typename T19 = internal::None, typename T20 = internal::None,
738 typename T21 = internal::None, typename T22 = internal::None,
739 typename T23 = internal::None, typename T24 = internal::None,
740 typename T25 = internal::None, typename T26 = internal::None,
741 typename T27 = internal::None, typename T28 = internal::None,
742 typename T29 = internal::None, typename T30 = internal::None,
743 typename T31 = internal::None, typename T32 = internal::None,
744 typename T33 = internal::None, typename T34 = internal::None,
745 typename T35 = internal::None, typename T36 = internal::None,
746 typename T37 = internal::None, typename T38 = internal::None,
747 typename T39 = internal::None, typename T40 = internal::None,
748 typename T41 = internal::None, typename T42 = internal::None,
749 typename T43 = internal::None, typename T44 = internal::None,
750 typename T45 = internal::None, typename T46 = internal::None,
751 typename T47 = internal::None, typename T48 = internal::None,
752 typename T49 = internal::None, typename T50 = internal::None>
753 struct Types {
754 typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
755 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
756 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
757 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
758 };
759
760 template <>
761 struct Types<internal::None, internal::None, internal::None, internal::None,
762 internal::None, internal::None, internal::None, internal::None,
763 internal::None, internal::None, internal::None, internal::None,
764 internal::None, internal::None, internal::None, internal::None,
765 internal::None, internal::None, internal::None, internal::None,
766 internal::None, internal::None, internal::None, internal::None,
767 internal::None, internal::None, internal::None, internal::None,
768 internal::None, internal::None, internal::None, internal::None,
769 internal::None, internal::None, internal::None, internal::None,
770 internal::None, internal::None, internal::None, internal::None,
771 internal::None, internal::None, internal::None, internal::None,
772 internal::None, internal::None, internal::None, internal::None,
773 internal::None, internal::None> {
774 typedef internal::Types0 type;
775 };
776 template <typename T1>
777 struct Types<T1, internal::None, internal::None, internal::None,
778 internal::None, internal::None, internal::None, internal::None,
779 internal::None, internal::None, internal::None, internal::None,
780 internal::None, internal::None, internal::None, internal::None,
781 internal::None, internal::None, internal::None, internal::None,
782 internal::None, internal::None, internal::None, internal::None,
783 internal::None, internal::None, internal::None, internal::None,
784 internal::None, internal::None, internal::None, internal::None,
785 internal::None, internal::None, internal::None, internal::None,
786 internal::None, internal::None, internal::None, internal::None,
787 internal::None, internal::None, internal::None, internal::None,
788 internal::None, internal::None, internal::None, internal::None,
789 internal::None, internal::None> {
790 typedef internal::Types1<T1> type;
791 };
792 template <typename T1, typename T2>
793 struct Types<T1, T2, internal::None, internal::None, internal::None,
794 internal::None, internal::None, internal::None, internal::None,
795 internal::None, internal::None, internal::None, internal::None,
796 internal::None, internal::None, internal::None, internal::None,
797 internal::None, internal::None, internal::None, internal::None,
798 internal::None, internal::None, internal::None, internal::None,
799 internal::None, internal::None, internal::None, internal::None,
800 internal::None, internal::None, internal::None, internal::None,
801 internal::None, internal::None, internal::None, internal::None,
802 internal::None, internal::None, internal::None, internal::None,
803 internal::None, internal::None, internal::None, internal::None,
804 internal::None, internal::None, internal::None, internal::None,
805 internal::None> {
806 typedef internal::Types2<T1, T2> type;
807 };
808 template <typename T1, typename T2, typename T3>
809 struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
810 internal::None, internal::None, internal::None, internal::None,
811 internal::None, internal::None, internal::None, internal::None,
812 internal::None, internal::None, internal::None, internal::None,
813 internal::None, internal::None, internal::None, internal::None,
814 internal::None, internal::None, internal::None, internal::None,
815 internal::None, internal::None, internal::None, internal::None,
816 internal::None, internal::None, internal::None, internal::None,
817 internal::None, internal::None, internal::None, internal::None,
818 internal::None, internal::None, internal::None, internal::None,
819 internal::None, internal::None, internal::None, internal::None,
820 internal::None, internal::None, internal::None, internal::None> {
821 typedef internal::Types3<T1, T2, T3> type;
822 };
823 template <typename T1, typename T2, typename T3, typename T4>
824 struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
825 internal::None, internal::None, internal::None, internal::None,
826 internal::None, internal::None, internal::None, internal::None,
827 internal::None, internal::None, internal::None, internal::None,
828 internal::None, internal::None, internal::None, internal::None,
829 internal::None, internal::None, internal::None, internal::None,
830 internal::None, internal::None, internal::None, internal::None,
831 internal::None, internal::None, internal::None, internal::None,
832 internal::None, internal::None, internal::None, internal::None,
833 internal::None, internal::None, internal::None, internal::None,
834 internal::None, internal::None, internal::None, internal::None,
835 internal::None, internal::None, internal::None> {
836 typedef internal::Types4<T1, T2, T3, T4> type;
837 };
838 template <typename T1, typename T2, typename T3, typename T4, typename T5>
839 struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
840 internal::None, internal::None, internal::None, internal::None,
841 internal::None, internal::None, internal::None, internal::None,
842 internal::None, internal::None, internal::None, internal::None,
843 internal::None, internal::None, internal::None, internal::None,
844 internal::None, internal::None, internal::None, internal::None,
845 internal::None, internal::None, internal::None, internal::None,
846 internal::None, internal::None, internal::None, internal::None,
847 internal::None, internal::None, internal::None, internal::None,
848 internal::None, internal::None, internal::None, internal::None,
849 internal::None, internal::None, internal::None, internal::None,
850 internal::None, internal::None, internal::None> {
851 typedef internal::Types5<T1, T2, T3, T4, T5> type;
852 };
853 template <typename T1, typename T2, typename T3, typename T4, typename T5,
854 typename T6>
855 struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
856 internal::None, internal::None, internal::None, internal::None,
857 internal::None, internal::None, internal::None, internal::None,
858 internal::None, internal::None, internal::None, internal::None,
859 internal::None, internal::None, internal::None, internal::None,
860 internal::None, internal::None, internal::None, internal::None,
861 internal::None, internal::None, internal::None, internal::None,
862 internal::None, internal::None, internal::None, internal::None,
863 internal::None, internal::None, internal::None, internal::None,
864 internal::None, internal::None, internal::None, internal::None,
865 internal::None, internal::None, internal::None, internal::None,
866 internal::None, internal::None> {
867 typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
868 };
869 template <typename T1, typename T2, typename T3, typename T4, typename T5,
870 typename T6, typename T7>
871 struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
872 internal::None, internal::None, internal::None, internal::None,
873 internal::None, internal::None, internal::None, internal::None,
874 internal::None, internal::None, internal::None, internal::None,
875 internal::None, internal::None, internal::None, internal::None,
876 internal::None, internal::None, internal::None, internal::None,
877 internal::None, internal::None, internal::None, internal::None,
878 internal::None, internal::None, internal::None, internal::None,
879 internal::None, internal::None, internal::None, internal::None,
880 internal::None, internal::None, internal::None, internal::None,
881 internal::None, internal::None, internal::None, internal::None,
882 internal::None> {
883 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
884 };
885 template <typename T1, typename T2, typename T3, typename T4, typename T5,
886 typename T6, typename T7, typename T8>
887 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
888 internal::None, internal::None, internal::None, internal::None,
889 internal::None, internal::None, internal::None, internal::None,
890 internal::None, internal::None, internal::None, internal::None,
891 internal::None, internal::None, internal::None, internal::None,
892 internal::None, internal::None, internal::None, internal::None,
893 internal::None, internal::None, internal::None, internal::None,
894 internal::None, internal::None, internal::None, internal::None,
895 internal::None, internal::None, internal::None, internal::None,
896 internal::None, internal::None, internal::None, internal::None,
897 internal::None, internal::None, internal::None, internal::None> {
898 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
899 };
900 template <typename T1, typename T2, typename T3, typename T4, typename T5,
901 typename T6, typename T7, typename T8, typename T9>
902 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
903 internal::None, internal::None, internal::None, internal::None,
904 internal::None, internal::None, internal::None, internal::None,
905 internal::None, internal::None, internal::None, internal::None,
906 internal::None, internal::None, internal::None, internal::None,
907 internal::None, internal::None, internal::None, internal::None,
908 internal::None, internal::None, internal::None, internal::None,
909 internal::None, internal::None, internal::None, internal::None,
910 internal::None, internal::None, internal::None, internal::None,
911 internal::None, internal::None, internal::None, internal::None,
912 internal::None, internal::None, internal::None, internal::None> {
913 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
914 };
915 template <typename T1, typename T2, typename T3, typename T4, typename T5,
916 typename T6, typename T7, typename T8, typename T9, typename T10>
917 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
918 internal::None, internal::None, internal::None, internal::None,
919 internal::None, internal::None, internal::None, internal::None,
920 internal::None, internal::None, internal::None, internal::None,
921 internal::None, internal::None, internal::None, internal::None,
922 internal::None, internal::None, internal::None, internal::None,
923 internal::None, internal::None, internal::None, internal::None,
924 internal::None, internal::None, internal::None, internal::None,
925 internal::None, internal::None, internal::None, internal::None,
926 internal::None, internal::None, internal::None, internal::None,
927 internal::None, internal::None, internal::None> {
928 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
929 };
930 template <typename T1, typename T2, typename T3, typename T4, typename T5,
931 typename T6, typename T7, typename T8, typename T9, typename T10,
932 typename T11>
933 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
934 internal::None, internal::None, internal::None, internal::None,
935 internal::None, internal::None, internal::None, internal::None,
936 internal::None, internal::None, internal::None, internal::None,
937 internal::None, internal::None, internal::None, internal::None,
938 internal::None, internal::None, internal::None, internal::None,
939 internal::None, internal::None, internal::None, internal::None,
940 internal::None, internal::None, internal::None, internal::None,
941 internal::None, internal::None, internal::None, internal::None,
942 internal::None, internal::None, internal::None, internal::None,
943 internal::None, internal::None> {
944 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
945 };
946 template <typename T1, typename T2, typename T3, typename T4, typename T5,
947 typename T6, typename T7, typename T8, typename T9, typename T10,
948 typename T11, typename T12>
949 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
950 internal::None, internal::None, internal::None, internal::None,
951 internal::None, internal::None, internal::None, internal::None,
952 internal::None, internal::None, internal::None, internal::None,
953 internal::None, internal::None, internal::None, internal::None,
954 internal::None, internal::None, internal::None, internal::None,
955 internal::None, internal::None, internal::None, internal::None,
956 internal::None, internal::None, internal::None, internal::None,
957 internal::None, internal::None, internal::None, internal::None,
958 internal::None, internal::None, internal::None, internal::None,
959 internal::None> {
960 typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
961 T12> type;
962 };
963 template <typename T1, typename T2, typename T3, typename T4, typename T5,
964 typename T6, typename T7, typename T8, typename T9, typename T10,
965 typename T11, typename T12, typename T13>
966 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
967 internal::None, internal::None, internal::None, internal::None,
968 internal::None, internal::None, internal::None, internal::None,
969 internal::None, internal::None, internal::None, internal::None,
970 internal::None, internal::None, internal::None, internal::None,
971 internal::None, internal::None, internal::None, internal::None,
972 internal::None, internal::None, internal::None, internal::None,
973 internal::None, internal::None, internal::None, internal::None,
974 internal::None, internal::None, internal::None, internal::None,
975 internal::None, internal::None, internal::None, internal::None,
976 internal::None> {
977 typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
978 T13> type;
979 };
980 template <typename T1, typename T2, typename T3, typename T4, typename T5,
981 typename T6, typename T7, typename T8, typename T9, typename T10,
982 typename T11, typename T12, typename T13, typename T14>
983 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
984 internal::None, internal::None, internal::None, internal::None,
985 internal::None, internal::None, internal::None, internal::None,
986 internal::None, internal::None, internal::None, internal::None,
987 internal::None, internal::None, internal::None, internal::None,
988 internal::None, internal::None, internal::None, internal::None,
989 internal::None, internal::None, internal::None, internal::None,
990 internal::None, internal::None, internal::None, internal::None,
991 internal::None, internal::None, internal::None, internal::None,
992 internal::None, internal::None, internal::None, internal::None> {
993 typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
994 T13, T14> type;
995 };
996 template <typename T1, typename T2, typename T3, typename T4, typename T5,
997 typename T6, typename T7, typename T8, typename T9, typename T10,
998 typename T11, typename T12, typename T13, typename T14, typename T15>
999 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1000 internal::None, internal::None, internal::None, internal::None,
1001 internal::None, internal::None, internal::None, internal::None,
1002 internal::None, internal::None, internal::None, internal::None,
1003 internal::None, internal::None, internal::None, internal::None,
1004 internal::None, internal::None, internal::None, internal::None,
1005 internal::None, internal::None, internal::None, internal::None,
1006 internal::None, internal::None, internal::None, internal::None,
1007 internal::None, internal::None, internal::None, internal::None,
1008 internal::None, internal::None, internal::None> {
1009 typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1010 T13, T14, T15> type;
1011 };
1012 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1013 typename T6, typename T7, typename T8, typename T9, typename T10,
1014 typename T11, typename T12, typename T13, typename T14, typename T15,
1015 typename T16>
1016 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1017 T16, internal::None, internal::None, internal::None, internal::None,
1018 internal::None, internal::None, internal::None, internal::None,
1019 internal::None, internal::None, internal::None, internal::None,
1020 internal::None, internal::None, internal::None, internal::None,
1021 internal::None, internal::None, internal::None, internal::None,
1022 internal::None, internal::None, internal::None, internal::None,
1023 internal::None, internal::None, internal::None, internal::None,
1024 internal::None, internal::None, internal::None, internal::None,
1025 internal::None, internal::None> {
1026 typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1027 T13, T14, T15, T16> type;
1028 };
1029 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1030 typename T6, typename T7, typename T8, typename T9, typename T10,
1031 typename T11, typename T12, typename T13, typename T14, typename T15,
1032 typename T16, typename T17>
1033 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1034 T16, T17, internal::None, internal::None, internal::None, internal::None,
1035 internal::None, internal::None, internal::None, internal::None,
1036 internal::None, internal::None, internal::None, internal::None,
1037 internal::None, internal::None, internal::None, internal::None,
1038 internal::None, internal::None, internal::None, internal::None,
1039 internal::None, internal::None, internal::None, internal::None,
1040 internal::None, internal::None, internal::None, internal::None,
1041 internal::None, internal::None, internal::None, internal::None,
1042 internal::None> {
1043 typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1044 T13, T14, T15, T16, T17> type;
1045 };
1046 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1047 typename T6, typename T7, typename T8, typename T9, typename T10,
1048 typename T11, typename T12, typename T13, typename T14, typename T15,
1049 typename T16, typename T17, typename T18>
1050 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1051 T16, T17, T18, internal::None, internal::None, internal::None,
1052 internal::None, internal::None, internal::None, internal::None,
1053 internal::None, internal::None, internal::None, internal::None,
1054 internal::None, internal::None, internal::None, internal::None,
1055 internal::None, internal::None, internal::None, internal::None,
1056 internal::None, internal::None, internal::None, internal::None,
1057 internal::None, internal::None, internal::None, internal::None,
1058 internal::None, internal::None, internal::None, internal::None,
1059 internal::None> {
1060 typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1061 T13, T14, T15, T16, T17, T18> type;
1062 };
1063 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1064 typename T6, typename T7, typename T8, typename T9, typename T10,
1065 typename T11, typename T12, typename T13, typename T14, typename T15,
1066 typename T16, typename T17, typename T18, typename T19>
1067 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1068 T16, T17, T18, T19, internal::None, internal::None, internal::None,
1069 internal::None, internal::None, internal::None, internal::None,
1070 internal::None, internal::None, internal::None, internal::None,
1071 internal::None, internal::None, internal::None, internal::None,
1072 internal::None, internal::None, internal::None, internal::None,
1073 internal::None, internal::None, internal::None, internal::None,
1074 internal::None, internal::None, internal::None, internal::None,
1075 internal::None, internal::None, internal::None, internal::None> {
1076 typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1077 T13, T14, T15, T16, T17, T18, T19> type;
1078 };
1079 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1080 typename T6, typename T7, typename T8, typename T9, typename T10,
1081 typename T11, typename T12, typename T13, typename T14, typename T15,
1082 typename T16, typename T17, typename T18, typename T19, typename T20>
1083 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1084 T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
1085 internal::None, internal::None, internal::None, internal::None,
1086 internal::None, internal::None, internal::None, internal::None,
1087 internal::None, internal::None, internal::None, internal::None,
1088 internal::None, internal::None, internal::None, internal::None,
1089 internal::None, internal::None, internal::None, internal::None,
1090 internal::None, internal::None, internal::None, internal::None,
1091 internal::None, internal::None, internal::None> {
1092 typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1093 T13, T14, T15, T16, T17, T18, T19, T20> type;
1094 };
1095 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1096 typename T6, typename T7, typename T8, typename T9, typename T10,
1097 typename T11, typename T12, typename T13, typename T14, typename T15,
1098 typename T16, typename T17, typename T18, typename T19, typename T20,
1099 typename T21>
1100 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1101 T16, T17, T18, T19, T20, T21, internal::None, internal::None,
1102 internal::None, internal::None, internal::None, internal::None,
1103 internal::None, internal::None, internal::None, internal::None,
1104 internal::None, internal::None, internal::None, internal::None,
1105 internal::None, internal::None, internal::None, internal::None,
1106 internal::None, internal::None, internal::None, internal::None,
1107 internal::None, internal::None, internal::None, internal::None,
1108 internal::None, internal::None, internal::None> {
1109 typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1110 T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
1111 };
1112 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1113 typename T6, typename T7, typename T8, typename T9, typename T10,
1114 typename T11, typename T12, typename T13, typename T14, typename T15,
1115 typename T16, typename T17, typename T18, typename T19, typename T20,
1116 typename T21, typename T22>
1117 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1118 T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
1119 internal::None, internal::None, internal::None, internal::None,
1120 internal::None, internal::None, internal::None, internal::None,
1121 internal::None, internal::None, internal::None, internal::None,
1122 internal::None, internal::None, internal::None, internal::None,
1123 internal::None, internal::None, internal::None, internal::None,
1124 internal::None, internal::None, internal::None, internal::None,
1125 internal::None, internal::None> {
1126 typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1127 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
1128 };
1129 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1130 typename T6, typename T7, typename T8, typename T9, typename T10,
1131 typename T11, typename T12, typename T13, typename T14, typename T15,
1132 typename T16, typename T17, typename T18, typename T19, typename T20,
1133 typename T21, typename T22, typename T23>
1134 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1135 T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
1136 internal::None, internal::None, internal::None, internal::None,
1137 internal::None, internal::None, internal::None, internal::None,
1138 internal::None, internal::None, internal::None, internal::None,
1139 internal::None, internal::None, internal::None, internal::None,
1140 internal::None, internal::None, internal::None, internal::None,
1141 internal::None, internal::None, internal::None, internal::None,
1142 internal::None> {
1143 typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1144 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
1145 };
1146 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1147 typename T6, typename T7, typename T8, typename T9, typename T10,
1148 typename T11, typename T12, typename T13, typename T14, typename T15,
1149 typename T16, typename T17, typename T18, typename T19, typename T20,
1150 typename T21, typename T22, typename T23, typename T24>
1151 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1152 T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
1153 internal::None, internal::None, internal::None, internal::None,
1154 internal::None, internal::None, internal::None, internal::None,
1155 internal::None, internal::None, internal::None, internal::None,
1156 internal::None, internal::None, internal::None, internal::None,
1157 internal::None, internal::None, internal::None, internal::None,
1158 internal::None, internal::None, internal::None, internal::None,
1159 internal::None> {
1160 typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1161 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
1162 };
1163 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1164 typename T6, typename T7, typename T8, typename T9, typename T10,
1165 typename T11, typename T12, typename T13, typename T14, typename T15,
1166 typename T16, typename T17, typename T18, typename T19, typename T20,
1167 typename T21, typename T22, typename T23, typename T24, typename T25>
1168 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1169 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
1170 internal::None, internal::None, internal::None, internal::None,
1171 internal::None, internal::None, internal::None, internal::None,
1172 internal::None, internal::None, internal::None, internal::None,
1173 internal::None, internal::None, internal::None, internal::None,
1174 internal::None, internal::None, internal::None, internal::None,
1175 internal::None, internal::None, internal::None, internal::None> {
1176 typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1177 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
1178 };
1179 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1180 typename T6, typename T7, typename T8, typename T9, typename T10,
1181 typename T11, typename T12, typename T13, typename T14, typename T15,
1182 typename T16, typename T17, typename T18, typename T19, typename T20,
1183 typename T21, typename T22, typename T23, typename T24, typename T25,
1184 typename T26>
1185 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1186 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
1187 internal::None, internal::None, internal::None, internal::None,
1188 internal::None, internal::None, internal::None, internal::None,
1189 internal::None, internal::None, internal::None, internal::None,
1190 internal::None, internal::None, internal::None, internal::None,
1191 internal::None, internal::None, internal::None, internal::None,
1192 internal::None, internal::None, internal::None> {
1193 typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1194 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1195 T26> type;
1196 };
1197 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1198 typename T6, typename T7, typename T8, typename T9, typename T10,
1199 typename T11, typename T12, typename T13, typename T14, typename T15,
1200 typename T16, typename T17, typename T18, typename T19, typename T20,
1201 typename T21, typename T22, typename T23, typename T24, typename T25,
1202 typename T26, typename T27>
1203 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1204 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
1205 internal::None, internal::None, internal::None, internal::None,
1206 internal::None, internal::None, internal::None, internal::None,
1207 internal::None, internal::None, internal::None, internal::None,
1208 internal::None, internal::None, internal::None, internal::None,
1209 internal::None, internal::None, internal::None, internal::None,
1210 internal::None, internal::None> {
1211 typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1212 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1213 T27> type;
1214 };
1215 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1216 typename T6, typename T7, typename T8, typename T9, typename T10,
1217 typename T11, typename T12, typename T13, typename T14, typename T15,
1218 typename T16, typename T17, typename T18, typename T19, typename T20,
1219 typename T21, typename T22, typename T23, typename T24, typename T25,
1220 typename T26, typename T27, typename T28>
1221 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1222 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1223 internal::None, internal::None, internal::None, internal::None,
1224 internal::None, internal::None, internal::None, internal::None,
1225 internal::None, internal::None, internal::None, internal::None,
1226 internal::None, internal::None, internal::None, internal::None,
1227 internal::None, internal::None, internal::None, internal::None,
1228 internal::None, internal::None> {
1229 typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1230 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1231 T27, T28> type;
1232 };
1233 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1234 typename T6, typename T7, typename T8, typename T9, typename T10,
1235 typename T11, typename T12, typename T13, typename T14, typename T15,
1236 typename T16, typename T17, typename T18, typename T19, typename T20,
1237 typename T21, typename T22, typename T23, typename T24, typename T25,
1238 typename T26, typename T27, typename T28, typename T29>
1239 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1240 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
1241 internal::None, internal::None, internal::None, internal::None,
1242 internal::None, internal::None, internal::None, internal::None,
1243 internal::None, internal::None, internal::None, internal::None,
1244 internal::None, internal::None, internal::None, internal::None,
1245 internal::None, internal::None, internal::None, internal::None,
1246 internal::None> {
1247 typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1248 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1249 T27, T28, T29> type;
1250 };
1251 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1252 typename T6, typename T7, typename T8, typename T9, typename T10,
1253 typename T11, typename T12, typename T13, typename T14, typename T15,
1254 typename T16, typename T17, typename T18, typename T19, typename T20,
1255 typename T21, typename T22, typename T23, typename T24, typename T25,
1256 typename T26, typename T27, typename T28, typename T29, typename T30>
1257 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1258 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1259 internal::None, internal::None, internal::None, internal::None,
1260 internal::None, internal::None, internal::None, internal::None,
1261 internal::None, internal::None, internal::None, internal::None,
1262 internal::None, internal::None, internal::None, internal::None,
1263 internal::None, internal::None, internal::None, internal::None> {
1264 typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1265 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1266 T27, T28, T29, T30> type;
1267 };
1268 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1269 typename T6, typename T7, typename T8, typename T9, typename T10,
1270 typename T11, typename T12, typename T13, typename T14, typename T15,
1271 typename T16, typename T17, typename T18, typename T19, typename T20,
1272 typename T21, typename T22, typename T23, typename T24, typename T25,
1273 typename T26, typename T27, typename T28, typename T29, typename T30,
1274 typename T31>
1275 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1276 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1277 T31, internal::None, internal::None, internal::None, internal::None,
1278 internal::None, internal::None, internal::None, internal::None,
1279 internal::None, internal::None, internal::None, internal::None,
1280 internal::None, internal::None, internal::None, internal::None,
1281 internal::None, internal::None, internal::None> {
1282 typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1283 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1284 T27, T28, T29, T30, T31> type;
1285 };
1286 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1287 typename T6, typename T7, typename T8, typename T9, typename T10,
1288 typename T11, typename T12, typename T13, typename T14, typename T15,
1289 typename T16, typename T17, typename T18, typename T19, typename T20,
1290 typename T21, typename T22, typename T23, typename T24, typename T25,
1291 typename T26, typename T27, typename T28, typename T29, typename T30,
1292 typename T31, typename T32>
1293 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1294 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1295 T31, T32, internal::None, internal::None, internal::None, internal::None,
1296 internal::None, internal::None, internal::None, internal::None,
1297 internal::None, internal::None, internal::None, internal::None,
1298 internal::None, internal::None, internal::None, internal::None,
1299 internal::None, internal::None> {
1300 typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1301 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1302 T27, T28, T29, T30, T31, T32> type;
1303 };
1304 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1305 typename T6, typename T7, typename T8, typename T9, typename T10,
1306 typename T11, typename T12, typename T13, typename T14, typename T15,
1307 typename T16, typename T17, typename T18, typename T19, typename T20,
1308 typename T21, typename T22, typename T23, typename T24, typename T25,
1309 typename T26, typename T27, typename T28, typename T29, typename T30,
1310 typename T31, typename T32, typename T33>
1311 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1312 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1313 T31, T32, T33, internal::None, internal::None, internal::None,
1314 internal::None, internal::None, internal::None, internal::None,
1315 internal::None, internal::None, internal::None, internal::None,
1316 internal::None, internal::None, internal::None, internal::None,
1317 internal::None, internal::None> {
1318 typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1319 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1320 T27, T28, T29, T30, T31, T32, T33> type;
1321 };
1322 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1323 typename T6, typename T7, typename T8, typename T9, typename T10,
1324 typename T11, typename T12, typename T13, typename T14, typename T15,
1325 typename T16, typename T17, typename T18, typename T19, typename T20,
1326 typename T21, typename T22, typename T23, typename T24, typename T25,
1327 typename T26, typename T27, typename T28, typename T29, typename T30,
1328 typename T31, typename T32, typename T33, typename T34>
1329 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1330 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1331 T31, T32, T33, T34, internal::None, internal::None, internal::None,
1332 internal::None, internal::None, internal::None, internal::None,
1333 internal::None, internal::None, internal::None, internal::None,
1334 internal::None, internal::None, internal::None, internal::None,
1335 internal::None> {
1336 typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1337 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1338 T27, T28, T29, T30, T31, T32, T33, T34> type;
1339 };
1340 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1341 typename T6, typename T7, typename T8, typename T9, typename T10,
1342 typename T11, typename T12, typename T13, typename T14, typename T15,
1343 typename T16, typename T17, typename T18, typename T19, typename T20,
1344 typename T21, typename T22, typename T23, typename T24, typename T25,
1345 typename T26, typename T27, typename T28, typename T29, typename T30,
1346 typename T31, typename T32, typename T33, typename T34, typename T35>
1347 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1348 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1349 T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
1350 internal::None, internal::None, internal::None, internal::None,
1351 internal::None, internal::None, internal::None, internal::None,
1352 internal::None, internal::None, internal::None, internal::None> {
1353 typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1354 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1355 T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
1356 };
1357 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1358 typename T6, typename T7, typename T8, typename T9, typename T10,
1359 typename T11, typename T12, typename T13, typename T14, typename T15,
1360 typename T16, typename T17, typename T18, typename T19, typename T20,
1361 typename T21, typename T22, typename T23, typename T24, typename T25,
1362 typename T26, typename T27, typename T28, typename T29, typename T30,
1363 typename T31, typename T32, typename T33, typename T34, typename T35,
1364 typename T36>
1365 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1366 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1367 T31, T32, T33, T34, T35, T36, internal::None, internal::None,
1368 internal::None, internal::None, internal::None, internal::None,
1369 internal::None, internal::None, internal::None, internal::None,
1370 internal::None, internal::None, internal::None, internal::None> {
1371 typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1372 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1373 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
1374 };
1375 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1376 typename T6, typename T7, typename T8, typename T9, typename T10,
1377 typename T11, typename T12, typename T13, typename T14, typename T15,
1378 typename T16, typename T17, typename T18, typename T19, typename T20,
1379 typename T21, typename T22, typename T23, typename T24, typename T25,
1380 typename T26, typename T27, typename T28, typename T29, typename T30,
1381 typename T31, typename T32, typename T33, typename T34, typename T35,
1382 typename T36, typename T37>
1383 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1384 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1385 T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
1386 internal::None, internal::None, internal::None, internal::None,
1387 internal::None, internal::None, internal::None, internal::None,
1388 internal::None, internal::None, internal::None> {
1389 typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1390 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1391 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
1392 };
1393 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1394 typename T6, typename T7, typename T8, typename T9, typename T10,
1395 typename T11, typename T12, typename T13, typename T14, typename T15,
1396 typename T16, typename T17, typename T18, typename T19, typename T20,
1397 typename T21, typename T22, typename T23, typename T24, typename T25,
1398 typename T26, typename T27, typename T28, typename T29, typename T30,
1399 typename T31, typename T32, typename T33, typename T34, typename T35,
1400 typename T36, typename T37, typename T38>
1401 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1402 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1403 T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
1404 internal::None, internal::None, internal::None, internal::None,
1405 internal::None, internal::None, internal::None, internal::None,
1406 internal::None, internal::None> {
1407 typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1408 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1409 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
1410 };
1411 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1412 typename T6, typename T7, typename T8, typename T9, typename T10,
1413 typename T11, typename T12, typename T13, typename T14, typename T15,
1414 typename T16, typename T17, typename T18, typename T19, typename T20,
1415 typename T21, typename T22, typename T23, typename T24, typename T25,
1416 typename T26, typename T27, typename T28, typename T29, typename T30,
1417 typename T31, typename T32, typename T33, typename T34, typename T35,
1418 typename T36, typename T37, typename T38, typename T39>
1419 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1420 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1421 T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
1422 internal::None, internal::None, internal::None, internal::None,
1423 internal::None, internal::None, internal::None, internal::None,
1424 internal::None, internal::None> {
1425 typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1426 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1427 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
1428 };
1429 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1430 typename T6, typename T7, typename T8, typename T9, typename T10,
1431 typename T11, typename T12, typename T13, typename T14, typename T15,
1432 typename T16, typename T17, typename T18, typename T19, typename T20,
1433 typename T21, typename T22, typename T23, typename T24, typename T25,
1434 typename T26, typename T27, typename T28, typename T29, typename T30,
1435 typename T31, typename T32, typename T33, typename T34, typename T35,
1436 typename T36, typename T37, typename T38, typename T39, typename T40>
1437 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1438 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1439 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
1440 internal::None, internal::None, internal::None, internal::None,
1441 internal::None, internal::None, internal::None, internal::None,
1442 internal::None> {
1443 typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1444 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1445 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1446 T40> type;
1447 };
1448 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1449 typename T6, typename T7, typename T8, typename T9, typename T10,
1450 typename T11, typename T12, typename T13, typename T14, typename T15,
1451 typename T16, typename T17, typename T18, typename T19, typename T20,
1452 typename T21, typename T22, typename T23, typename T24, typename T25,
1453 typename T26, typename T27, typename T28, typename T29, typename T30,
1454 typename T31, typename T32, typename T33, typename T34, typename T35,
1455 typename T36, typename T37, typename T38, typename T39, typename T40,
1456 typename T41>
1457 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1458 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1459 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
1460 internal::None, internal::None, internal::None, internal::None,
1461 internal::None, internal::None, internal::None, internal::None> {
1462 typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1463 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1464 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1465 T41> type;
1466 };
1467 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1468 typename T6, typename T7, typename T8, typename T9, typename T10,
1469 typename T11, typename T12, typename T13, typename T14, typename T15,
1470 typename T16, typename T17, typename T18, typename T19, typename T20,
1471 typename T21, typename T22, typename T23, typename T24, typename T25,
1472 typename T26, typename T27, typename T28, typename T29, typename T30,
1473 typename T31, typename T32, typename T33, typename T34, typename T35,
1474 typename T36, typename T37, typename T38, typename T39, typename T40,
1475 typename T41, typename T42>
1476 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1477 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1478 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
1479 internal::None, internal::None, internal::None, internal::None,
1480 internal::None, internal::None, internal::None> {
1481 typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1482 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1483 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1484 T41, T42> type;
1485 };
1486 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1487 typename T6, typename T7, typename T8, typename T9, typename T10,
1488 typename T11, typename T12, typename T13, typename T14, typename T15,
1489 typename T16, typename T17, typename T18, typename T19, typename T20,
1490 typename T21, typename T22, typename T23, typename T24, typename T25,
1491 typename T26, typename T27, typename T28, typename T29, typename T30,
1492 typename T31, typename T32, typename T33, typename T34, typename T35,
1493 typename T36, typename T37, typename T38, typename T39, typename T40,
1494 typename T41, typename T42, typename T43>
1495 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1496 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1497 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1498 internal::None, internal::None, internal::None, internal::None,
1499 internal::None, internal::None, internal::None> {
1500 typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1501 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1502 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1503 T41, T42, T43> type;
1504 };
1505 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1506 typename T6, typename T7, typename T8, typename T9, typename T10,
1507 typename T11, typename T12, typename T13, typename T14, typename T15,
1508 typename T16, typename T17, typename T18, typename T19, typename T20,
1509 typename T21, typename T22, typename T23, typename T24, typename T25,
1510 typename T26, typename T27, typename T28, typename T29, typename T30,
1511 typename T31, typename T32, typename T33, typename T34, typename T35,
1512 typename T36, typename T37, typename T38, typename T39, typename T40,
1513 typename T41, typename T42, typename T43, typename T44>
1514 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1515 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1516 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
1517 internal::None, internal::None, internal::None, internal::None,
1518 internal::None, internal::None> {
1519 typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1520 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1521 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1522 T41, T42, T43, T44> type;
1523 };
1524 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1525 typename T6, typename T7, typename T8, typename T9, typename T10,
1526 typename T11, typename T12, typename T13, typename T14, typename T15,
1527 typename T16, typename T17, typename T18, typename T19, typename T20,
1528 typename T21, typename T22, typename T23, typename T24, typename T25,
1529 typename T26, typename T27, typename T28, typename T29, typename T30,
1530 typename T31, typename T32, typename T33, typename T34, typename T35,
1531 typename T36, typename T37, typename T38, typename T39, typename T40,
1532 typename T41, typename T42, typename T43, typename T44, typename T45>
1533 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1534 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1535 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1536 internal::None, internal::None, internal::None, internal::None,
1537 internal::None> {
1538 typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1539 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1540 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1541 T41, T42, T43, T44, T45> type;
1542 };
1543 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1544 typename T6, typename T7, typename T8, typename T9, typename T10,
1545 typename T11, typename T12, typename T13, typename T14, typename T15,
1546 typename T16, typename T17, typename T18, typename T19, typename T20,
1547 typename T21, typename T22, typename T23, typename T24, typename T25,
1548 typename T26, typename T27, typename T28, typename T29, typename T30,
1549 typename T31, typename T32, typename T33, typename T34, typename T35,
1550 typename T36, typename T37, typename T38, typename T39, typename T40,
1551 typename T41, typename T42, typename T43, typename T44, typename T45,
1552 typename T46>
1553 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1554 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1555 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1556 T46, internal::None, internal::None, internal::None, internal::None> {
1557 typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1558 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1559 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1560 T41, T42, T43, T44, T45, T46> type;
1561 };
1562 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1563 typename T6, typename T7, typename T8, typename T9, typename T10,
1564 typename T11, typename T12, typename T13, typename T14, typename T15,
1565 typename T16, typename T17, typename T18, typename T19, typename T20,
1566 typename T21, typename T22, typename T23, typename T24, typename T25,
1567 typename T26, typename T27, typename T28, typename T29, typename T30,
1568 typename T31, typename T32, typename T33, typename T34, typename T35,
1569 typename T36, typename T37, typename T38, typename T39, typename T40,
1570 typename T41, typename T42, typename T43, typename T44, typename T45,
1571 typename T46, typename T47>
1572 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1573 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1574 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1575 T46, T47, internal::None, internal::None, internal::None> {
1576 typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1577 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1578 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1579 T41, T42, T43, T44, T45, T46, T47> type;
1580 };
1581 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1582 typename T6, typename T7, typename T8, typename T9, typename T10,
1583 typename T11, typename T12, typename T13, typename T14, typename T15,
1584 typename T16, typename T17, typename T18, typename T19, typename T20,
1585 typename T21, typename T22, typename T23, typename T24, typename T25,
1586 typename T26, typename T27, typename T28, typename T29, typename T30,
1587 typename T31, typename T32, typename T33, typename T34, typename T35,
1588 typename T36, typename T37, typename T38, typename T39, typename T40,
1589 typename T41, typename T42, typename T43, typename T44, typename T45,
1590 typename T46, typename T47, typename T48>
1591 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1592 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1593 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1594 T46, T47, T48, internal::None, internal::None> {
1595 typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1596 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1597 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1598 T41, T42, T43, T44, T45, T46, T47, T48> type;
1599 };
1600 template <typename T1, typename T2, typename T3, typename T4, typename T5,
1601 typename T6, typename T7, typename T8, typename T9, typename T10,
1602 typename T11, typename T12, typename T13, typename T14, typename T15,
1603 typename T16, typename T17, typename T18, typename T19, typename T20,
1604 typename T21, typename T22, typename T23, typename T24, typename T25,
1605 typename T26, typename T27, typename T28, typename T29, typename T30,
1606 typename T31, typename T32, typename T33, typename T34, typename T35,
1607 typename T36, typename T37, typename T38, typename T39, typename T40,
1608 typename T41, typename T42, typename T43, typename T44, typename T45,
1609 typename T46, typename T47, typename T48, typename T49>
1610 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1611 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1612 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1613 T46, T47, T48, T49, internal::None> {
1614 typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1615 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1616 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1617 T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
1618 };
1619
1620 namespace internal {
1621
1622 # define GTEST_TEMPLATE_ template <typename T> class
1623
1624 // The template "selector" struct TemplateSel<Tmpl> is used to
1625 // represent Tmpl, which must be a class template with one type
1626 // parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined
1627 // as the type Tmpl<T>. This allows us to actually instantiate the
1628 // template "selected" by TemplateSel<Tmpl>.
1629 //
1630 // This trick is necessary for simulating typedef for class templates,
1631 // which C++ doesn't support directly.
1632 template <GTEST_TEMPLATE_ Tmpl>
1633 struct TemplateSel {
1634 template <typename T>
1635 struct Bind {
1636 typedef Tmpl<T> type;
1637 };
1638 };
1639
1640 # define GTEST_BIND_(TmplSel, T) \
1641 TmplSel::template Bind<T>::type
1642
1643 // A unique struct template used as the default value for the
1644 // arguments of class template Templates. This allows us to simulate
1645 // variadic templates (e.g. Templates<int>, Templates<int, double>,
1646 // and etc), which C++ doesn't support directly.
1647 template <typename T>
1648 struct NoneT {};
1649
1650 // The following family of struct and struct templates are used to
1651 // represent template lists. In particular, TemplatesN<T1, T2, ...,
1652 // TN> represents a list of N templates (T1, T2, ..., and TN). Except
1653 // for Templates0, every struct in the family has two member types:
1654 // Head for the selector of the first template in the list, and Tail
1655 // for the rest of the list.
1656
1657 // The empty template list.
1658 struct Templates0 {};
1659
1660 // Template lists of length 1, 2, 3, and so on.
1661
1662 template <GTEST_TEMPLATE_ T1>
1663 struct Templates1 {
1664 typedef TemplateSel<T1> Head;
1665 typedef Templates0 Tail;
1666 };
1667 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
1668 struct Templates2 {
1669 typedef TemplateSel<T1> Head;
1670 typedef Templates1<T2> Tail;
1671 };
1672
1673 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
1674 struct Templates3 {
1675 typedef TemplateSel<T1> Head;
1676 typedef Templates2<T2, T3> Tail;
1677 };
1678
1679 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1680 GTEST_TEMPLATE_ T4>
1681 struct Templates4 {
1682 typedef TemplateSel<T1> Head;
1683 typedef Templates3<T2, T3, T4> Tail;
1684 };
1685
1686 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1687 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
1688 struct Templates5 {
1689 typedef TemplateSel<T1> Head;
1690 typedef Templates4<T2, T3, T4, T5> Tail;
1691 };
1692
1693 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1694 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
1695 struct Templates6 {
1696 typedef TemplateSel<T1> Head;
1697 typedef Templates5<T2, T3, T4, T5, T6> Tail;
1698 };
1699
1700 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1701 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1702 GTEST_TEMPLATE_ T7>
1703 struct Templates7 {
1704 typedef TemplateSel<T1> Head;
1705 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
1706 };
1707
1708 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1709 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1710 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
1711 struct Templates8 {
1712 typedef TemplateSel<T1> Head;
1713 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
1714 };
1715
1716 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1717 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1718 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
1719 struct Templates9 {
1720 typedef TemplateSel<T1> Head;
1721 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
1722 };
1723
1724 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1725 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1726 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1727 GTEST_TEMPLATE_ T10>
1728 struct Templates10 {
1729 typedef TemplateSel<T1> Head;
1730 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
1731 };
1732
1733 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1734 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1735 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1736 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
1737 struct Templates11 {
1738 typedef TemplateSel<T1> Head;
1739 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
1740 };
1741
1742 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1743 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1744 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1745 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
1746 struct Templates12 {
1747 typedef TemplateSel<T1> Head;
1748 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
1749 };
1750
1751 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1752 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1753 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1754 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1755 GTEST_TEMPLATE_ T13>
1756 struct Templates13 {
1757 typedef TemplateSel<T1> Head;
1758 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
1759 };
1760
1761 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1762 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1763 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1764 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1765 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
1766 struct Templates14 {
1767 typedef TemplateSel<T1> Head;
1768 typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1769 T14> Tail;
1770 };
1771
1772 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1773 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1774 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1775 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1776 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
1777 struct Templates15 {
1778 typedef TemplateSel<T1> Head;
1779 typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1780 T15> Tail;
1781 };
1782
1783 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1784 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1785 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1786 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1787 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1788 GTEST_TEMPLATE_ T16>
1789 struct Templates16 {
1790 typedef TemplateSel<T1> Head;
1791 typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1792 T15, T16> Tail;
1793 };
1794
1795 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1796 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1797 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1798 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1799 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1800 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
1801 struct Templates17 {
1802 typedef TemplateSel<T1> Head;
1803 typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1804 T15, T16, T17> Tail;
1805 };
1806
1807 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1808 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1809 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1810 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1811 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1812 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
1813 struct Templates18 {
1814 typedef TemplateSel<T1> Head;
1815 typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1816 T15, T16, T17, T18> Tail;
1817 };
1818
1819 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1820 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1821 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1822 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1823 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1824 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1825 GTEST_TEMPLATE_ T19>
1826 struct Templates19 {
1827 typedef TemplateSel<T1> Head;
1828 typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1829 T15, T16, T17, T18, T19> Tail;
1830 };
1831
1832 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1833 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1834 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1835 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1836 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1837 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1838 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
1839 struct Templates20 {
1840 typedef TemplateSel<T1> Head;
1841 typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1842 T15, T16, T17, T18, T19, T20> Tail;
1843 };
1844
1845 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1846 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1847 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1848 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1849 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1850 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1851 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
1852 struct Templates21 {
1853 typedef TemplateSel<T1> Head;
1854 typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1855 T15, T16, T17, T18, T19, T20, T21> Tail;
1856 };
1857
1858 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1859 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1860 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1861 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1862 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1863 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1864 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1865 GTEST_TEMPLATE_ T22>
1866 struct Templates22 {
1867 typedef TemplateSel<T1> Head;
1868 typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1869 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
1870 };
1871
1872 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1873 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1874 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1875 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1876 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1877 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1878 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1879 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
1880 struct Templates23 {
1881 typedef TemplateSel<T1> Head;
1882 typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1883 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
1884 };
1885
1886 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1887 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1888 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1889 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1890 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1891 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1892 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1893 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
1894 struct Templates24 {
1895 typedef TemplateSel<T1> Head;
1896 typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1897 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
1898 };
1899
1900 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1901 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1902 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1903 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1904 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1905 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1906 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1907 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1908 GTEST_TEMPLATE_ T25>
1909 struct Templates25 {
1910 typedef TemplateSel<T1> Head;
1911 typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1912 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
1913 };
1914
1915 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1916 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1917 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1918 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1919 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1920 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1921 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1922 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1923 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
1924 struct Templates26 {
1925 typedef TemplateSel<T1> Head;
1926 typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1927 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
1928 };
1929
1930 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1931 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1932 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1933 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1934 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1935 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1936 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1937 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1938 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
1939 struct Templates27 {
1940 typedef TemplateSel<T1> Head;
1941 typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1942 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
1943 };
1944
1945 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1946 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1947 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1948 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1949 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1950 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1951 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1952 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1953 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1954 GTEST_TEMPLATE_ T28>
1955 struct Templates28 {
1956 typedef TemplateSel<T1> Head;
1957 typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1958 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
1959 T28> Tail;
1960 };
1961
1962 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1963 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1964 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1965 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1966 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1967 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1968 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1969 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1970 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1971 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
1972 struct Templates29 {
1973 typedef TemplateSel<T1> Head;
1974 typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1975 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1976 T29> Tail;
1977 };
1978
1979 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1980 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1981 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1982 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1983 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1984 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1985 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1986 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1987 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1988 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
1989 struct Templates30 {
1990 typedef TemplateSel<T1> Head;
1991 typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1992 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1993 T29, T30> Tail;
1994 };
1995
1996 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1997 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1998 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1999 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2000 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2001 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2002 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2003 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2004 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2005 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2006 GTEST_TEMPLATE_ T31>
2007 struct Templates31 {
2008 typedef TemplateSel<T1> Head;
2009 typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2010 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2011 T29, T30, T31> Tail;
2012 };
2013
2014 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2015 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2016 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2017 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2018 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2019 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2020 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2021 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2022 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2023 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2024 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
2025 struct Templates32 {
2026 typedef TemplateSel<T1> Head;
2027 typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2028 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2029 T29, T30, T31, T32> Tail;
2030 };
2031
2032 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2033 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2034 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2035 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2036 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2037 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2038 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2039 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2040 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2041 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2042 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
2043 struct Templates33 {
2044 typedef TemplateSel<T1> Head;
2045 typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2046 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2047 T29, T30, T31, T32, T33> Tail;
2048 };
2049
2050 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2051 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2052 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2053 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2054 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2055 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2056 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2057 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2058 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2059 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2060 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2061 GTEST_TEMPLATE_ T34>
2062 struct Templates34 {
2063 typedef TemplateSel<T1> Head;
2064 typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2065 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2066 T29, T30, T31, T32, T33, T34> Tail;
2067 };
2068
2069 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2070 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2071 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2072 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2073 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2074 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2075 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2076 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2077 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2078 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2079 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2080 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
2081 struct Templates35 {
2082 typedef TemplateSel<T1> Head;
2083 typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2084 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2085 T29, T30, T31, T32, T33, T34, T35> Tail;
2086 };
2087
2088 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2089 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2090 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2091 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2092 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2093 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2094 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2095 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2096 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2097 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2098 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2099 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
2100 struct Templates36 {
2101 typedef TemplateSel<T1> Head;
2102 typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2103 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2104 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
2105 };
2106
2107 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2108 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2109 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2110 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2111 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2112 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2113 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2114 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2115 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2116 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2117 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2118 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2119 GTEST_TEMPLATE_ T37>
2120 struct Templates37 {
2121 typedef TemplateSel<T1> Head;
2122 typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2123 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2124 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
2125 };
2126
2127 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2128 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2129 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2130 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2131 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2132 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2133 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2134 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2135 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2136 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2137 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2138 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2139 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
2140 struct Templates38 {
2141 typedef TemplateSel<T1> Head;
2142 typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2143 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2144 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
2145 };
2146
2147 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2148 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2149 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2150 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2151 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2152 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2153 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2154 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2155 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2156 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2157 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2158 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2159 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
2160 struct Templates39 {
2161 typedef TemplateSel<T1> Head;
2162 typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2163 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2164 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
2165 };
2166
2167 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2168 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2169 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2170 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2171 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2172 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2173 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2174 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2175 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2176 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2177 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2178 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2179 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2180 GTEST_TEMPLATE_ T40>
2181 struct Templates40 {
2182 typedef TemplateSel<T1> Head;
2183 typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2184 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2185 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
2186 };
2187
2188 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2189 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2190 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2191 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2192 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2193 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2194 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2195 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2196 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2197 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2198 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2199 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2200 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2201 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
2202 struct Templates41 {
2203 typedef TemplateSel<T1> Head;
2204 typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2205 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2206 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
2207 };
2208
2209 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2210 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2211 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2212 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2213 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2214 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2215 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2216 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2217 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2218 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2219 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2220 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2221 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2222 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
2223 struct Templates42 {
2224 typedef TemplateSel<T1> Head;
2225 typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2226 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2227 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
2228 T42> Tail;
2229 };
2230
2231 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2232 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2233 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2234 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2235 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2236 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2237 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2238 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2239 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2240 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2241 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2242 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2243 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2244 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2245 GTEST_TEMPLATE_ T43>
2246 struct Templates43 {
2247 typedef TemplateSel<T1> Head;
2248 typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2249 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2250 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2251 T43> Tail;
2252 };
2253
2254 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2255 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2256 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2257 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2258 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2259 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2260 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2261 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2262 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2263 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2264 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2265 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2266 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2267 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2268 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
2269 struct Templates44 {
2270 typedef TemplateSel<T1> Head;
2271 typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2272 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2273 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2274 T43, T44> Tail;
2275 };
2276
2277 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2278 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2279 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2280 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2281 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2282 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2283 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2284 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2285 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2286 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2287 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2288 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2289 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2290 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2291 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
2292 struct Templates45 {
2293 typedef TemplateSel<T1> Head;
2294 typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2295 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2296 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2297 T43, T44, T45> Tail;
2298 };
2299
2300 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2301 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2302 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2303 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2304 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2305 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2306 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2307 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2308 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2309 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2310 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2311 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2312 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2313 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2314 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2315 GTEST_TEMPLATE_ T46>
2316 struct Templates46 {
2317 typedef TemplateSel<T1> Head;
2318 typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2319 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2320 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2321 T43, T44, T45, T46> Tail;
2322 };
2323
2324 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2325 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2326 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2327 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2328 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2329 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2330 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2331 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2332 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2333 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2334 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2335 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2336 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2337 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2338 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2339 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
2340 struct Templates47 {
2341 typedef TemplateSel<T1> Head;
2342 typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2343 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2344 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2345 T43, T44, T45, T46, T47> Tail;
2346 };
2347
2348 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2349 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2350 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2351 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2352 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2353 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2354 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2355 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2356 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2357 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2358 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2359 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2360 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2361 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2362 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2363 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
2364 struct Templates48 {
2365 typedef TemplateSel<T1> Head;
2366 typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2367 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2368 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2369 T43, T44, T45, T46, T47, T48> Tail;
2370 };
2371
2372 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2373 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2374 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2375 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2376 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2377 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2378 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2379 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2380 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2381 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2382 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2383 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2384 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2385 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2386 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2387 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
2388 GTEST_TEMPLATE_ T49>
2389 struct Templates49 {
2390 typedef TemplateSel<T1> Head;
2391 typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2392 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2393 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2394 T43, T44, T45, T46, T47, T48, T49> Tail;
2395 };
2396
2397 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2398 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2399 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2400 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2401 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2402 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2403 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2404 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2405 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2406 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2407 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2408 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2409 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2410 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2411 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2412 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
2413 GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
2414 struct Templates50 {
2415 typedef TemplateSel<T1> Head;
2416 typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2417 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2418 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2419 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
2420 };
2421
2422
2423 // We don't want to require the users to write TemplatesN<...> directly,
2424 // as that would require them to count the length. Templates<...> is much
2425 // easier to write, but generates horrible messages when there is a
2426 // compiler error, as gcc insists on printing out each template
2427 // argument, even if it has the default value (this means Templates<list>
2428 // will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
2429 // errors).
2430 //
2431 // Our solution is to combine the best part of the two approaches: a
2432 // user would write Templates<T1, ..., TN>, and Google Test will translate
2433 // that to TemplatesN<T1, ..., TN> internally to make error messages
2434 // readable. The translation is done by the 'type' member of the
2435 // Templates template.
2436 template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
2437 GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
2438 GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
2439 GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
2440 GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
2441 GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
2442 GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
2443 GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
2444 GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
2445 GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
2446 GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
2447 GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
2448 GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
2449 GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
2450 GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
2451 GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
2452 GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
2453 GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
2454 GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
2455 GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
2456 GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
2457 GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
2458 GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
2459 GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
2460 GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
2461 struct Templates {
2462 typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2463 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2464 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
2465 T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
2466 };
2467
2468 template <>
2469 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2470 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2471 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2472 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2473 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2474 NoneT> {
2475 typedef Templates0 type;
2476 };
2477 template <GTEST_TEMPLATE_ T1>
2478 struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2479 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2480 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2481 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2482 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2483 NoneT> {
2484 typedef Templates1<T1> type;
2485 };
2486 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
2487 struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2488 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2489 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2490 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2491 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2492 NoneT> {
2493 typedef Templates2<T1, T2> type;
2494 };
2495 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
2496 struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2497 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2498 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2499 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2500 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2501 typedef Templates3<T1, T2, T3> type;
2502 };
2503 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2504 GTEST_TEMPLATE_ T4>
2505 struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2506 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2507 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2508 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2509 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2510 typedef Templates4<T1, T2, T3, T4> type;
2511 };
2512 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2513 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
2514 struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2515 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2516 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2517 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2518 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2519 typedef Templates5<T1, T2, T3, T4, T5> type;
2520 };
2521 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2522 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
2523 struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
2524 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2525 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2526 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2527 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2528 typedef Templates6<T1, T2, T3, T4, T5, T6> type;
2529 };
2530 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2531 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2532 GTEST_TEMPLATE_ T7>
2533 struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
2534 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2535 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2536 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2537 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2538 typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
2539 };
2540 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2541 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2542 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
2543 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
2544 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2545 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2546 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2547 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2548 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
2549 };
2550 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2551 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2552 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
2553 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
2554 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2555 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2556 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2557 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2558 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
2559 };
2560 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2561 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2562 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2563 GTEST_TEMPLATE_ T10>
2564 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
2565 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2566 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2567 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2568 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2569 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
2570 };
2571 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2572 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2573 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2574 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
2575 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
2576 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2577 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2578 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2579 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2580 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
2581 };
2582 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2583 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2584 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2585 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
2586 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
2587 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2588 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2589 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2590 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2591 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
2592 };
2593 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2594 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2595 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2596 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2597 GTEST_TEMPLATE_ T13>
2598 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
2599 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2600 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2601 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2602 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2603 typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
2604 T13> type;
2605 };
2606 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2607 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2608 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2609 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2610 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
2611 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2612 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2613 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2614 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2615 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2616 typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2617 T14> type;
2618 };
2619 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2620 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2621 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2622 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2623 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
2624 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2625 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2626 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2627 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2628 NoneT, NoneT, NoneT, NoneT, NoneT> {
2629 typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2630 T14, T15> type;
2631 };
2632 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2633 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2634 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2635 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2636 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2637 GTEST_TEMPLATE_ T16>
2638 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2639 T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2640 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2641 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2642 NoneT, NoneT, NoneT, NoneT, NoneT> {
2643 typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2644 T14, T15, T16> type;
2645 };
2646 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2647 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2648 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2649 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2650 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2651 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
2652 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2653 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2654 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2655 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2656 NoneT, NoneT, NoneT, NoneT, NoneT> {
2657 typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2658 T14, T15, T16, T17> type;
2659 };
2660 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2661 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2662 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2663 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2664 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2665 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
2666 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2667 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2668 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2669 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2670 NoneT, NoneT, NoneT, NoneT> {
2671 typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2672 T14, T15, T16, T17, T18> type;
2673 };
2674 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2675 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2676 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2677 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2678 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2679 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2680 GTEST_TEMPLATE_ T19>
2681 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2682 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2683 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2684 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2685 NoneT, NoneT, NoneT, NoneT> {
2686 typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2687 T14, T15, T16, T17, T18, T19> type;
2688 };
2689 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2690 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2691 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2692 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2693 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2694 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2695 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
2696 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2697 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2698 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2699 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2700 NoneT, NoneT, NoneT, NoneT> {
2701 typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2702 T14, T15, T16, T17, T18, T19, T20> type;
2703 };
2704 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2705 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2706 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2707 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2708 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2709 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2710 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
2711 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2712 T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
2713 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2714 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2715 NoneT, NoneT, NoneT, NoneT> {
2716 typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2717 T14, T15, T16, T17, T18, T19, T20, T21> type;
2718 };
2719 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2720 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2721 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2722 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2723 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2724 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2725 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2726 GTEST_TEMPLATE_ T22>
2727 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2728 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
2729 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2730 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2731 NoneT, NoneT, NoneT> {
2732 typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2733 T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
2734 };
2735 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2736 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2737 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2738 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2739 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2740 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2741 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2742 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
2743 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2744 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
2745 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2746 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2747 NoneT, NoneT, NoneT> {
2748 typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2749 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
2750 };
2751 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2752 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2753 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2754 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2755 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2756 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2757 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2758 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
2759 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2760 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
2761 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2762 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2763 NoneT, NoneT, NoneT> {
2764 typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2765 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
2766 };
2767 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2768 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2769 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2770 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2771 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2772 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2773 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2774 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2775 GTEST_TEMPLATE_ T25>
2776 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2777 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
2778 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2779 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2780 NoneT, NoneT> {
2781 typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2782 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
2783 };
2784 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2785 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2786 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2787 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2788 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2789 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2790 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2791 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2792 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
2793 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2794 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
2795 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2796 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2797 NoneT, NoneT> {
2798 typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2799 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
2800 };
2801 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2802 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2803 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2804 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2805 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2806 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2807 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2808 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2809 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
2810 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2811 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
2812 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2813 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2814 NoneT, NoneT> {
2815 typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2816 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
2817 T27> type;
2818 };
2819 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2820 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2821 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2822 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2823 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2824 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2825 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2826 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2827 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2828 GTEST_TEMPLATE_ T28>
2829 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2830 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2831 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2832 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2833 NoneT, NoneT> {
2834 typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2835 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2836 T28> type;
2837 };
2838 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2839 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2840 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2841 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2842 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2843 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2844 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2845 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2846 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2847 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
2848 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2849 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2850 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2851 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2852 NoneT> {
2853 typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2854 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2855 T28, T29> type;
2856 };
2857 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2858 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2859 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2860 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2861 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2862 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2863 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2864 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2865 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2866 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
2867 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2868 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2869 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2870 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2871 typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2872 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2873 T28, T29, T30> type;
2874 };
2875 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2876 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2877 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2878 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2879 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2880 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2881 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2882 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2883 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2884 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2885 GTEST_TEMPLATE_ T31>
2886 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2887 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2888 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2889 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2890 typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2891 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2892 T28, T29, T30, T31> type;
2893 };
2894 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2895 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2896 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2897 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2898 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2899 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2900 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2901 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2902 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2903 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2904 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
2905 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2906 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2907 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2908 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2909 typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2910 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2911 T28, T29, T30, T31, T32> type;
2912 };
2913 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2914 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2915 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2916 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2917 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2918 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2919 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2920 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2921 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2922 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2923 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
2924 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2925 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2926 T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2927 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2928 typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2929 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2930 T28, T29, T30, T31, T32, T33> type;
2931 };
2932 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2933 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2934 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2935 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2936 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2937 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2938 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2939 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2940 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2941 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2942 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2943 GTEST_TEMPLATE_ T34>
2944 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2945 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2946 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2947 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2948 typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2949 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2950 T28, T29, T30, T31, T32, T33, T34> type;
2951 };
2952 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2953 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2954 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2955 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2956 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2957 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2958 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2959 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2960 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2961 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2962 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2963 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
2964 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2965 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2966 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2967 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2968 typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2969 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2970 T28, T29, T30, T31, T32, T33, T34, T35> type;
2971 };
2972 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2973 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2974 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2975 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2976 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2977 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2978 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2979 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2980 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2981 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2982 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2983 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
2984 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2985 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2986 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
2987 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2988 typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2989 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2990 T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
2991 };
2992 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2993 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2994 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2995 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2996 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2997 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2998 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2999 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3000 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3001 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3002 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3003 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3004 GTEST_TEMPLATE_ T37>
3005 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3006 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3007 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
3008 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3009 typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3010 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3011 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
3012 };
3013 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3014 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3015 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3016 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3017 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3018 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3019 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3020 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3021 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3022 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3023 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3024 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3025 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
3026 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3027 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3028 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
3029 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3030 typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3031 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3032 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
3033 };
3034 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3035 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3036 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3037 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3038 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3039 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3040 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3041 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3042 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3043 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3044 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3045 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3046 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
3047 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3048 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3049 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
3050 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3051 typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3052 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3053 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
3054 };
3055 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3056 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3057 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3058 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3059 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3060 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3061 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3062 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3063 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3064 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3065 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3066 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3067 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3068 GTEST_TEMPLATE_ T40>
3069 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3070 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3071 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
3072 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3073 typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3074 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3075 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
3076 };
3077 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3078 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3079 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3080 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3081 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3082 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3083 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3084 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3085 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3086 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3087 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3088 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3089 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3090 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
3091 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3092 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3093 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
3094 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3095 typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3096 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3097 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3098 T41> type;
3099 };
3100 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3101 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3102 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3103 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3104 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3105 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3106 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3107 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3108 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3109 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3110 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3111 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3112 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3113 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
3114 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3115 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3116 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
3117 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3118 typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3119 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3120 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3121 T42> type;
3122 };
3123 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3124 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3125 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3126 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3127 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3128 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3129 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3130 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3131 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3132 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3133 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3134 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3135 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3136 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3137 GTEST_TEMPLATE_ T43>
3138 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3139 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3140 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3141 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3142 typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3143 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3144 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3145 T42, T43> type;
3146 };
3147 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3148 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3149 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3150 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3151 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3152 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3153 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3154 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3155 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3156 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3157 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3158 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3159 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3160 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3161 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
3162 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3163 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3164 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3165 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3166 typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3167 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3168 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3169 T42, T43, T44> type;
3170 };
3171 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3172 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3173 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3174 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3175 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3176 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3177 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3178 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3179 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3180 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3181 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3182 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3183 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3184 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3185 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
3186 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3187 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3188 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3189 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
3190 typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3191 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3192 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3193 T42, T43, T44, T45> type;
3194 };
3195 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3196 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3197 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3198 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3199 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3200 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3201 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3202 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3203 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3204 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3205 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3206 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3207 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3208 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3209 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3210 GTEST_TEMPLATE_ T46>
3211 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3212 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3213 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3214 T45, T46, NoneT, NoneT, NoneT, NoneT> {
3215 typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3216 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3217 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3218 T42, T43, T44, T45, T46> type;
3219 };
3220 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3221 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3222 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3223 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3224 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3225 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3226 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3227 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3228 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3229 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3230 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3231 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3232 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3233 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3234 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3235 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
3236 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3237 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3238 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3239 T45, T46, T47, NoneT, NoneT, NoneT> {
3240 typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3241 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3242 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3243 T42, T43, T44, T45, T46, T47> type;
3244 };
3245 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3246 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3247 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3248 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3249 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3250 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3251 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3252 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3253 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3254 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3255 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3256 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3257 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3258 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3259 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3260 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
3261 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3262 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3263 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3264 T45, T46, T47, T48, NoneT, NoneT> {
3265 typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3266 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3267 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3268 T42, T43, T44, T45, T46, T47, T48> type;
3269 };
3270 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3271 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3272 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3273 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3274 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3275 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3276 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3277 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3278 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3279 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3280 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3281 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3282 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3283 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3284 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3285 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
3286 GTEST_TEMPLATE_ T49>
3287 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3288 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3289 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3290 T45, T46, T47, T48, T49, NoneT> {
3291 typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3292 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3293 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3294 T42, T43, T44, T45, T46, T47, T48, T49> type;
3295 };
3296
3297 // The TypeList template makes it possible to use either a single type
3298 // or a Types<...> list in TYPED_TEST_CASE() and
3299 // INSTANTIATE_TYPED_TEST_CASE_P().
3300
3301 template <typename T>
3302 struct TypeList {
3303 typedef Types1<T> type;
3304 };
3305
3306 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3307 typename T6, typename T7, typename T8, typename T9, typename T10,
3308 typename T11, typename T12, typename T13, typename T14, typename T15,
3309 typename T16, typename T17, typename T18, typename T19, typename T20,
3310 typename T21, typename T22, typename T23, typename T24, typename T25,
3311 typename T26, typename T27, typename T28, typename T29, typename T30,
3312 typename T31, typename T32, typename T33, typename T34, typename T35,
3313 typename T36, typename T37, typename T38, typename T39, typename T40,
3314 typename T41, typename T42, typename T43, typename T44, typename T45,
3315 typename T46, typename T47, typename T48, typename T49, typename T50>
3316 struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3317 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3318 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3319 T44, T45, T46, T47, T48, T49, T50> > {
3320 typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
3321 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
3322 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3323 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
3324 };
3325
3326 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3327
3328 } // namespace internal
3329 } // namespace testing
3330
3331 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_