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