~mmach/netext73/mesa-ryzen

« back to all changes in this revision

Viewing changes to src/gtest/include/gtest/internal/gtest-type-util.h

  • Committer: mmach
  • Date: 2023-11-02 21:31:35 UTC
  • Revision ID: netbit73@gmail.com-20231102213135-18d4tzh7tj0uz752
2023-11-02 22:11:57

Show diffs side-by-side

added added

removed removed

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