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