11b362b15af34006e6a11974088a46d42b903418eJohann// This file was GENERATED by command:
21b362b15af34006e6a11974088a46d42b903418eJohann//     pump.py gtest-type-util.h.pump
31b362b15af34006e6a11974088a46d42b903418eJohann// DO NOT EDIT BY HAND!!!
41b362b15af34006e6a11974088a46d42b903418eJohann
51b362b15af34006e6a11974088a46d42b903418eJohann// Copyright 2008 Google Inc.
61b362b15af34006e6a11974088a46d42b903418eJohann// All Rights Reserved.
71b362b15af34006e6a11974088a46d42b903418eJohann//
81b362b15af34006e6a11974088a46d42b903418eJohann// Redistribution and use in source and binary forms, with or without
91b362b15af34006e6a11974088a46d42b903418eJohann// modification, are permitted provided that the following conditions are
101b362b15af34006e6a11974088a46d42b903418eJohann// met:
111b362b15af34006e6a11974088a46d42b903418eJohann//
121b362b15af34006e6a11974088a46d42b903418eJohann//     * Redistributions of source code must retain the above copyright
131b362b15af34006e6a11974088a46d42b903418eJohann// notice, this list of conditions and the following disclaimer.
141b362b15af34006e6a11974088a46d42b903418eJohann//     * Redistributions in binary form must reproduce the above
151b362b15af34006e6a11974088a46d42b903418eJohann// copyright notice, this list of conditions and the following disclaimer
161b362b15af34006e6a11974088a46d42b903418eJohann// in the documentation and/or other materials provided with the
171b362b15af34006e6a11974088a46d42b903418eJohann// distribution.
181b362b15af34006e6a11974088a46d42b903418eJohann//     * Neither the name of Google Inc. nor the names of its
191b362b15af34006e6a11974088a46d42b903418eJohann// contributors may be used to endorse or promote products derived from
201b362b15af34006e6a11974088a46d42b903418eJohann// this software without specific prior written permission.
211b362b15af34006e6a11974088a46d42b903418eJohann//
221b362b15af34006e6a11974088a46d42b903418eJohann// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
231b362b15af34006e6a11974088a46d42b903418eJohann// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
241b362b15af34006e6a11974088a46d42b903418eJohann// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
251b362b15af34006e6a11974088a46d42b903418eJohann// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
261b362b15af34006e6a11974088a46d42b903418eJohann// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
271b362b15af34006e6a11974088a46d42b903418eJohann// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
281b362b15af34006e6a11974088a46d42b903418eJohann// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
291b362b15af34006e6a11974088a46d42b903418eJohann// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
301b362b15af34006e6a11974088a46d42b903418eJohann// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
311b362b15af34006e6a11974088a46d42b903418eJohann// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
321b362b15af34006e6a11974088a46d42b903418eJohann// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
331b362b15af34006e6a11974088a46d42b903418eJohann//
341b362b15af34006e6a11974088a46d42b903418eJohann// Author: wan@google.com (Zhanyong Wan)
351b362b15af34006e6a11974088a46d42b903418eJohann
361b362b15af34006e6a11974088a46d42b903418eJohann// Type utilities needed for implementing typed and type-parameterized
371b362b15af34006e6a11974088a46d42b903418eJohann// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
381b362b15af34006e6a11974088a46d42b903418eJohann//
391b362b15af34006e6a11974088a46d42b903418eJohann// Currently we support at most 50 types in a list, and at most 50
401b362b15af34006e6a11974088a46d42b903418eJohann// type-parameterized tests in one type-parameterized test case.
411b362b15af34006e6a11974088a46d42b903418eJohann// Please contact googletestframework@googlegroups.com if you need
421b362b15af34006e6a11974088a46d42b903418eJohann// more.
431b362b15af34006e6a11974088a46d42b903418eJohann
441b362b15af34006e6a11974088a46d42b903418eJohann#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
451b362b15af34006e6a11974088a46d42b903418eJohann#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
461b362b15af34006e6a11974088a46d42b903418eJohann
471b362b15af34006e6a11974088a46d42b903418eJohann#include "gtest/internal/gtest-port.h"
481b362b15af34006e6a11974088a46d42b903418eJohann#include "gtest/internal/gtest-string.h"
491b362b15af34006e6a11974088a46d42b903418eJohann
501b362b15af34006e6a11974088a46d42b903418eJohann// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
511b362b15af34006e6a11974088a46d42b903418eJohann// libstdc++ (which is where cxxabi.h comes from).
521b362b15af34006e6a11974088a46d42b903418eJohann# ifdef __GLIBCXX__
531b362b15af34006e6a11974088a46d42b903418eJohann#  include <cxxabi.h>
541b362b15af34006e6a11974088a46d42b903418eJohann# elif defined(__HP_aCC)
551b362b15af34006e6a11974088a46d42b903418eJohann#  include <acxx_demangle.h>
561b362b15af34006e6a11974088a46d42b903418eJohann# endif  // __GLIBCXX__
571b362b15af34006e6a11974088a46d42b903418eJohann
581b362b15af34006e6a11974088a46d42b903418eJohannnamespace testing {
591b362b15af34006e6a11974088a46d42b903418eJohannnamespace internal {
601b362b15af34006e6a11974088a46d42b903418eJohann
611b362b15af34006e6a11974088a46d42b903418eJohann// GetTypeName<T>() returns a human-readable name of type T.
621b362b15af34006e6a11974088a46d42b903418eJohann// NB: This function is also used in Google Mock, so don't move it inside of
631b362b15af34006e6a11974088a46d42b903418eJohann// the typed-test-only section below.
641b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T>
651b362b15af34006e6a11974088a46d42b903418eJohannString GetTypeName() {
661b362b15af34006e6a11974088a46d42b903418eJohann# if GTEST_HAS_RTTI
671b362b15af34006e6a11974088a46d42b903418eJohann
681b362b15af34006e6a11974088a46d42b903418eJohann  const char* const name = typeid(T).name();
691b362b15af34006e6a11974088a46d42b903418eJohann#  if defined(__GLIBCXX__) || defined(__HP_aCC)
701b362b15af34006e6a11974088a46d42b903418eJohann  int status = 0;
711b362b15af34006e6a11974088a46d42b903418eJohann  // gcc's implementation of typeid(T).name() mangles the type name,
721b362b15af34006e6a11974088a46d42b903418eJohann  // so we have to demangle it.
731b362b15af34006e6a11974088a46d42b903418eJohann#   ifdef __GLIBCXX__
741b362b15af34006e6a11974088a46d42b903418eJohann  using abi::__cxa_demangle;
751b362b15af34006e6a11974088a46d42b903418eJohann#   endif // __GLIBCXX__
761b362b15af34006e6a11974088a46d42b903418eJohann  char* const readable_name = __cxa_demangle(name, 0, 0, &status);
771b362b15af34006e6a11974088a46d42b903418eJohann  const String name_str(status == 0 ? readable_name : name);
781b362b15af34006e6a11974088a46d42b903418eJohann  free(readable_name);
791b362b15af34006e6a11974088a46d42b903418eJohann  return name_str;
801b362b15af34006e6a11974088a46d42b903418eJohann#  else
811b362b15af34006e6a11974088a46d42b903418eJohann  return name;
821b362b15af34006e6a11974088a46d42b903418eJohann#  endif  // __GLIBCXX__ || __HP_aCC
831b362b15af34006e6a11974088a46d42b903418eJohann
841b362b15af34006e6a11974088a46d42b903418eJohann# else
851b362b15af34006e6a11974088a46d42b903418eJohann
861b362b15af34006e6a11974088a46d42b903418eJohann  return "<type>";
871b362b15af34006e6a11974088a46d42b903418eJohann
881b362b15af34006e6a11974088a46d42b903418eJohann# endif  // GTEST_HAS_RTTI
891b362b15af34006e6a11974088a46d42b903418eJohann}
901b362b15af34006e6a11974088a46d42b903418eJohann
911b362b15af34006e6a11974088a46d42b903418eJohann#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
921b362b15af34006e6a11974088a46d42b903418eJohann
931b362b15af34006e6a11974088a46d42b903418eJohann// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
941b362b15af34006e6a11974088a46d42b903418eJohann// type.  This can be used as a compile-time assertion to ensure that
951b362b15af34006e6a11974088a46d42b903418eJohann// two types are equal.
961b362b15af34006e6a11974088a46d42b903418eJohann
971b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2>
981b362b15af34006e6a11974088a46d42b903418eJohannstruct AssertTypeEq;
991b362b15af34006e6a11974088a46d42b903418eJohann
1001b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T>
1011b362b15af34006e6a11974088a46d42b903418eJohannstruct AssertTypeEq<T, T> {
1021b362b15af34006e6a11974088a46d42b903418eJohann  typedef bool type;
1031b362b15af34006e6a11974088a46d42b903418eJohann};
1041b362b15af34006e6a11974088a46d42b903418eJohann
1051b362b15af34006e6a11974088a46d42b903418eJohann// A unique type used as the default value for the arguments of class
1061b362b15af34006e6a11974088a46d42b903418eJohann// template Types.  This allows us to simulate variadic templates
1071b362b15af34006e6a11974088a46d42b903418eJohann// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
1081b362b15af34006e6a11974088a46d42b903418eJohann// support directly.
1091b362b15af34006e6a11974088a46d42b903418eJohannstruct None {};
1101b362b15af34006e6a11974088a46d42b903418eJohann
1111b362b15af34006e6a11974088a46d42b903418eJohann// The following family of struct and struct templates are used to
1121b362b15af34006e6a11974088a46d42b903418eJohann// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
1131b362b15af34006e6a11974088a46d42b903418eJohann// represents a type list with N types (T1, T2, ..., and TN) in it.
1141b362b15af34006e6a11974088a46d42b903418eJohann// Except for Types0, every struct in the family has two member types:
1151b362b15af34006e6a11974088a46d42b903418eJohann// Head for the first type in the list, and Tail for the rest of the
1161b362b15af34006e6a11974088a46d42b903418eJohann// list.
1171b362b15af34006e6a11974088a46d42b903418eJohann
1181b362b15af34006e6a11974088a46d42b903418eJohann// The empty type list.
1191b362b15af34006e6a11974088a46d42b903418eJohannstruct Types0 {};
1201b362b15af34006e6a11974088a46d42b903418eJohann
1211b362b15af34006e6a11974088a46d42b903418eJohann// Type lists of length 1, 2, 3, and so on.
1221b362b15af34006e6a11974088a46d42b903418eJohann
1231b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1>
1241b362b15af34006e6a11974088a46d42b903418eJohannstruct Types1 {
1251b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1261b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types0 Tail;
1271b362b15af34006e6a11974088a46d42b903418eJohann};
1281b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2>
1291b362b15af34006e6a11974088a46d42b903418eJohannstruct Types2 {
1301b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1311b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types1<T2> Tail;
1321b362b15af34006e6a11974088a46d42b903418eJohann};
1331b362b15af34006e6a11974088a46d42b903418eJohann
1341b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3>
1351b362b15af34006e6a11974088a46d42b903418eJohannstruct Types3 {
1361b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1371b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types2<T2, T3> Tail;
1381b362b15af34006e6a11974088a46d42b903418eJohann};
1391b362b15af34006e6a11974088a46d42b903418eJohann
1401b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4>
1411b362b15af34006e6a11974088a46d42b903418eJohannstruct Types4 {
1421b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1431b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types3<T2, T3, T4> Tail;
1441b362b15af34006e6a11974088a46d42b903418eJohann};
1451b362b15af34006e6a11974088a46d42b903418eJohann
1461b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
1471b362b15af34006e6a11974088a46d42b903418eJohannstruct Types5 {
1481b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types4<T2, T3, T4, T5> Tail;
1501b362b15af34006e6a11974088a46d42b903418eJohann};
1511b362b15af34006e6a11974088a46d42b903418eJohann
1521b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1531b362b15af34006e6a11974088a46d42b903418eJohann    typename T6>
1541b362b15af34006e6a11974088a46d42b903418eJohannstruct Types6 {
1551b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1561b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types5<T2, T3, T4, T5, T6> Tail;
1571b362b15af34006e6a11974088a46d42b903418eJohann};
1581b362b15af34006e6a11974088a46d42b903418eJohann
1591b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1601b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7>
1611b362b15af34006e6a11974088a46d42b903418eJohannstruct Types7 {
1621b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1631b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
1641b362b15af34006e6a11974088a46d42b903418eJohann};
1651b362b15af34006e6a11974088a46d42b903418eJohann
1661b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1671b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8>
1681b362b15af34006e6a11974088a46d42b903418eJohannstruct Types8 {
1691b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1701b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
1711b362b15af34006e6a11974088a46d42b903418eJohann};
1721b362b15af34006e6a11974088a46d42b903418eJohann
1731b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1741b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9>
1751b362b15af34006e6a11974088a46d42b903418eJohannstruct Types9 {
1761b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1771b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
1781b362b15af34006e6a11974088a46d42b903418eJohann};
1791b362b15af34006e6a11974088a46d42b903418eJohann
1801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1811b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10>
1821b362b15af34006e6a11974088a46d42b903418eJohannstruct Types10 {
1831b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1841b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
1851b362b15af34006e6a11974088a46d42b903418eJohann};
1861b362b15af34006e6a11974088a46d42b903418eJohann
1871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1881b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
1891b362b15af34006e6a11974088a46d42b903418eJohann    typename T11>
1901b362b15af34006e6a11974088a46d42b903418eJohannstruct Types11 {
1911b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
1921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
1931b362b15af34006e6a11974088a46d42b903418eJohann};
1941b362b15af34006e6a11974088a46d42b903418eJohann
1951b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1961b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
1971b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12>
1981b362b15af34006e6a11974088a46d42b903418eJohannstruct Types12 {
1991b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2001b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
2011b362b15af34006e6a11974088a46d42b903418eJohann};
2021b362b15af34006e6a11974088a46d42b903418eJohann
2031b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2041b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2051b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13>
2061b362b15af34006e6a11974088a46d42b903418eJohannstruct Types13 {
2071b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2081b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
2091b362b15af34006e6a11974088a46d42b903418eJohann};
2101b362b15af34006e6a11974088a46d42b903418eJohann
2111b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2121b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2131b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14>
2141b362b15af34006e6a11974088a46d42b903418eJohannstruct Types14 {
2151b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2161b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
2171b362b15af34006e6a11974088a46d42b903418eJohann};
2181b362b15af34006e6a11974088a46d42b903418eJohann
2191b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2201b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2211b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15>
2221b362b15af34006e6a11974088a46d42b903418eJohannstruct Types15 {
2231b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2241b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2251b362b15af34006e6a11974088a46d42b903418eJohann      T15> Tail;
2261b362b15af34006e6a11974088a46d42b903418eJohann};
2271b362b15af34006e6a11974088a46d42b903418eJohann
2281b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2291b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2301b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2311b362b15af34006e6a11974088a46d42b903418eJohann    typename T16>
2321b362b15af34006e6a11974088a46d42b903418eJohannstruct Types16 {
2331b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2341b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2351b362b15af34006e6a11974088a46d42b903418eJohann      T16> Tail;
2361b362b15af34006e6a11974088a46d42b903418eJohann};
2371b362b15af34006e6a11974088a46d42b903418eJohann
2381b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2391b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2401b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2411b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17>
2421b362b15af34006e6a11974088a46d42b903418eJohannstruct Types17 {
2431b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2441b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2451b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17> Tail;
2461b362b15af34006e6a11974088a46d42b903418eJohann};
2471b362b15af34006e6a11974088a46d42b903418eJohann
2481b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2491b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2501b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2511b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18>
2521b362b15af34006e6a11974088a46d42b903418eJohannstruct Types18 {
2531b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2541b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2551b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18> Tail;
2561b362b15af34006e6a11974088a46d42b903418eJohann};
2571b362b15af34006e6a11974088a46d42b903418eJohann
2581b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2591b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2601b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2611b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19>
2621b362b15af34006e6a11974088a46d42b903418eJohannstruct Types19 {
2631b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2641b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2651b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19> Tail;
2661b362b15af34006e6a11974088a46d42b903418eJohann};
2671b362b15af34006e6a11974088a46d42b903418eJohann
2681b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2691b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2701b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2711b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20>
2721b362b15af34006e6a11974088a46d42b903418eJohannstruct Types20 {
2731b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2741b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2751b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20> Tail;
2761b362b15af34006e6a11974088a46d42b903418eJohann};
2771b362b15af34006e6a11974088a46d42b903418eJohann
2781b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2791b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2801b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2811b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
2821b362b15af34006e6a11974088a46d42b903418eJohann    typename T21>
2831b362b15af34006e6a11974088a46d42b903418eJohannstruct Types21 {
2841b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2851b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2861b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21> Tail;
2871b362b15af34006e6a11974088a46d42b903418eJohann};
2881b362b15af34006e6a11974088a46d42b903418eJohann
2891b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2901b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
2911b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
2921b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
2931b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22>
2941b362b15af34006e6a11974088a46d42b903418eJohannstruct Types22 {
2951b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
2961b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
2971b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22> Tail;
2981b362b15af34006e6a11974088a46d42b903418eJohann};
2991b362b15af34006e6a11974088a46d42b903418eJohann
3001b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3011b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3021b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3031b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3041b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23>
3051b362b15af34006e6a11974088a46d42b903418eJohannstruct Types23 {
3061b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3071b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3081b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23> Tail;
3091b362b15af34006e6a11974088a46d42b903418eJohann};
3101b362b15af34006e6a11974088a46d42b903418eJohann
3111b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3121b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3131b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3141b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3151b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24>
3161b362b15af34006e6a11974088a46d42b903418eJohannstruct Types24 {
3171b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3181b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3191b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
3201b362b15af34006e6a11974088a46d42b903418eJohann};
3211b362b15af34006e6a11974088a46d42b903418eJohann
3221b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3231b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3241b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3251b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3261b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25>
3271b362b15af34006e6a11974088a46d42b903418eJohannstruct Types25 {
3281b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3291b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3301b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
3311b362b15af34006e6a11974088a46d42b903418eJohann};
3321b362b15af34006e6a11974088a46d42b903418eJohann
3331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3341b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3351b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3361b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3371b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
3381b362b15af34006e6a11974088a46d42b903418eJohann    typename T26>
3391b362b15af34006e6a11974088a46d42b903418eJohannstruct Types26 {
3401b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3411b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3421b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
3431b362b15af34006e6a11974088a46d42b903418eJohann};
3441b362b15af34006e6a11974088a46d42b903418eJohann
3451b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3461b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3471b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3481b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3491b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
3501b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27>
3511b362b15af34006e6a11974088a46d42b903418eJohannstruct Types27 {
3521b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3531b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3541b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
3551b362b15af34006e6a11974088a46d42b903418eJohann};
3561b362b15af34006e6a11974088a46d42b903418eJohann
3571b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3581b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3591b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3601b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3611b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
3621b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28>
3631b362b15af34006e6a11974088a46d42b903418eJohannstruct Types28 {
3641b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3651b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3661b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
3671b362b15af34006e6a11974088a46d42b903418eJohann};
3681b362b15af34006e6a11974088a46d42b903418eJohann
3691b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3701b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3711b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3721b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3731b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
3741b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29>
3751b362b15af34006e6a11974088a46d42b903418eJohannstruct Types29 {
3761b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3771b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3781b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3791b362b15af34006e6a11974088a46d42b903418eJohann      T29> Tail;
3801b362b15af34006e6a11974088a46d42b903418eJohann};
3811b362b15af34006e6a11974088a46d42b903418eJohann
3821b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3831b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3841b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3851b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3861b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
3871b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30>
3881b362b15af34006e6a11974088a46d42b903418eJohannstruct Types30 {
3891b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
3901b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3911b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3921b362b15af34006e6a11974088a46d42b903418eJohann      T30> Tail;
3931b362b15af34006e6a11974088a46d42b903418eJohann};
3941b362b15af34006e6a11974088a46d42b903418eJohann
3951b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3961b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
3971b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
3981b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
3991b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4001b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4011b362b15af34006e6a11974088a46d42b903418eJohann    typename T31>
4021b362b15af34006e6a11974088a46d42b903418eJohannstruct Types31 {
4031b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4041b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4051b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4061b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31> Tail;
4071b362b15af34006e6a11974088a46d42b903418eJohann};
4081b362b15af34006e6a11974088a46d42b903418eJohann
4091b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4101b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4111b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4121b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4131b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4141b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4151b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32>
4161b362b15af34006e6a11974088a46d42b903418eJohannstruct Types32 {
4171b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4181b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4191b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4201b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32> Tail;
4211b362b15af34006e6a11974088a46d42b903418eJohann};
4221b362b15af34006e6a11974088a46d42b903418eJohann
4231b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4241b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4251b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4261b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4271b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4281b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4291b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33>
4301b362b15af34006e6a11974088a46d42b903418eJohannstruct Types33 {
4311b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4321b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4331b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4341b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33> Tail;
4351b362b15af34006e6a11974088a46d42b903418eJohann};
4361b362b15af34006e6a11974088a46d42b903418eJohann
4371b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4381b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4391b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4401b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4411b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4421b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4431b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34>
4441b362b15af34006e6a11974088a46d42b903418eJohannstruct Types34 {
4451b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4461b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4471b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4481b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34> Tail;
4491b362b15af34006e6a11974088a46d42b903418eJohann};
4501b362b15af34006e6a11974088a46d42b903418eJohann
4511b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4521b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4531b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4541b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4551b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4561b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4571b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35>
4581b362b15af34006e6a11974088a46d42b903418eJohannstruct Types35 {
4591b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4601b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4611b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4621b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35> Tail;
4631b362b15af34006e6a11974088a46d42b903418eJohann};
4641b362b15af34006e6a11974088a46d42b903418eJohann
4651b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4661b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4671b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4681b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4691b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4701b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4711b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
4721b362b15af34006e6a11974088a46d42b903418eJohann    typename T36>
4731b362b15af34006e6a11974088a46d42b903418eJohannstruct Types36 {
4741b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4751b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4761b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4771b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36> Tail;
4781b362b15af34006e6a11974088a46d42b903418eJohann};
4791b362b15af34006e6a11974088a46d42b903418eJohann
4801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4811b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4821b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4831b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4841b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
4851b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
4861b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
4871b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37>
4881b362b15af34006e6a11974088a46d42b903418eJohannstruct Types37 {
4891b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
4901b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4911b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4921b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37> Tail;
4931b362b15af34006e6a11974088a46d42b903418eJohann};
4941b362b15af34006e6a11974088a46d42b903418eJohann
4951b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4961b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
4971b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
4981b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
4991b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5001b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5011b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5021b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38>
5031b362b15af34006e6a11974088a46d42b903418eJohannstruct Types38 {
5041b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5051b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5061b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5071b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
5081b362b15af34006e6a11974088a46d42b903418eJohann};
5091b362b15af34006e6a11974088a46d42b903418eJohann
5101b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5111b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5121b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5131b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5141b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5151b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5161b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5171b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39>
5181b362b15af34006e6a11974088a46d42b903418eJohannstruct Types39 {
5191b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5201b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5211b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5221b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
5231b362b15af34006e6a11974088a46d42b903418eJohann};
5241b362b15af34006e6a11974088a46d42b903418eJohann
5251b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5261b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5271b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5281b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5291b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5301b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5311b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5321b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40>
5331b362b15af34006e6a11974088a46d42b903418eJohannstruct Types40 {
5341b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5351b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5361b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5371b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5381b362b15af34006e6a11974088a46d42b903418eJohann};
5391b362b15af34006e6a11974088a46d42b903418eJohann
5401b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5411b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5421b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5431b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5441b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5451b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5461b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5471b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
5481b362b15af34006e6a11974088a46d42b903418eJohann    typename T41>
5491b362b15af34006e6a11974088a46d42b903418eJohannstruct Types41 {
5501b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5511b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5521b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5531b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5541b362b15af34006e6a11974088a46d42b903418eJohann};
5551b362b15af34006e6a11974088a46d42b903418eJohann
5561b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5571b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5581b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5591b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5601b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5611b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5621b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5631b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
5641b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42>
5651b362b15af34006e6a11974088a46d42b903418eJohannstruct Types42 {
5661b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5671b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5681b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5691b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
5701b362b15af34006e6a11974088a46d42b903418eJohann};
5711b362b15af34006e6a11974088a46d42b903418eJohann
5721b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5731b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5741b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5751b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5761b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5771b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5781b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5791b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
5801b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43>
5811b362b15af34006e6a11974088a46d42b903418eJohannstruct Types43 {
5821b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
5831b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5841b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5851b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5861b362b15af34006e6a11974088a46d42b903418eJohann      T43> Tail;
5871b362b15af34006e6a11974088a46d42b903418eJohann};
5881b362b15af34006e6a11974088a46d42b903418eJohann
5891b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
5901b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
5911b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
5921b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
5931b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
5941b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
5951b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
5961b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
5971b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44>
5981b362b15af34006e6a11974088a46d42b903418eJohannstruct Types44 {
5991b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6001b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6011b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6021b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6031b362b15af34006e6a11974088a46d42b903418eJohann      T44> Tail;
6041b362b15af34006e6a11974088a46d42b903418eJohann};
6051b362b15af34006e6a11974088a46d42b903418eJohann
6061b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6071b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6081b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6091b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6101b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
6111b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
6121b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
6131b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
6141b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45>
6151b362b15af34006e6a11974088a46d42b903418eJohannstruct Types45 {
6161b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6171b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6181b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6191b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6201b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45> Tail;
6211b362b15af34006e6a11974088a46d42b903418eJohann};
6221b362b15af34006e6a11974088a46d42b903418eJohann
6231b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6241b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6251b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6261b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6271b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
6281b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
6291b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
6301b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
6311b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
6321b362b15af34006e6a11974088a46d42b903418eJohann    typename T46>
6331b362b15af34006e6a11974088a46d42b903418eJohannstruct Types46 {
6341b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6351b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6361b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6371b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6381b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45, T46> Tail;
6391b362b15af34006e6a11974088a46d42b903418eJohann};
6401b362b15af34006e6a11974088a46d42b903418eJohann
6411b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6421b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6431b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6441b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6451b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
6461b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
6471b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
6481b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
6491b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
6501b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47>
6511b362b15af34006e6a11974088a46d42b903418eJohannstruct Types47 {
6521b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6531b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6541b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6551b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6561b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45, T46, T47> Tail;
6571b362b15af34006e6a11974088a46d42b903418eJohann};
6581b362b15af34006e6a11974088a46d42b903418eJohann
6591b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6601b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6611b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6621b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6631b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
6641b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
6651b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
6661b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
6671b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
6681b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48>
6691b362b15af34006e6a11974088a46d42b903418eJohannstruct Types48 {
6701b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6711b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6721b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6731b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6741b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45, T46, T47, T48> Tail;
6751b362b15af34006e6a11974088a46d42b903418eJohann};
6761b362b15af34006e6a11974088a46d42b903418eJohann
6771b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6781b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6791b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6801b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6811b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
6821b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
6831b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
6841b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
6851b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
6861b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48, typename T49>
6871b362b15af34006e6a11974088a46d42b903418eJohannstruct Types49 {
6881b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
6891b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6901b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6911b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6921b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45, T46, T47, T48, T49> Tail;
6931b362b15af34006e6a11974088a46d42b903418eJohann};
6941b362b15af34006e6a11974088a46d42b903418eJohann
6951b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
6961b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
6971b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
6981b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
6991b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
7001b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
7011b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
7021b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
7031b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
7041b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48, typename T49, typename T50>
7051b362b15af34006e6a11974088a46d42b903418eJohannstruct Types50 {
7061b362b15af34006e6a11974088a46d42b903418eJohann  typedef T1 Head;
7071b362b15af34006e6a11974088a46d42b903418eJohann  typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
7081b362b15af34006e6a11974088a46d42b903418eJohann      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7091b362b15af34006e6a11974088a46d42b903418eJohann      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
7101b362b15af34006e6a11974088a46d42b903418eJohann      T44, T45, T46, T47, T48, T49, T50> Tail;
7111b362b15af34006e6a11974088a46d42b903418eJohann};
7121b362b15af34006e6a11974088a46d42b903418eJohann
7131b362b15af34006e6a11974088a46d42b903418eJohann
7141b362b15af34006e6a11974088a46d42b903418eJohann}  // namespace internal
7151b362b15af34006e6a11974088a46d42b903418eJohann
7161b362b15af34006e6a11974088a46d42b903418eJohann// We don't want to require the users to write TypesN<...> directly,
7171b362b15af34006e6a11974088a46d42b903418eJohann// as that would require them to count the length.  Types<...> is much
7181b362b15af34006e6a11974088a46d42b903418eJohann// easier to write, but generates horrible messages when there is a
7191b362b15af34006e6a11974088a46d42b903418eJohann// compiler error, as gcc insists on printing out each template
7201b362b15af34006e6a11974088a46d42b903418eJohann// argument, even if it has the default value (this means Types<int>
7211b362b15af34006e6a11974088a46d42b903418eJohann// will appear as Types<int, None, None, ..., None> in the compiler
7221b362b15af34006e6a11974088a46d42b903418eJohann// errors).
7231b362b15af34006e6a11974088a46d42b903418eJohann//
7241b362b15af34006e6a11974088a46d42b903418eJohann// Our solution is to combine the best part of the two approaches: a
7251b362b15af34006e6a11974088a46d42b903418eJohann// user would write Types<T1, ..., TN>, and Google Test will translate
7261b362b15af34006e6a11974088a46d42b903418eJohann// that to TypesN<T1, ..., TN> internally to make error messages
7271b362b15af34006e6a11974088a46d42b903418eJohann// readable.  The translation is done by the 'type' member of the
7281b362b15af34006e6a11974088a46d42b903418eJohann// Types template.
7291b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1 = internal::None, typename T2 = internal::None,
7301b362b15af34006e6a11974088a46d42b903418eJohann    typename T3 = internal::None, typename T4 = internal::None,
7311b362b15af34006e6a11974088a46d42b903418eJohann    typename T5 = internal::None, typename T6 = internal::None,
7321b362b15af34006e6a11974088a46d42b903418eJohann    typename T7 = internal::None, typename T8 = internal::None,
7331b362b15af34006e6a11974088a46d42b903418eJohann    typename T9 = internal::None, typename T10 = internal::None,
7341b362b15af34006e6a11974088a46d42b903418eJohann    typename T11 = internal::None, typename T12 = internal::None,
7351b362b15af34006e6a11974088a46d42b903418eJohann    typename T13 = internal::None, typename T14 = internal::None,
7361b362b15af34006e6a11974088a46d42b903418eJohann    typename T15 = internal::None, typename T16 = internal::None,
7371b362b15af34006e6a11974088a46d42b903418eJohann    typename T17 = internal::None, typename T18 = internal::None,
7381b362b15af34006e6a11974088a46d42b903418eJohann    typename T19 = internal::None, typename T20 = internal::None,
7391b362b15af34006e6a11974088a46d42b903418eJohann    typename T21 = internal::None, typename T22 = internal::None,
7401b362b15af34006e6a11974088a46d42b903418eJohann    typename T23 = internal::None, typename T24 = internal::None,
7411b362b15af34006e6a11974088a46d42b903418eJohann    typename T25 = internal::None, typename T26 = internal::None,
7421b362b15af34006e6a11974088a46d42b903418eJohann    typename T27 = internal::None, typename T28 = internal::None,
7431b362b15af34006e6a11974088a46d42b903418eJohann    typename T29 = internal::None, typename T30 = internal::None,
7441b362b15af34006e6a11974088a46d42b903418eJohann    typename T31 = internal::None, typename T32 = internal::None,
7451b362b15af34006e6a11974088a46d42b903418eJohann    typename T33 = internal::None, typename T34 = internal::None,
7461b362b15af34006e6a11974088a46d42b903418eJohann    typename T35 = internal::None, typename T36 = internal::None,
7471b362b15af34006e6a11974088a46d42b903418eJohann    typename T37 = internal::None, typename T38 = internal::None,
7481b362b15af34006e6a11974088a46d42b903418eJohann    typename T39 = internal::None, typename T40 = internal::None,
7491b362b15af34006e6a11974088a46d42b903418eJohann    typename T41 = internal::None, typename T42 = internal::None,
7501b362b15af34006e6a11974088a46d42b903418eJohann    typename T43 = internal::None, typename T44 = internal::None,
7511b362b15af34006e6a11974088a46d42b903418eJohann    typename T45 = internal::None, typename T46 = internal::None,
7521b362b15af34006e6a11974088a46d42b903418eJohann    typename T47 = internal::None, typename T48 = internal::None,
7531b362b15af34006e6a11974088a46d42b903418eJohann    typename T49 = internal::None, typename T50 = internal::None>
7541b362b15af34006e6a11974088a46d42b903418eJohannstruct Types {
7551b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
7561b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
7571b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
7581b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
7591b362b15af34006e6a11974088a46d42b903418eJohann};
7601b362b15af34006e6a11974088a46d42b903418eJohann
7611b362b15af34006e6a11974088a46d42b903418eJohanntemplate <>
7621b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<internal::None, internal::None, internal::None, internal::None,
7631b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7641b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7651b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7661b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7671b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7681b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7691b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7701b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7711b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7721b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7731b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7741b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
7751b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types0 type;
7761b362b15af34006e6a11974088a46d42b903418eJohann};
7771b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1>
7781b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, internal::None, internal::None, internal::None,
7791b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7801b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7811b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7821b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7831b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7841b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7851b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7861b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7871b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7881b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7901b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
7911b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types1<T1> type;
7921b362b15af34006e6a11974088a46d42b903418eJohann};
7931b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2>
7941b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, internal::None, internal::None, internal::None,
7951b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7961b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7971b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7981b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
7991b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8001b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8011b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8021b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8031b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8041b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8051b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
8071b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types2<T1, T2> type;
8081b362b15af34006e6a11974088a46d42b903418eJohann};
8091b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3>
8101b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, internal::None, internal::None, internal::None,
8111b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8121b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8131b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8141b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8151b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8161b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8171b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8181b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8191b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8201b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8211b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
8221b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types3<T1, T2, T3> type;
8231b362b15af34006e6a11974088a46d42b903418eJohann};
8241b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4>
8251b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
8261b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8271b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8281b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8291b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8301b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8311b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8321b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8331b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8341b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8351b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8361b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
8371b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types4<T1, T2, T3, T4> type;
8381b362b15af34006e6a11974088a46d42b903418eJohann};
8391b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
8401b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
8411b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8441b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8451b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8461b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8471b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8481b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8491b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8501b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8511b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
8521b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types5<T1, T2, T3, T4, T5> type;
8531b362b15af34006e6a11974088a46d42b903418eJohann};
8541b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8551b362b15af34006e6a11974088a46d42b903418eJohann    typename T6>
8561b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
8571b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8581b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8591b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8601b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8611b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8621b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8631b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8641b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8651b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8661b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8671b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
8681b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
8691b362b15af34006e6a11974088a46d42b903418eJohann};
8701b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8711b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7>
8721b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
8731b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8741b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8751b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8761b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8771b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8781b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8791b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8801b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8811b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8821b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8831b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
8841b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
8851b362b15af34006e6a11974088a46d42b903418eJohann};
8861b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
8871b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8>
8881b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
8891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8901b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8911b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8921b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8931b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8941b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8951b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8961b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8971b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
8981b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
8991b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
9001b362b15af34006e6a11974088a46d42b903418eJohann};
9011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9021b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9>
9031b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
9041b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9051b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9071b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9081b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9091b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9101b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9111b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9121b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9131b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
9141b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
9151b362b15af34006e6a11974088a46d42b903418eJohann};
9161b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9171b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10>
9181b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
9191b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9201b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9211b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9221b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9231b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9241b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9251b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9261b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9271b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9281b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
9291b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
9301b362b15af34006e6a11974088a46d42b903418eJohann};
9311b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9321b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
9331b362b15af34006e6a11974088a46d42b903418eJohann    typename T11>
9341b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
9351b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9361b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9371b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9381b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9391b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9401b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9411b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9441b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
9451b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
9461b362b15af34006e6a11974088a46d42b903418eJohann};
9471b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9481b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
9491b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12>
9501b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
9511b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9521b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9531b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9541b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9551b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9561b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9571b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9581b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9591b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9601b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
9611b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
9621b362b15af34006e6a11974088a46d42b903418eJohann      T12> type;
9631b362b15af34006e6a11974088a46d42b903418eJohann};
9641b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9651b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
9661b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13>
9671b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
9681b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9691b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9701b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9711b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9721b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9731b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9741b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9751b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9761b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9771b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
9781b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
9791b362b15af34006e6a11974088a46d42b903418eJohann      T13> type;
9801b362b15af34006e6a11974088a46d42b903418eJohann};
9811b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9821b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
9831b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14>
9841b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
9851b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9861b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9871b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9881b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9901b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9911b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9921b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
9931b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
9941b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
9951b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14> type;
9961b362b15af34006e6a11974088a46d42b903418eJohann};
9971b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
9981b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
9991b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15>
10001b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10011b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10021b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10031b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10041b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10051b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10071b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10081b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10091b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
10101b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10111b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15> type;
10121b362b15af34006e6a11974088a46d42b903418eJohann};
10131b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10141b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10151b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10161b362b15af34006e6a11974088a46d42b903418eJohann    typename T16>
10171b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10181b362b15af34006e6a11974088a46d42b903418eJohann    T16, internal::None, internal::None, internal::None, internal::None,
10191b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10201b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10211b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10221b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10231b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10241b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10251b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10261b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
10271b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10281b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16> type;
10291b362b15af34006e6a11974088a46d42b903418eJohann};
10301b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10311b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10321b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10331b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17>
10341b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10351b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, internal::None, internal::None, internal::None, internal::None,
10361b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10371b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10381b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10391b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10401b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10411b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
10441b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10451b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17> type;
10461b362b15af34006e6a11974088a46d42b903418eJohann};
10471b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10481b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10491b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10501b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18>
10511b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10521b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, internal::None, internal::None, internal::None,
10531b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10541b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10551b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10561b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10571b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10581b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10591b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10601b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
10611b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10621b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18> type;
10631b362b15af34006e6a11974088a46d42b903418eJohann};
10641b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10651b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10661b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10671b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19>
10681b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10691b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, internal::None, internal::None, internal::None,
10701b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10711b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10721b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10731b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10741b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10751b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10761b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
10771b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10781b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19> type;
10791b362b15af34006e6a11974088a46d42b903418eJohann};
10801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10811b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10821b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10831b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20>
10841b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
10851b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
10861b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10871b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10881b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10901b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10911b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
10921b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
10931b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
10941b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20> type;
10951b362b15af34006e6a11974088a46d42b903418eJohann};
10961b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
10971b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
10981b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
10991b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11001b362b15af34006e6a11974088a46d42b903418eJohann    typename T21>
11011b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11021b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, internal::None, internal::None,
11031b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11041b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11051b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11071b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11081b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11091b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
11101b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11111b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
11121b362b15af34006e6a11974088a46d42b903418eJohann};
11131b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11141b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
11151b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
11161b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11171b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22>
11181b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11191b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
11201b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11211b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11221b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11231b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11241b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11251b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11261b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
11271b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11281b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
11291b362b15af34006e6a11974088a46d42b903418eJohann};
11301b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11311b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
11321b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
11331b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11341b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23>
11351b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11361b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
11371b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11381b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11391b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11401b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11411b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
11441b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11451b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
11461b362b15af34006e6a11974088a46d42b903418eJohann};
11471b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11481b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
11491b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
11501b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11511b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24>
11521b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11531b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
11541b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11551b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11561b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11571b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11581b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11591b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11601b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
11611b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11621b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
11631b362b15af34006e6a11974088a46d42b903418eJohann};
11641b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11651b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
11661b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
11671b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11681b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25>
11691b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11701b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
11711b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11721b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11731b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11741b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11751b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11761b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
11771b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11781b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
11791b362b15af34006e6a11974088a46d42b903418eJohann};
11801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11811b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
11821b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
11831b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
11841b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
11851b362b15af34006e6a11974088a46d42b903418eJohann    typename T26>
11861b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
11871b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
11881b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11901b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11911b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11921b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
11931b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
11941b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
11951b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
11961b362b15af34006e6a11974088a46d42b903418eJohann      T26> type;
11971b362b15af34006e6a11974088a46d42b903418eJohann};
11981b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
11991b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12001b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12011b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12021b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12031b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27>
12041b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12051b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
12061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12071b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12081b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12091b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12101b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12111b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
12121b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12131b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12141b362b15af34006e6a11974088a46d42b903418eJohann      T27> type;
12151b362b15af34006e6a11974088a46d42b903418eJohann};
12161b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12171b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12181b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12191b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12201b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12211b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28>
12221b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12231b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
12241b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12251b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12261b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12271b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12281b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12291b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
12301b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12311b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12321b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28> type;
12331b362b15af34006e6a11974088a46d42b903418eJohann};
12341b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12351b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12361b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12371b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12381b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12391b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29>
12401b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12411b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
12421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12441b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12451b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12461b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12471b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
12481b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12491b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12501b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29> type;
12511b362b15af34006e6a11974088a46d42b903418eJohann};
12521b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12531b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12541b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12551b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12561b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12571b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30>
12581b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12591b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12601b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12611b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12621b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12631b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12641b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
12651b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12661b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12671b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30> type;
12681b362b15af34006e6a11974088a46d42b903418eJohann};
12691b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12701b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12711b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12721b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12731b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12741b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
12751b362b15af34006e6a11974088a46d42b903418eJohann    typename T31>
12761b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12771b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12781b362b15af34006e6a11974088a46d42b903418eJohann    T31, internal::None, internal::None, internal::None, internal::None,
12791b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12801b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12811b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12821b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
12831b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
12841b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
12851b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31> type;
12861b362b15af34006e6a11974088a46d42b903418eJohann};
12871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
12881b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
12891b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
12901b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
12911b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
12921b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
12931b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32>
12941b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
12951b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
12961b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, internal::None, internal::None, internal::None, internal::None,
12971b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12981b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
12991b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13001b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
13011b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13021b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13031b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32> type;
13041b362b15af34006e6a11974088a46d42b903418eJohann};
13051b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13061b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13071b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13081b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13091b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13101b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
13111b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33>
13121b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13131b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13141b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, internal::None, internal::None, internal::None,
13151b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13161b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13171b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13181b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
13191b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13201b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13211b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33> type;
13221b362b15af34006e6a11974088a46d42b903418eJohann};
13231b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13241b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13251b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13261b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13271b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13281b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
13291b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34>
13301b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13311b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13321b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, internal::None, internal::None, internal::None,
13331b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13341b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13351b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13361b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
13371b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13381b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13391b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34> type;
13401b362b15af34006e6a11974088a46d42b903418eJohann};
13411b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13421b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13431b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13441b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13451b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13461b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
13471b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35>
13481b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13491b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13501b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
13511b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13521b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13531b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
13541b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13551b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13561b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
13571b362b15af34006e6a11974088a46d42b903418eJohann};
13581b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13591b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13601b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13611b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13621b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13631b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
13641b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
13651b362b15af34006e6a11974088a46d42b903418eJohann    typename T36>
13661b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13671b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13681b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, internal::None, internal::None,
13691b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13701b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13711b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
13721b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13731b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13741b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
13751b362b15af34006e6a11974088a46d42b903418eJohann};
13761b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13771b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13781b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13791b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13801b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13811b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
13821b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
13831b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37>
13841b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
13851b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
13861b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
13871b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13881b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
13891b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
13901b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
13911b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
13921b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
13931b362b15af34006e6a11974088a46d42b903418eJohann};
13941b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
13951b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
13961b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
13971b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
13981b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
13991b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14001b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14011b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38>
14021b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14031b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14041b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
14051b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14061b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14071b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
14081b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14091b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14101b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
14111b362b15af34006e6a11974088a46d42b903418eJohann};
14121b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14131b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
14141b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
14151b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
14161b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
14171b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14181b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14191b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39>
14201b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14211b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14221b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
14231b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14241b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14251b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
14261b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14271b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14281b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
14291b362b15af34006e6a11974088a46d42b903418eJohann};
14301b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14311b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
14321b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
14331b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
14341b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
14351b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14361b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14371b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40>
14381b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14391b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14401b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
14411b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14421b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14431b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
14441b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14451b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14461b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
14471b362b15af34006e6a11974088a46d42b903418eJohann      T40> type;
14481b362b15af34006e6a11974088a46d42b903418eJohann};
14491b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14501b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
14511b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
14521b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
14531b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
14541b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14551b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14561b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
14571b362b15af34006e6a11974088a46d42b903418eJohann    typename T41>
14581b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14591b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14601b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
14611b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14621b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None> {
14631b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14641b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14651b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
14661b362b15af34006e6a11974088a46d42b903418eJohann      T41> type;
14671b362b15af34006e6a11974088a46d42b903418eJohann};
14681b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14691b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
14701b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
14711b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
14721b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
14731b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14741b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14751b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
14761b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42>
14771b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14781b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14791b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
14801b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
14811b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
14821b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
14831b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
14841b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
14851b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42> type;
14861b362b15af34006e6a11974088a46d42b903418eJohann};
14871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
14881b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
14891b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
14901b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
14911b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
14921b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
14931b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
14941b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
14951b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43>
14961b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
14971b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
14981b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
14991b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
15001b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None> {
15011b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15021b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15031b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15041b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43> type;
15051b362b15af34006e6a11974088a46d42b903418eJohann};
15061b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15071b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
15081b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
15091b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
15101b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
15111b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
15121b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
15131b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
15141b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44>
15151b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15161b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15171b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
15181b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
15191b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None> {
15201b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15211b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15221b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15231b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44> type;
15241b362b15af34006e6a11974088a46d42b903418eJohann};
15251b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15261b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
15271b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
15281b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
15291b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
15301b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
15311b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
15321b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
15331b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45>
15341b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15351b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15361b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15371b362b15af34006e6a11974088a46d42b903418eJohann    internal::None, internal::None, internal::None, internal::None,
15381b362b15af34006e6a11974088a46d42b903418eJohann    internal::None> {
15391b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15401b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15411b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15421b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45> type;
15431b362b15af34006e6a11974088a46d42b903418eJohann};
15441b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15451b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
15461b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
15471b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
15481b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
15491b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
15501b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
15511b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
15521b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
15531b362b15af34006e6a11974088a46d42b903418eJohann    typename T46>
15541b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15551b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15561b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15571b362b15af34006e6a11974088a46d42b903418eJohann    T46, internal::None, internal::None, internal::None, internal::None> {
15581b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15591b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15601b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15611b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46> type;
15621b362b15af34006e6a11974088a46d42b903418eJohann};
15631b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15641b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
15651b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
15661b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
15671b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
15681b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
15691b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
15701b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
15711b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
15721b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47>
15731b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15741b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15751b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15761b362b15af34006e6a11974088a46d42b903418eJohann    T46, T47, internal::None, internal::None, internal::None> {
15771b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15781b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15791b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15801b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46, T47> type;
15811b362b15af34006e6a11974088a46d42b903418eJohann};
15821b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
15831b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
15841b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
15851b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
15861b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
15871b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
15881b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
15891b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
15901b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
15911b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48>
15921b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
15931b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
15941b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
15951b362b15af34006e6a11974088a46d42b903418eJohann    T46, T47, T48, internal::None, internal::None> {
15961b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15971b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15981b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
15991b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46, T47, T48> type;
16001b362b15af34006e6a11974088a46d42b903418eJohann};
16011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
16021b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
16031b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
16041b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
16051b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
16061b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
16071b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
16081b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
16091b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
16101b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48, typename T49>
16111b362b15af34006e6a11974088a46d42b903418eJohannstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
16121b362b15af34006e6a11974088a46d42b903418eJohann    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
16131b362b15af34006e6a11974088a46d42b903418eJohann    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
16141b362b15af34006e6a11974088a46d42b903418eJohann    T46, T47, T48, T49, internal::None> {
16151b362b15af34006e6a11974088a46d42b903418eJohann  typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
16161b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
16171b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
16181b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
16191b362b15af34006e6a11974088a46d42b903418eJohann};
16201b362b15af34006e6a11974088a46d42b903418eJohann
16211b362b15af34006e6a11974088a46d42b903418eJohannnamespace internal {
16221b362b15af34006e6a11974088a46d42b903418eJohann
16231b362b15af34006e6a11974088a46d42b903418eJohann# define GTEST_TEMPLATE_ template <typename T> class
16241b362b15af34006e6a11974088a46d42b903418eJohann
16251b362b15af34006e6a11974088a46d42b903418eJohann// The template "selector" struct TemplateSel<Tmpl> is used to
16261b362b15af34006e6a11974088a46d42b903418eJohann// represent Tmpl, which must be a class template with one type
16271b362b15af34006e6a11974088a46d42b903418eJohann// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
16281b362b15af34006e6a11974088a46d42b903418eJohann// as the type Tmpl<T>.  This allows us to actually instantiate the
16291b362b15af34006e6a11974088a46d42b903418eJohann// template "selected" by TemplateSel<Tmpl>.
16301b362b15af34006e6a11974088a46d42b903418eJohann//
16311b362b15af34006e6a11974088a46d42b903418eJohann// This trick is necessary for simulating typedef for class templates,
16321b362b15af34006e6a11974088a46d42b903418eJohann// which C++ doesn't support directly.
16331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ Tmpl>
16341b362b15af34006e6a11974088a46d42b903418eJohannstruct TemplateSel {
16351b362b15af34006e6a11974088a46d42b903418eJohann  template <typename T>
16361b362b15af34006e6a11974088a46d42b903418eJohann  struct Bind {
16371b362b15af34006e6a11974088a46d42b903418eJohann    typedef Tmpl<T> type;
16381b362b15af34006e6a11974088a46d42b903418eJohann  };
16391b362b15af34006e6a11974088a46d42b903418eJohann};
16401b362b15af34006e6a11974088a46d42b903418eJohann
16411b362b15af34006e6a11974088a46d42b903418eJohann# define GTEST_BIND_(TmplSel, T) \
16421b362b15af34006e6a11974088a46d42b903418eJohann  TmplSel::template Bind<T>::type
16431b362b15af34006e6a11974088a46d42b903418eJohann
16441b362b15af34006e6a11974088a46d42b903418eJohann// A unique struct template used as the default value for the
16451b362b15af34006e6a11974088a46d42b903418eJohann// arguments of class template Templates.  This allows us to simulate
16461b362b15af34006e6a11974088a46d42b903418eJohann// variadic templates (e.g. Templates<int>, Templates<int, double>,
16471b362b15af34006e6a11974088a46d42b903418eJohann// and etc), which C++ doesn't support directly.
16481b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T>
16491b362b15af34006e6a11974088a46d42b903418eJohannstruct NoneT {};
16501b362b15af34006e6a11974088a46d42b903418eJohann
16511b362b15af34006e6a11974088a46d42b903418eJohann// The following family of struct and struct templates are used to
16521b362b15af34006e6a11974088a46d42b903418eJohann// represent template lists.  In particular, TemplatesN<T1, T2, ...,
16531b362b15af34006e6a11974088a46d42b903418eJohann// TN> represents a list of N templates (T1, T2, ..., and TN).  Except
16541b362b15af34006e6a11974088a46d42b903418eJohann// for Templates0, every struct in the family has two member types:
16551b362b15af34006e6a11974088a46d42b903418eJohann// Head for the selector of the first template in the list, and Tail
16561b362b15af34006e6a11974088a46d42b903418eJohann// for the rest of the list.
16571b362b15af34006e6a11974088a46d42b903418eJohann
16581b362b15af34006e6a11974088a46d42b903418eJohann// The empty template list.
16591b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates0 {};
16601b362b15af34006e6a11974088a46d42b903418eJohann
16611b362b15af34006e6a11974088a46d42b903418eJohann// Template lists of length 1, 2, 3, and so on.
16621b362b15af34006e6a11974088a46d42b903418eJohann
16631b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1>
16641b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates1 {
16651b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16661b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates0 Tail;
16671b362b15af34006e6a11974088a46d42b903418eJohann};
16681b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
16691b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates2 {
16701b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16711b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates1<T2> Tail;
16721b362b15af34006e6a11974088a46d42b903418eJohann};
16731b362b15af34006e6a11974088a46d42b903418eJohann
16741b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
16751b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates3 {
16761b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16771b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates2<T2, T3> Tail;
16781b362b15af34006e6a11974088a46d42b903418eJohann};
16791b362b15af34006e6a11974088a46d42b903418eJohann
16801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4>
16821b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates4 {
16831b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16841b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates3<T2, T3, T4> Tail;
16851b362b15af34006e6a11974088a46d42b903418eJohann};
16861b362b15af34006e6a11974088a46d42b903418eJohann
16871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
16891b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates5 {
16901b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16911b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates4<T2, T3, T4, T5> Tail;
16921b362b15af34006e6a11974088a46d42b903418eJohann};
16931b362b15af34006e6a11974088a46d42b903418eJohann
16941b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
16951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
16961b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates6 {
16971b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
16981b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates5<T2, T3, T4, T5, T6> Tail;
16991b362b15af34006e6a11974088a46d42b903418eJohann};
17001b362b15af34006e6a11974088a46d42b903418eJohann
17011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7>
17041b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates7 {
17051b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17061b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
17071b362b15af34006e6a11974088a46d42b903418eJohann};
17081b362b15af34006e6a11974088a46d42b903418eJohann
17091b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
17121b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates8 {
17131b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17141b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
17151b362b15af34006e6a11974088a46d42b903418eJohann};
17161b362b15af34006e6a11974088a46d42b903418eJohann
17171b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
17201b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates9 {
17211b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17221b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
17231b362b15af34006e6a11974088a46d42b903418eJohann};
17241b362b15af34006e6a11974088a46d42b903418eJohann
17251b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17281b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10>
17291b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates10 {
17301b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17311b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
17321b362b15af34006e6a11974088a46d42b903418eJohann};
17331b362b15af34006e6a11974088a46d42b903418eJohann
17341b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
17381b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates11 {
17391b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17401b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
17411b362b15af34006e6a11974088a46d42b903418eJohann};
17421b362b15af34006e6a11974088a46d42b903418eJohann
17431b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17451b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17461b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
17471b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates12 {
17481b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
17501b362b15af34006e6a11974088a46d42b903418eJohann};
17511b362b15af34006e6a11974088a46d42b903418eJohann
17521b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13>
17571b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates13 {
17581b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17591b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
17601b362b15af34006e6a11974088a46d42b903418eJohann};
17611b362b15af34006e6a11974088a46d42b903418eJohann
17621b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
17671b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates14 {
17681b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17691b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
17701b362b15af34006e6a11974088a46d42b903418eJohann      T14> Tail;
17711b362b15af34006e6a11974088a46d42b903418eJohann};
17721b362b15af34006e6a11974088a46d42b903418eJohann
17731b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
17781b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates15 {
17791b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17801b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
17811b362b15af34006e6a11974088a46d42b903418eJohann      T15> Tail;
17821b362b15af34006e6a11974088a46d42b903418eJohann};
17831b362b15af34006e6a11974088a46d42b903418eJohann
17841b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
17881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
17891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16>
17901b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates16 {
17911b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
17921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
17931b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16> Tail;
17941b362b15af34006e6a11974088a46d42b903418eJohann};
17951b362b15af34006e6a11974088a46d42b903418eJohann
17961b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
17971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
17981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
17991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
18021b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates17 {
18031b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18041b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18051b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17> Tail;
18061b362b15af34006e6a11974088a46d42b903418eJohann};
18071b362b15af34006e6a11974088a46d42b903418eJohann
18081b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
18141b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates18 {
18151b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18161b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18171b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18> Tail;
18181b362b15af34006e6a11974088a46d42b903418eJohann};
18191b362b15af34006e6a11974088a46d42b903418eJohann
18201b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19>
18271b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates19 {
18281b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18291b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18301b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19> Tail;
18311b362b15af34006e6a11974088a46d42b903418eJohann};
18321b362b15af34006e6a11974088a46d42b903418eJohann
18331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
18401b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates20 {
18411b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18421b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18431b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20> Tail;
18441b362b15af34006e6a11974088a46d42b903418eJohann};
18451b362b15af34006e6a11974088a46d42b903418eJohann
18461b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
18531b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates21 {
18541b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18551b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18561b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21> Tail;
18571b362b15af34006e6a11974088a46d42b903418eJohann};
18581b362b15af34006e6a11974088a46d42b903418eJohann
18591b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22>
18671b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates22 {
18681b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18691b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18701b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22> Tail;
18711b362b15af34006e6a11974088a46d42b903418eJohann};
18721b362b15af34006e6a11974088a46d42b903418eJohann
18731b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
18811b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates23 {
18821b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18831b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18841b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
18851b362b15af34006e6a11974088a46d42b903418eJohann};
18861b362b15af34006e6a11974088a46d42b903418eJohann
18871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
18881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
18891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
18901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
18911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
18921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
18931b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
18941b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
18951b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates24 {
18961b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
18971b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
18981b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
18991b362b15af34006e6a11974088a46d42b903418eJohann};
19001b362b15af34006e6a11974088a46d42b903418eJohann
19011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25>
19101b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates25 {
19111b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19121b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19131b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
19141b362b15af34006e6a11974088a46d42b903418eJohann};
19151b362b15af34006e6a11974088a46d42b903418eJohann
19161b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
19251b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates26 {
19261b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19271b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19281b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
19291b362b15af34006e6a11974088a46d42b903418eJohann};
19301b362b15af34006e6a11974088a46d42b903418eJohann
19311b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
19401b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates27 {
19411b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19421b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19431b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
19441b362b15af34006e6a11974088a46d42b903418eJohann};
19451b362b15af34006e6a11974088a46d42b903418eJohann
19461b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28>
19561b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates28 {
19571b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19581b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19591b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
19601b362b15af34006e6a11974088a46d42b903418eJohann      T28> Tail;
19611b362b15af34006e6a11974088a46d42b903418eJohann};
19621b362b15af34006e6a11974088a46d42b903418eJohann
19631b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19671b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19681b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19691b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19701b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19711b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19721b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
19731b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates29 {
19741b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19751b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19761b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
19771b362b15af34006e6a11974088a46d42b903418eJohann      T29> Tail;
19781b362b15af34006e6a11974088a46d42b903418eJohann};
19791b362b15af34006e6a11974088a46d42b903418eJohann
19801b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
19831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
19841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
19851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
19861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
19871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
19881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
19891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
19901b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates30 {
19911b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
19921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
19931b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
19941b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30> Tail;
19951b362b15af34006e6a11974088a46d42b903418eJohann};
19961b362b15af34006e6a11974088a46d42b903418eJohann
19971b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
19981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
19991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31>
20081b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates31 {
20091b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
20101b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20111b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20121b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31> Tail;
20131b362b15af34006e6a11974088a46d42b903418eJohann};
20141b362b15af34006e6a11974088a46d42b903418eJohann
20151b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
20261b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates32 {
20271b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
20281b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20291b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20301b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32> Tail;
20311b362b15af34006e6a11974088a46d42b903418eJohann};
20321b362b15af34006e6a11974088a46d42b903418eJohann
20331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
20441b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates33 {
20451b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
20461b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20471b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20481b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33> Tail;
20491b362b15af34006e6a11974088a46d42b903418eJohann};
20501b362b15af34006e6a11974088a46d42b903418eJohann
20511b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
20621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34>
20631b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates34 {
20641b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
20651b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20661b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20671b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34> Tail;
20681b362b15af34006e6a11974088a46d42b903418eJohann};
20691b362b15af34006e6a11974088a46d42b903418eJohann
20701b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20711b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20721b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
20811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
20821b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates35 {
20831b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
20841b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
20851b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
20861b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35> Tail;
20871b362b15af34006e6a11974088a46d42b903418eJohann};
20881b362b15af34006e6a11974088a46d42b903418eJohann
20891b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
20901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
20911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
20921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
20931b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
20941b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
20951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
20961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
20971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
20981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
20991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
21011b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates36 {
21021b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
21031b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21041b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21051b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36> Tail;
21061b362b15af34006e6a11974088a46d42b903418eJohann};
21071b362b15af34006e6a11974088a46d42b903418eJohann
21081b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21151b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37>
21211b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates37 {
21221b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
21231b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21241b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21251b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
21261b362b15af34006e6a11974088a46d42b903418eJohann};
21271b362b15af34006e6a11974088a46d42b903418eJohann
21281b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21291b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21301b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21311b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
21411b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates38 {
21421b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
21431b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21441b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21451b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
21461b362b15af34006e6a11974088a46d42b903418eJohann};
21471b362b15af34006e6a11974088a46d42b903418eJohann
21481b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
21611b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates39 {
21621b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
21631b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21641b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21651b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
21661b362b15af34006e6a11974088a46d42b903418eJohann};
21671b362b15af34006e6a11974088a46d42b903418eJohann
21681b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21691b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21701b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21711b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21721b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
21791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
21801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
21811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40>
21821b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates40 {
21831b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
21841b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
21851b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
21861b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
21871b362b15af34006e6a11974088a46d42b903418eJohann};
21881b362b15af34006e6a11974088a46d42b903418eJohann
21891b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
21901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
21911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
21921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
21931b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
21941b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
21951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
21961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
21971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
21981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
21991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
22031b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates41 {
22041b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
22051b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22061b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22071b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
22081b362b15af34006e6a11974088a46d42b903418eJohann};
22091b362b15af34006e6a11974088a46d42b903418eJohann
22101b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22151b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
22241b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates42 {
22251b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
22261b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22271b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22281b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
22291b362b15af34006e6a11974088a46d42b903418eJohann      T42> Tail;
22301b362b15af34006e6a11974088a46d42b903418eJohann};
22311b362b15af34006e6a11974088a46d42b903418eJohann
22321b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22451b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22461b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43>
22471b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates43 {
22481b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
22491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22501b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22511b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22521b362b15af34006e6a11974088a46d42b903418eJohann      T43> Tail;
22531b362b15af34006e6a11974088a46d42b903418eJohann};
22541b362b15af34006e6a11974088a46d42b903418eJohann
22551b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22671b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22681b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22691b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
22701b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates44 {
22711b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
22721b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22731b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22741b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22751b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44> Tail;
22761b362b15af34006e6a11974088a46d42b903418eJohann};
22771b362b15af34006e6a11974088a46d42b903418eJohann
22781b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
22791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
22801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
22811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
22821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
22831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
22841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
22851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
22861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
22871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
22881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
22891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
22901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
22911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
22921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
22931b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates45 {
22941b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
22951b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
22961b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
22971b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
22981b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45> Tail;
22991b362b15af34006e6a11974088a46d42b903418eJohann};
23001b362b15af34006e6a11974088a46d42b903418eJohann
23011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23151b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46>
23171b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates46 {
23181b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
23191b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23201b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23211b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23221b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45, T46> Tail;
23231b362b15af34006e6a11974088a46d42b903418eJohann};
23241b362b15af34006e6a11974088a46d42b903418eJohann
23251b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23281b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23291b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23301b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23311b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
23411b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates47 {
23421b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
23431b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23441b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23451b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23461b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45, T46, T47> Tail;
23471b362b15af34006e6a11974088a46d42b903418eJohann};
23481b362b15af34006e6a11974088a46d42b903418eJohann
23491b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
23651b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates48 {
23661b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
23671b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23681b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23691b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23701b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45, T46, T47, T48> Tail;
23711b362b15af34006e6a11974088a46d42b903418eJohann};
23721b362b15af34006e6a11974088a46d42b903418eJohann
23731b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
23751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
23761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
23771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
23781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
23791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
23801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
23811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
23821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
23831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
23841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
23851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
23861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
23871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
23881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
23891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T49>
23901b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates49 {
23911b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
23921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
23931b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
23941b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
23951b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45, T46, T47, T48, T49> Tail;
23961b362b15af34006e6a11974088a46d42b903418eJohann};
23971b362b15af34006e6a11974088a46d42b903418eJohann
23981b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
23991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
24001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
24011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
24021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
24031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
24041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
24051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
24061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
24071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
24081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
24091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
24101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
24111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
24121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
24131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
24141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
24151b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates50 {
24161b362b15af34006e6a11974088a46d42b903418eJohann  typedef TemplateSel<T1> Head;
24171b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
24181b362b15af34006e6a11974088a46d42b903418eJohann      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
24191b362b15af34006e6a11974088a46d42b903418eJohann      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
24201b362b15af34006e6a11974088a46d42b903418eJohann      T43, T44, T45, T46, T47, T48, T49, T50> Tail;
24211b362b15af34006e6a11974088a46d42b903418eJohann};
24221b362b15af34006e6a11974088a46d42b903418eJohann
24231b362b15af34006e6a11974088a46d42b903418eJohann
24241b362b15af34006e6a11974088a46d42b903418eJohann// We don't want to require the users to write TemplatesN<...> directly,
24251b362b15af34006e6a11974088a46d42b903418eJohann// as that would require them to count the length.  Templates<...> is much
24261b362b15af34006e6a11974088a46d42b903418eJohann// easier to write, but generates horrible messages when there is a
24271b362b15af34006e6a11974088a46d42b903418eJohann// compiler error, as gcc insists on printing out each template
24281b362b15af34006e6a11974088a46d42b903418eJohann// argument, even if it has the default value (this means Templates<list>
24291b362b15af34006e6a11974088a46d42b903418eJohann// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
24301b362b15af34006e6a11974088a46d42b903418eJohann// errors).
24311b362b15af34006e6a11974088a46d42b903418eJohann//
24321b362b15af34006e6a11974088a46d42b903418eJohann// Our solution is to combine the best part of the two approaches: a
24331b362b15af34006e6a11974088a46d42b903418eJohann// user would write Templates<T1, ..., TN>, and Google Test will translate
24341b362b15af34006e6a11974088a46d42b903418eJohann// that to TemplatesN<T1, ..., TN> internally to make error messages
24351b362b15af34006e6a11974088a46d42b903418eJohann// readable.  The translation is done by the 'type' member of the
24361b362b15af34006e6a11974088a46d42b903418eJohann// Templates template.
24371b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
24381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
24391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
24401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
24411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
24421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
24431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
24441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
24451b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
24461b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
24471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
24481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
24491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
24501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
24511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
24521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
24531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
24541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
24551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
24561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
24571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
24581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
24591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
24601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
24611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
24621b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates {
24631b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
24641b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
24651b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
24661b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
24671b362b15af34006e6a11974088a46d42b903418eJohann};
24681b362b15af34006e6a11974088a46d42b903418eJohann
24691b362b15af34006e6a11974088a46d42b903418eJohanntemplate <>
24701b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24711b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24721b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24731b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24741b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24751b362b15af34006e6a11974088a46d42b903418eJohann    NoneT> {
24761b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates0 type;
24771b362b15af34006e6a11974088a46d42b903418eJohann};
24781b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1>
24791b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24801b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24811b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24821b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24831b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24841b362b15af34006e6a11974088a46d42b903418eJohann    NoneT> {
24851b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates1<T1> type;
24861b362b15af34006e6a11974088a46d42b903418eJohann};
24871b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
24881b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24891b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24901b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24911b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24921b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24931b362b15af34006e6a11974088a46d42b903418eJohann    NoneT> {
24941b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates2<T1, T2> type;
24951b362b15af34006e6a11974088a46d42b903418eJohann};
24961b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
24971b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24981b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
24991b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25001b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25011b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25021b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates3<T1, T2, T3> type;
25031b362b15af34006e6a11974088a46d42b903418eJohann};
25041b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4>
25061b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25071b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25081b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25091b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25101b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25111b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates4<T1, T2, T3, T4> type;
25121b362b15af34006e6a11974088a46d42b903418eJohann};
25131b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
25151b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25161b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25171b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25181b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25191b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25201b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates5<T1, T2, T3, T4, T5> type;
25211b362b15af34006e6a11974088a46d42b903418eJohann};
25221b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
25241b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
25251b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25261b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25271b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25281b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25291b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates6<T1, T2, T3, T4, T5, T6> type;
25301b362b15af34006e6a11974088a46d42b903418eJohann};
25311b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7>
25341b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
25351b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25361b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25371b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25381b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25391b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
25401b362b15af34006e6a11974088a46d42b903418eJohann};
25411b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
25441b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
25451b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25461b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25471b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25481b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
25501b362b15af34006e6a11974088a46d42b903418eJohann};
25511b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
25541b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
25551b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25561b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25571b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25581b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25591b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
25601b362b15af34006e6a11974088a46d42b903418eJohann};
25611b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10>
25651b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
25661b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25671b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25681b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25691b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25701b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
25711b362b15af34006e6a11974088a46d42b903418eJohann};
25721b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
25761b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
25771b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25781b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25791b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25801b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25811b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
25821b362b15af34006e6a11974088a46d42b903418eJohann};
25831b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
25871b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
25881b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25891b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25901b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
25911b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
25921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
25931b362b15af34006e6a11974088a46d42b903418eJohann};
25941b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
25951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
25961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
25971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
25981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13>
25991b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
26001b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26011b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26021b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26031b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
26041b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
26051b362b15af34006e6a11974088a46d42b903418eJohann      T13> type;
26061b362b15af34006e6a11974088a46d42b903418eJohann};
26071b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
26121b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26131b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26141b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26151b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26161b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
26171b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26181b362b15af34006e6a11974088a46d42b903418eJohann      T14> type;
26191b362b15af34006e6a11974088a46d42b903418eJohann};
26201b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
26251b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26261b362b15af34006e6a11974088a46d42b903418eJohann    T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26271b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26281b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26291b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT> {
26301b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26311b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15> type;
26321b362b15af34006e6a11974088a46d42b903418eJohann};
26331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16>
26391b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26401b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26411b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26421b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26431b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT> {
26441b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26451b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16> type;
26461b362b15af34006e6a11974088a46d42b903418eJohann};
26471b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
26531b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26541b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26551b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26561b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26571b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT> {
26581b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26591b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17> type;
26601b362b15af34006e6a11974088a46d42b903418eJohann};
26611b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
26671b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26681b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26691b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26701b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26711b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT> {
26721b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26731b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18> type;
26741b362b15af34006e6a11974088a46d42b903418eJohann};
26751b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
26811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19>
26821b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26831b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26841b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26851b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26861b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT> {
26871b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
26881b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19> type;
26891b362b15af34006e6a11974088a46d42b903418eJohann};
26901b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
26911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
26921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
26931b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
26941b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
26951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
26961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
26971b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
26981b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
26991b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27001b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27011b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT> {
27021b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27031b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20> type;
27041b362b15af34006e6a11974088a46d42b903418eJohann};
27051b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
27121b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27131b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
27141b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27151b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27161b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT> {
27171b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27181b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21> type;
27191b362b15af34006e6a11974088a46d42b903418eJohann};
27201b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22>
27281b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27291b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
27301b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27311b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27321b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT> {
27331b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27341b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
27351b362b15af34006e6a11974088a46d42b903418eJohann};
27361b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
27441b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27451b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
27461b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27471b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27481b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT> {
27491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27501b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
27511b362b15af34006e6a11974088a46d42b903418eJohann};
27521b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
27601b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27611b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
27621b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27631b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27641b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT> {
27651b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27661b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
27671b362b15af34006e6a11974088a46d42b903418eJohann};
27681b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27691b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27701b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27711b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27721b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
27761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25>
27771b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27781b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
27791b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27801b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27811b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT> {
27821b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
27831b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
27841b362b15af34006e6a11974088a46d42b903418eJohann};
27851b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
27861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
27871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
27881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
27891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
27901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
27911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
27921b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
27931b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
27941b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
27951b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
27961b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27971b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
27981b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT> {
27991b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28001b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
28011b362b15af34006e6a11974088a46d42b903418eJohann};
28021b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
28111b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28121b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
28131b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28141b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28151b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT> {
28161b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28171b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
28181b362b15af34006e6a11974088a46d42b903418eJohann      T27> type;
28191b362b15af34006e6a11974088a46d42b903418eJohann};
28201b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28281b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28291b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28>
28301b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28311b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
28321b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28331b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28341b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT> {
28351b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28361b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28371b362b15af34006e6a11974088a46d42b903418eJohann      T28> type;
28381b362b15af34006e6a11974088a46d42b903418eJohann};
28391b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28451b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28461b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
28491b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28501b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28511b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28521b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28531b362b15af34006e6a11974088a46d42b903418eJohann    NoneT> {
28541b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28551b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28561b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29> type;
28571b362b15af34006e6a11974088a46d42b903418eJohann};
28581b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28671b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
28681b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28691b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28701b362b15af34006e6a11974088a46d42b903418eJohann    T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28711b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
28721b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28731b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28741b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30> type;
28751b362b15af34006e6a11974088a46d42b903418eJohann};
28761b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
28811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
28821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
28831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
28841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
28851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
28861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31>
28871b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
28881b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
28891b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
28901b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
28911b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
28921b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
28931b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31> type;
28941b362b15af34006e6a11974088a46d42b903418eJohann};
28951b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
28961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
28971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
28981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
28991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
29061b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29071b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29081b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29091b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29101b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29111b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29121b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32> type;
29131b362b15af34006e6a11974088a46d42b903418eJohann};
29141b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29151b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
29251b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29261b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29271b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29281b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29291b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29301b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29311b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33> type;
29321b362b15af34006e6a11974088a46d42b903418eJohann};
29331b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34>
29451b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29461b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29471b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29481b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29491b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29501b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29511b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34> type;
29521b362b15af34006e6a11974088a46d42b903418eJohann};
29531b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
29651b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29661b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29671b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
29681b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29691b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29701b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29711b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35> type;
29721b362b15af34006e6a11974088a46d42b903418eJohann};
29731b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
29801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
29811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
29821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
29831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
29841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
29851b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
29861b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
29871b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
29881b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
29891b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
29901b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
29911b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
29921b362b15af34006e6a11974088a46d42b903418eJohann};
29931b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
29941b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
29951b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
29961b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
29971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
29981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
29991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37>
30061b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30071b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30081b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
30091b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30101b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30111b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30121b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
30131b362b15af34006e6a11974088a46d42b903418eJohann};
30141b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30151b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30161b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30171b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30181b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30191b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30201b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30211b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
30271b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30281b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30291b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
30301b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30311b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30321b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30331b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
30341b362b15af34006e6a11974088a46d42b903418eJohann};
30351b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30391b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30401b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30411b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30421b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30431b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30441b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30451b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30461b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
30481b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30491b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30501b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
30511b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30521b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30531b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30541b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
30551b362b15af34006e6a11974088a46d42b903418eJohann};
30561b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30631b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30641b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30651b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30661b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30671b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30681b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
30691b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40>
30701b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30711b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30721b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
30731b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30741b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30751b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30761b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
30771b362b15af34006e6a11974088a46d42b903418eJohann};
30781b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
30791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
30801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
30811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
30821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
30831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
30841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
30851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
30861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
30871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
30881b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
30891b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
30901b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
30911b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
30921b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
30931b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
30941b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
30951b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
30961b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
30971b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
30981b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
30991b362b15af34006e6a11974088a46d42b903418eJohann      T41> type;
31001b362b15af34006e6a11974088a46d42b903418eJohann};
31011b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31121b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31131b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31141b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
31151b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31161b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31171b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
31181b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31191b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31201b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31211b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31221b362b15af34006e6a11974088a46d42b903418eJohann      T42> type;
31231b362b15af34006e6a11974088a46d42b903418eJohann};
31241b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31281b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31291b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31301b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31311b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31371b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31381b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43>
31391b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31401b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31411b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
31421b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31431b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31441b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31451b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31461b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43> type;
31471b362b15af34006e6a11974088a46d42b903418eJohann};
31481b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31621b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
31631b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31641b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31651b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
31661b362b15af34006e6a11974088a46d42b903418eJohann    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
31671b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31681b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31691b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31701b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44> type;
31711b362b15af34006e6a11974088a46d42b903418eJohann};
31721b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
31761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
31771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
31781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
31791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
31801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
31811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
31821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
31831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
31841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
31851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
31861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
31871b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
31881b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
31891b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
31901b362b15af34006e6a11974088a46d42b903418eJohann    T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
31911b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
31921b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
31931b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
31941b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45> type;
31951b362b15af34006e6a11974088a46d42b903418eJohann};
31961b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
31971b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
31981b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
31991b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32001b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32011b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32021b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32031b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32041b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32051b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32061b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32071b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32081b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32091b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32101b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32111b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46>
32121b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32131b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32141b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32151b362b15af34006e6a11974088a46d42b903418eJohann    T45, T46, NoneT, NoneT, NoneT, NoneT> {
32161b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32171b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32181b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32191b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45, T46> type;
32201b362b15af34006e6a11974088a46d42b903418eJohann};
32211b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32221b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32231b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32241b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32251b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32261b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32271b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32281b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32291b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32301b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32311b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32321b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32331b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32341b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32351b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32361b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
32371b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32381b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32391b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32401b362b15af34006e6a11974088a46d42b903418eJohann    T45, T46, T47, NoneT, NoneT, NoneT> {
32411b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32421b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32431b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32441b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45, T46, T47> type;
32451b362b15af34006e6a11974088a46d42b903418eJohann};
32461b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32471b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32481b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32491b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32501b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32511b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32521b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32531b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32541b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32551b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32561b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32571b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32581b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32591b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32601b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32611b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
32621b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32631b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32641b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32651b362b15af34006e6a11974088a46d42b903418eJohann    T45, T46, T47, T48, NoneT, NoneT> {
32661b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32671b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32681b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32691b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45, T46, T47, T48> type;
32701b362b15af34006e6a11974088a46d42b903418eJohann};
32711b362b15af34006e6a11974088a46d42b903418eJohanntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
32721b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
32731b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
32741b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
32751b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
32761b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
32771b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
32781b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
32791b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
32801b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
32811b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
32821b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
32831b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
32841b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
32851b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
32861b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
32871b362b15af34006e6a11974088a46d42b903418eJohann    GTEST_TEMPLATE_ T49>
32881b362b15af34006e6a11974088a46d42b903418eJohannstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
32891b362b15af34006e6a11974088a46d42b903418eJohann    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
32901b362b15af34006e6a11974088a46d42b903418eJohann    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
32911b362b15af34006e6a11974088a46d42b903418eJohann    T45, T46, T47, T48, T49, NoneT> {
32921b362b15af34006e6a11974088a46d42b903418eJohann  typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
32931b362b15af34006e6a11974088a46d42b903418eJohann      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
32941b362b15af34006e6a11974088a46d42b903418eJohann      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
32951b362b15af34006e6a11974088a46d42b903418eJohann      T42, T43, T44, T45, T46, T47, T48, T49> type;
32961b362b15af34006e6a11974088a46d42b903418eJohann};
32971b362b15af34006e6a11974088a46d42b903418eJohann
32981b362b15af34006e6a11974088a46d42b903418eJohann// The TypeList template makes it possible to use either a single type
32991b362b15af34006e6a11974088a46d42b903418eJohann// or a Types<...> list in TYPED_TEST_CASE() and
33001b362b15af34006e6a11974088a46d42b903418eJohann// INSTANTIATE_TYPED_TEST_CASE_P().
33011b362b15af34006e6a11974088a46d42b903418eJohann
33021b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T>
33031b362b15af34006e6a11974088a46d42b903418eJohannstruct TypeList { typedef Types1<T> type; };
33041b362b15af34006e6a11974088a46d42b903418eJohann
33051b362b15af34006e6a11974088a46d42b903418eJohanntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
33061b362b15af34006e6a11974088a46d42b903418eJohann    typename T6, typename T7, typename T8, typename T9, typename T10,
33071b362b15af34006e6a11974088a46d42b903418eJohann    typename T11, typename T12, typename T13, typename T14, typename T15,
33081b362b15af34006e6a11974088a46d42b903418eJohann    typename T16, typename T17, typename T18, typename T19, typename T20,
33091b362b15af34006e6a11974088a46d42b903418eJohann    typename T21, typename T22, typename T23, typename T24, typename T25,
33101b362b15af34006e6a11974088a46d42b903418eJohann    typename T26, typename T27, typename T28, typename T29, typename T30,
33111b362b15af34006e6a11974088a46d42b903418eJohann    typename T31, typename T32, typename T33, typename T34, typename T35,
33121b362b15af34006e6a11974088a46d42b903418eJohann    typename T36, typename T37, typename T38, typename T39, typename T40,
33131b362b15af34006e6a11974088a46d42b903418eJohann    typename T41, typename T42, typename T43, typename T44, typename T45,
33141b362b15af34006e6a11974088a46d42b903418eJohann    typename T46, typename T47, typename T48, typename T49, typename T50>
33151b362b15af34006e6a11974088a46d42b903418eJohannstruct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
33161b362b15af34006e6a11974088a46d42b903418eJohann    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
33171b362b15af34006e6a11974088a46d42b903418eJohann    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
33181b362b15af34006e6a11974088a46d42b903418eJohann    T44, T45, T46, T47, T48, T49, T50> > {
33191b362b15af34006e6a11974088a46d42b903418eJohann  typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
33201b362b15af34006e6a11974088a46d42b903418eJohann      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
33211b362b15af34006e6a11974088a46d42b903418eJohann      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
33221b362b15af34006e6a11974088a46d42b903418eJohann      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
33231b362b15af34006e6a11974088a46d42b903418eJohann};
33241b362b15af34006e6a11974088a46d42b903418eJohann
33251b362b15af34006e6a11974088a46d42b903418eJohann#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
33261b362b15af34006e6a11974088a46d42b903418eJohann
33271b362b15af34006e6a11974088a46d42b903418eJohann}  // namespace internal
33281b362b15af34006e6a11974088a46d42b903418eJohann}  // namespace testing
33291b362b15af34006e6a11974088a46d42b903418eJohann
33301b362b15af34006e6a11974088a46d42b903418eJohann#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3331