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