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