157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// This file was GENERATED by command:
257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer//     pump.py gtest-type-util.h.pump
357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// DO NOT EDIT BY HAND!!!
47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2008 Google Inc.
67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All Rights Reserved.
77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without
97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are
107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met:
117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//     * Redistributions of source code must retain the above copyright
137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer.
147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//     * Redistributions in binary form must reproduce the above
157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer
167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the
177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution.
187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//     * Neither the name of Google Inc. nor the names of its
197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from
207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission.
217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Author: wan@google.com (Zhanyong Wan)
357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Type utilities needed for implementing typed and type-parameterized
377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Currently we support at most 50 types in a list, and at most 50
407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// type-parameterized tests in one type-parameterized test case.
417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Please contact googletestframework@googlegroups.com if you need
427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// more.
437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
47b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-port.h"
48b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-string.h"
497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
50190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
51190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// libstdc++ (which is where cxxabi.h comes from).
52b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# ifdef __GLIBCXX__
53b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#  include <cxxabi.h>
54b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# elif defined(__HP_aCC)
55b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#  include <acxx_demangle.h>
56b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# endif  // __GLIBCXX__
577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing {
597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal {
607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// GetTypeName<T>() returns a human-readable name of type T.
62b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// NB: This function is also used in Google Mock, so don't move it inside of
63b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// the typed-test-only section below.
647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T>
657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanString GetTypeName() {
66b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# if GTEST_HAS_RTTI
677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  const char* const name = typeid(T).name();
69b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#  if defined(__GLIBCXX__) || defined(__HP_aCC)
707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  int status = 0;
717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // gcc's implementation of typeid(T).name() mangles the type name,
727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // so we have to demangle it.
73b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#   ifdef __GLIBCXX__
74b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  using abi::__cxa_demangle;
75b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#   endif // __GLIBCXX__
76b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  char* const readable_name = __cxa_demangle(name, 0, 0, &status);
777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  const String name_str(status == 0 ? readable_name : name);
787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  free(readable_name);
797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  return name_str;
80b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#  else
817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  return name;
82b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#  endif  // __GLIBCXX__ || __HP_aCC
83b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
84b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# else
857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  return "<type>";
87b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
88b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# endif  // GTEST_HAS_RTTI
897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
91b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
92b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
93b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
94b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// type.  This can be used as a compile-time assertion to ensure that
95b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// two types are equal.
96b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
97b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadtemplate <typename T1, typename T2>
98b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadstruct AssertTypeEq;
99b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
100b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadtemplate <typename T>
101b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadstruct AssertTypeEq<T, T> {
102b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  typedef bool type;
103b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad};
104b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
1057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A unique type used as the default value for the arguments of class
1067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// template Types.  This allows us to simulate variadic templates
1077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
1087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// support directly.
1097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct None {};
1107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The following family of struct and struct templates are used to
1127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
1137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// represents a type list with N types (T1, T2, ..., and TN) in it.
1147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Except for Types0, every struct in the family has two member types:
1157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Head for the first type in the list, and Tail for the rest of the
1167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// list.
1177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The empty type list.
1197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types0 {};
1207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Type lists of length 1, 2, 3, and so on.
1227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1>
1247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types1 {
1257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types0 Tail;
1277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2>
1297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types2 {
1307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types1<T2> Tail;
1327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3>
1357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types3 {
1367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types2<T2, T3> Tail;
1387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4>
1417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types4 {
1427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types3<T2, T3, T4> Tail;
1447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
1477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types5 {
1487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types4<T2, T3, T4, T5> Tail;
1507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6>
1547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types6 {
1557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types5<T2, T3, T4, T5, T6> Tail;
1577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7>
1617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types7 {
1627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8>
1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types8 {
1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9>
1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types9 {
1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
1787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10>
1827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types10 {
1837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
1857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
1897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11>
1907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types11 {
1917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
1927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
1937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
1947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
1977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12>
1987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types12 {
1997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
2017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13>
2067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types13 {
2077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
2097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14>
2147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types14 {
2157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
2177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15>
2227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types15 {
2237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15> Tail;
2267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16>
2327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types16 {
2337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16> Tail;
2367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17>
2427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types17 {
2437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17> Tail;
2467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18>
2527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types18 {
2537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18> Tail;
2567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19>
2627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types19 {
2637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19> Tail;
2667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20>
2727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types20 {
2737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20> Tail;
2767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
2827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21>
2837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types21 {
2847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21> Tail;
2877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
2917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
2927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
2937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22>
2947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types22 {
2957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
2967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22> Tail;
2987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
2997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23>
3057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types23 {
3067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23> Tail;
3097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24>
3167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types24 {
3177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
3207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25>
3277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types25 {
3287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
3317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
3387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26>
3397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types26 {
3407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
3437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
3507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27>
3517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types27 {
3527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
3557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
3627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28>
3637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types28 {
3647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
3677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
3747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29>
3757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types29 {
3767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29> Tail;
3807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
3877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30>
3887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types30 {
3897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
3907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30> Tail;
3937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
3947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
3977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
3987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
3997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31>
4027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types31 {
4037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31> Tail;
4077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32>
4167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types32 {
4177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32> Tail;
4217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33>
4307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types33 {
4317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33> Tail;
4357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34>
4447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types34 {
4457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34> Tail;
4497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35>
4587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types35 {
4597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35> Tail;
4637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
4727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36>
4737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types36 {
4747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36> Tail;
4787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
4857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
4867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
4877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37>
4887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types37 {
4897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
4907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37> Tail;
4937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
4947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
4957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
4977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
4987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
4997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38>
5037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types38 {
5047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
5087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39>
5187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types39 {
5197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
5237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40>
5337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types40 {
5347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
5487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41>
5497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types41 {
5507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
5647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42>
5657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types42 {
5667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
5707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
5807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43>
5817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types43 {
5827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
5837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43> Tail;
5877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
5887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
5897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
5917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
5927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
5937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
5947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
5957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
5967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
5977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44>
5987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types44 {
5997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44> Tail;
6047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
6117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
6127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
6137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
6147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45>
6157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types45 {
6167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45> Tail;
6217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
6287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
6297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
6307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
6317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
6327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46>
6337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types46 {
6347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45, T46> Tail;
6397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
6467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
6477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
6487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
6497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
6507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47>
6517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types47 {
6527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45, T46, T47> Tail;
6577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
6647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
6657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
6667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
6677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
6687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48>
6697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types48 {
6707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45, T46, T47, T48> Tail;
6757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
6827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
6837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
6847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
6857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
6867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48, typename T49>
6877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types49 {
6887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
6897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45, T46, T47, T48, T49> Tail;
6937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
6947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
6957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
6977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
6987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
6997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
7007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
7017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
7027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
7037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
7047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48, typename T49, typename T50>
7057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types50 {
7067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef T1 Head;
7077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
7087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
7107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T44, T45, T46, T47, T48, T49, T50> Tail;
7117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
7127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
7137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
7147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}  // namespace internal
7157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
7167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// We don't want to require the users to write TypesN<...> directly,
7177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as that would require them to count the length.  Types<...> is much
7187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// easier to write, but generates horrible messages when there is a
7197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// compiler error, as gcc insists on printing out each template
7207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// argument, even if it has the default value (this means Types<int>
7217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// will appear as Types<int, None, None, ..., None> in the compiler
7227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// errors).
7237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
7247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Our solution is to combine the best part of the two approaches: a
7257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// user would write Types<T1, ..., TN>, and Google Test will translate
7267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// that to TypesN<T1, ..., TN> internally to make error messages
7277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// readable.  The translation is done by the 'type' member of the
7287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Types template.
7297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1 = internal::None, typename T2 = internal::None,
7307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T3 = internal::None, typename T4 = internal::None,
7317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T5 = internal::None, typename T6 = internal::None,
7327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T7 = internal::None, typename T8 = internal::None,
7337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T9 = internal::None, typename T10 = internal::None,
7347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11 = internal::None, typename T12 = internal::None,
7357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T13 = internal::None, typename T14 = internal::None,
7367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T15 = internal::None, typename T16 = internal::None,
7377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T17 = internal::None, typename T18 = internal::None,
7387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T19 = internal::None, typename T20 = internal::None,
7397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21 = internal::None, typename T22 = internal::None,
7407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T23 = internal::None, typename T24 = internal::None,
7417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T25 = internal::None, typename T26 = internal::None,
7427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T27 = internal::None, typename T28 = internal::None,
7437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T29 = internal::None, typename T30 = internal::None,
7447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31 = internal::None, typename T32 = internal::None,
7457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T33 = internal::None, typename T34 = internal::None,
7467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T35 = internal::None, typename T36 = internal::None,
7477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T37 = internal::None, typename T38 = internal::None,
7487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T39 = internal::None, typename T40 = internal::None,
7497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41 = internal::None, typename T42 = internal::None,
7507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T43 = internal::None, typename T44 = internal::None,
7517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T45 = internal::None, typename T46 = internal::None,
7527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T47 = internal::None, typename T48 = internal::None,
7537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T49 = internal::None, typename T50 = internal::None>
7547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types {
7557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
7567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
7577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
7587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
7597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
7607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
7617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <>
7627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<internal::None, internal::None, internal::None, internal::None,
7637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
7757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types0 type;
7767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
7777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1>
7787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, internal::None, internal::None, internal::None,
7797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
7917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types1<T1> type;
7927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
7937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2>
7947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, internal::None, internal::None, internal::None,
7957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
7997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
8077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types2<T1, T2> type;
8087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3>
8107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, internal::None, internal::None, internal::None,
8117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
8227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types3<T1, T2, T3> type;
8237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4>
8257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
8267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
8377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types4<T1, T2, T3, T4> type;
8387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
8407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
8417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
8527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types5<T1, T2, T3, T4, T5> type;
8537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6>
8567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
8577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
8687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
8697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7>
8727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
8737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
8847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
8857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
8867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8>
8887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
8897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
8987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
8997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
9007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9>
9037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
9047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
9147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
9157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10>
9187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
9197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
9297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
9307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
9337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11>
9347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
9357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
9457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
9467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
9497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12>
9507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
9517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
9617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
9627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T12> type;
9637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
9667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13>
9677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
9687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
9787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
9797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13> type;
9807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
9837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14>
9847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
9857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
9937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
9947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
9957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14> type;
9967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
9977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
9997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15>
10007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
10107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15> type;
10127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16>
10177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, internal::None, internal::None, internal::None, internal::None,
10197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
10277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16> type;
10297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17>
10347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, internal::None, internal::None, internal::None, internal::None,
10367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
10447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17> type;
10467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18>
10517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, internal::None, internal::None, internal::None,
10537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
10617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18> type;
10637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19>
10687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, internal::None, internal::None, internal::None,
10707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
10777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19> type;
10797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20>
10847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
10867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
10927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
10937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20> type;
10957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
10967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
10987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
10997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21>
11017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, internal::None, internal::None,
11037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
11107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
11127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
11157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
11167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22>
11187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
11207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
11277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
11297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
11327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
11337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23>
11357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
11377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
11447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
11467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
11497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
11507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24>
11527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
11547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
11617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
11637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
11667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
11677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25>
11697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
11717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
11777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
11797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
11827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
11837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
11847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
11857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26>
11867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
11887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
11937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
11947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
11967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T26> type;
11977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
11987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27>
12047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
12067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
12127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27> type;
12157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
12167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28>
12227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
12247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
12307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28> type;
12337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
12347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29>
12407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
12427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
12487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29> type;
12517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
12527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30>
12587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
12657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30> type;
12687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
12697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
12757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31>
12767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, internal::None, internal::None, internal::None, internal::None,
12797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
12837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31> type;
12867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
12877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
12897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
12907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
12917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
12927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
12937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32>
12947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, internal::None, internal::None, internal::None, internal::None,
12977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
12997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
13017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32> type;
13047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
13117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33>
13127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, internal::None, internal::None, internal::None,
13157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
13197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33> type;
13227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
13297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34>
13307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, internal::None, internal::None, internal::None,
13337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
13377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34> type;
13407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
13477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35>
13487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
13517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
13547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
13577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
13647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
13657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36>
13667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, internal::None, internal::None,
13697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
13727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
13757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
13827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
13837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37>
13847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
13877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
13897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
13907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
13937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
13947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
13967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
13977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
13987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
13997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38>
14027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
14057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
14087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
14117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
14127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
14147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
14157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
14167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
14177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39>
14207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
14237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
14267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
14297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
14307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
14327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
14337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
14347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
14357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40>
14387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
14417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
14447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
14477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T40> type;
14487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
14497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
14517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
14527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
14537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
14547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
14577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41>
14587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
14617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None> {
14637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
14667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41> type;
14677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
14687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
14707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
14717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
14727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
14737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
14767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42>
14777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
14807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
14817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
14827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
14857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42> type;
14867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
14877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
14897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
14907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
14917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
14927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
14937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
14947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
14957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43>
14967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
14997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
15007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None> {
15017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43> type;
15057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
15067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
15087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
15097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
15107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
15117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
15127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
15137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
15147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44>
15157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
15187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
15197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None> {
15207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44> type;
15247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
15257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
15277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
15287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
15297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
15307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
15317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
15327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
15337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45>
15347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None, internal::None, internal::None, internal::None,
15387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    internal::None> {
15397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45> type;
15437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
15447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
15467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
15477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
15487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
15497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
15507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
15517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
15527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
15537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46>
15547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T46, internal::None, internal::None, internal::None, internal::None> {
15587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46> type;
15627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
15637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
15657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
15667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
15677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
15687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
15697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
15707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
15717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
15727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47>
15737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T46, T47, internal::None, internal::None, internal::None> {
15777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46, T47> type;
15817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
15827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
15847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
15857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
15867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
15877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
15887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
15897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
15907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
15917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48>
15927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T46, T47, T48, internal::None, internal::None> {
15967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46, T47, T48> type;
16007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
16027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
16037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
16047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
16057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
16067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
16077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
16087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
16097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
16107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48, typename T49>
16117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
16127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
16137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
16147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T46, T47, T48, T49, internal::None> {
16157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
16167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
16177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
16187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
16197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal {
16227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1623b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define GTEST_TEMPLATE_ template <typename T> class
16247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The template "selector" struct TemplateSel<Tmpl> is used to
16267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// represent Tmpl, which must be a class template with one type
16277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
16287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as the type Tmpl<T>.  This allows us to actually instantiate the
16297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// template "selected" by TemplateSel<Tmpl>.
16307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
16317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This trick is necessary for simulating typedef for class templates,
16327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// which C++ doesn't support directly.
16337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ Tmpl>
16347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct TemplateSel {
16357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  template <typename T>
16367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  struct Bind {
16377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typedef Tmpl<T> type;
16387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  };
16397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1641b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define GTEST_BIND_(TmplSel, T) \
16427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  TmplSel::template Bind<T>::type
16437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A unique struct template used as the default value for the
16457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// arguments of class template Templates.  This allows us to simulate
16467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// variadic templates (e.g. Templates<int>, Templates<int, double>,
16477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// and etc), which C++ doesn't support directly.
16487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T>
16497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct NoneT {};
16507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The following family of struct and struct templates are used to
16527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// represent template lists.  In particular, TemplatesN<T1, T2, ...,
16537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TN> represents a list of N templates (T1, T2, ..., and TN).  Except
16547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// for Templates0, every struct in the family has two member types:
16557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Head for the selector of the first template in the list, and Tail
16567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// for the rest of the list.
16577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The empty template list.
16597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates0 {};
16607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Template lists of length 1, 2, 3, and so on.
16627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1>
16647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates1 {
16657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates0 Tail;
16677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
16697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates2 {
16707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates1<T2> Tail;
16727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
16757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates3 {
16767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates2<T2, T3> Tail;
16787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4>
16827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates4 {
16837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates3<T2, T3, T4> Tail;
16857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
16897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates5 {
16907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates4<T2, T3, T4, T5> Tail;
16927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
16937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
16947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
16967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates6 {
16977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
16987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates5<T2, T3, T4, T5, T6> Tail;
16997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7>
17047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates7 {
17057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
17077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
17127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates8 {
17137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
17157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
17207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates9 {
17217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
17237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10>
17297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates10 {
17307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
17327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
17387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates11 {
17397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
17417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
17477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates12 {
17487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
17507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13>
17577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates13 {
17587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
17607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
17677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates14 {
17687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
17707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14> Tail;
17717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
17787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates15 {
17797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
17817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15> Tail;
17827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
17897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16>
17907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates16 {
17917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
17927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
17937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16> Tail;
17947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
17957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
17967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
18027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates17 {
18037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17> Tail;
18067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
18147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates18 {
18157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18> Tail;
18187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19>
18277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates19 {
18287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19> Tail;
18317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
18407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates20 {
18417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20> Tail;
18447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
18537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates21 {
18547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21> Tail;
18577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22>
18677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates22 {
18687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22> Tail;
18717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
18817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates23 {
18827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
18857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
18867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
18877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
18957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates24 {
18967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
18977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
18997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25>
19107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates25 {
19117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
19147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
19257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates26 {
19267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
19297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
19407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates27 {
19417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
19447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28>
19567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates28 {
19577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
19607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28> Tail;
19617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
19737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates29 {
19747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
19777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29> Tail;
19787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
19907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates30 {
19917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
19927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
19947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30> Tail;
19957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
19967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
19977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31>
20087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates31 {
20097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
20107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31> Tail;
20137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
20147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
20157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
20267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates32 {
20277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
20287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32> Tail;
20317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
20327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
20337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
20447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates33 {
20457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
20467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33> Tail;
20497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
20507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
20517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
20627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34>
20637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates34 {
20647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
20657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34> Tail;
20687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
20697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
20707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
20817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
20827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates35 {
20837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
20847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35> Tail;
20877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
20887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
20897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
21017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates36 {
21027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
21037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36> Tail;
21067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
21077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
21087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37>
21217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates37 {
21227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
21237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
21267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
21277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
21287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
21417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates38 {
21427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
21437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
21467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
21477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
21487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
21617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates39 {
21627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
21637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
21667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
21677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
21687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
21817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40>
21827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates40 {
21837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
21847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
21877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
21887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
21897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
22037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates41 {
22047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
22057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
22087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
22097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
22107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
22247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates42 {
22257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
22267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
22297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42> Tail;
22307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
22317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
22327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43>
22477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates43 {
22487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
22497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43> Tail;
22537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
22547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
22557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
22707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates44 {
22717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
22727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44> Tail;
22767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
22777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
22787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
22937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates45 {
22947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
22957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45> Tail;
22997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
23007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
23017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46>
23177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates46 {
23187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
23197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45, T46> Tail;
23237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
23247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
23257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
23417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates47 {
23427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
23437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45, T46, T47> Tail;
23477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
23487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
23497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
23657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates48 {
23667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
23677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45, T46, T47, T48> Tail;
23717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
23727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
23737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
23897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T49>
23907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates49 {
23917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
23927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45, T46, T47, T48, T49> Tail;
23967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
23977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
23987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
24007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
24017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
24027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
24037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
24047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
24057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
24067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
24077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
24087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
24097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
24107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
24117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
24127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
24137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
24147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
24157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates50 {
24167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef TemplateSel<T1> Head;
24177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
24187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
24197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
24207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T43, T44, T45, T46, T47, T48, T49, T50> Tail;
24217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
24227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
24237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
24247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// We don't want to require the users to write TemplatesN<...> directly,
24257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as that would require them to count the length.  Templates<...> is much
24267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// easier to write, but generates horrible messages when there is a
24277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// compiler error, as gcc insists on printing out each template
24287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// argument, even if it has the default value (this means Templates<list>
24297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
24307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// errors).
24317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman//
24327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Our solution is to combine the best part of the two approaches: a
24337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// user would write Templates<T1, ..., TN>, and Google Test will translate
24347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// that to TemplatesN<T1, ..., TN> internally to make error messages
24357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// readable.  The translation is done by the 'type' member of the
24367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Templates template.
24377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
24387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
24397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
24407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
24417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
24427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
24437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
24447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
24457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
24467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
24477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
24487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
24497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
24507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
24517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
24527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
24537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
24547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
24557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
24567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
24577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
24587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
24597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
24607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
24617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
24627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates {
24637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
24647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
24657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
24667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
24677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
24687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
24697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <>
24707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT> {
24767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates0 type;
24777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
24787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1>
24797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT> {
24857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates1<T1> type;
24867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
24877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
24887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT> {
24947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates2<T1, T2> type;
24957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
24967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
24977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates3<T1, T2, T3> type;
25037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4>
25067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates4<T1, T2, T3, T4> type;
25127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
25157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates5<T1, T2, T3, T4, T5> type;
25217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
25247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
25257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates6<T1, T2, T3, T4, T5, T6> type;
25307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7>
25347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
25357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
25407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
25447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
25457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
25507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
25547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
25557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
25607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10>
25657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
25667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
25717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
25767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
25777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
25827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
25877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
25887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
25937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
25947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
25987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13>
25997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
26007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
26047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
26057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13> type;
26067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
26127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
26177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14> type;
26197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
26257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT> {
26307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15> type;
26327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16>
26397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT> {
26447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16> type;
26467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
26537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT> {
26587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17> type;
26607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
26677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT> {
26727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18> type;
26747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
26817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19>
26827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT> {
26877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19> type;
26897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
26907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
26967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
26977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT> {
27027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20> type;
27047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
27127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
27147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT> {
27177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21> type;
27197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22>
27287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
27307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT> {
27337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
27357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
27447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
27467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT> {
27497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
27517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
27607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
27627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT> {
27657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
27677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
27767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25>
27777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
27797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT> {
27827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
27847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
27857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
27937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
27947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
27967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT> {
27997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
28017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
28117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
28137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT> {
28167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
28187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27> type;
28197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28>
28307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
28327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT> {
28357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28> type;
28387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
28497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT> {
28547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29> type;
28577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
28687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
28727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30> type;
28757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
28867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31>
28877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
28917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31> type;
28947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
28957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
29067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32> type;
29137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
29147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
29257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33> type;
29327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
29337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34>
29457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34> type;
29527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
29537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
29657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35> type;
29727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
29737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
29857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
29887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
29927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
29937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37>
30067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
30097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
30137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
30147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
30277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
30307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
30347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
30357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
30487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
30517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
30557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
30567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
30697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40>
30707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
30737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
30777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
30787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
30917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
30927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
30957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
30997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41> type;
31007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
31017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
31157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
31187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42> type;
31237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
31247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43>
31397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
31427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43> type;
31477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
31487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
31637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
31667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44> type;
31717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
31727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
31877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
31907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
31917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45> type;
31957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
31967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46>
32127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T45, T46, NoneT, NoneT, NoneT, NoneT> {
32167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45, T46> type;
32207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
32217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
32377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T45, T46, T47, NoneT, NoneT, NoneT> {
32417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45, T46, T47> type;
32457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
32467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
32627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T45, T46, T47, T48, NoneT, NoneT> {
32667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45, T46, T47, T48> type;
32707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
32717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
32877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    GTEST_TEMPLATE_ T49>
32887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T45, T46, T47, T48, T49, NoneT> {
32927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T42, T43, T44, T45, T46, T47, T48, T49> type;
32967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
32977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
32987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The TypeList template makes it possible to use either a single type
32997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// or a Types<...> list in TYPED_TEST_CASE() and
33007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INSTANTIATE_TYPED_TEST_CASE_P().
33017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
33027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T>
33037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct TypeList { typedef Types1<T> type; };
33047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
33057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
33067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T6, typename T7, typename T8, typename T9, typename T10,
33077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T11, typename T12, typename T13, typename T14, typename T15,
33087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T16, typename T17, typename T18, typename T19, typename T20,
33097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T21, typename T22, typename T23, typename T24, typename T25,
33107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T26, typename T27, typename T28, typename T29, typename T30,
33117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T31, typename T32, typename T33, typename T34, typename T35,
33127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T36, typename T37, typename T38, typename T39, typename T40,
33137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T41, typename T42, typename T43, typename T44, typename T45,
33147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    typename T46, typename T47, typename T48, typename T49, typename T50>
33157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstruct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
33167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
33177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
33187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    T44, T45, T46, T47, T48, T49, T50> > {
33197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
33207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
33217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
33227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
33237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman};
33247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
3325b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3326b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
33277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}  // namespace internal
33287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}  // namespace testing
33297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
33307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3331