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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:06:23