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