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