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