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