Qucs-core  0.0.19
gtest-type-util.h
Go to the documentation of this file.
00001 // This file was GENERATED by command:
00002 //     pump.py gtest-type-util.h.pump
00003 // DO NOT EDIT BY HAND!!!
00004 
00005 // Copyright 2008 Google Inc.
00006 // All Rights Reserved.
00007 //
00008 // Redistribution and use in source and binary forms, with or without
00009 // modification, are permitted provided that the following conditions are
00010 // met:
00011 //
00012 //     * Redistributions of source code must retain the above copyright
00013 // notice, this list of conditions and the following disclaimer.
00014 //     * Redistributions in binary form must reproduce the above
00015 // copyright notice, this list of conditions and the following disclaimer
00016 // in the documentation and/or other materials provided with the
00017 // distribution.
00018 //     * Neither the name of Google Inc. nor the names of its
00019 // contributors may be used to endorse or promote products derived from
00020 // this software without specific prior written permission.
00021 //
00022 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00025 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00026 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00027 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00028 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00029 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00030 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00031 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00032 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033 //
00034 // Author: wan@google.com (Zhanyong Wan)
00035 
00036 // Type utilities needed for implementing typed and type-parameterized
00037 // tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
00038 //
00039 // Currently we support at most 50 types in a list, and at most 50
00040 // type-parameterized tests in one type-parameterized test case.
00041 // Please contact googletestframework@googlegroups.com if you need
00042 // more.
00043 
00044 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
00045 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
00046 
00047 #include "gtest/internal/gtest-port.h"
00048 
00049 // #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
00050 // libstdc++ (which is where cxxabi.h comes from).
00051 # if GTEST_HAS_CXXABI_H_
00052 #  include <cxxabi.h>
00053 # elif defined(__HP_aCC)
00054 #  include <acxx_demangle.h>
00055 # endif  // GTEST_HASH_CXXABI_H_
00056 
00057 namespace testing {
00058 namespace internal {
00059 
00060 // GetTypeName<T>() returns a human-readable name of type T.
00061 // NB: This function is also used in Google Mock, so don't move it inside of
00062 // the typed-test-only section below.
00063 template <typename T>
00064 std::string GetTypeName() {
00065 # if GTEST_HAS_RTTI
00066 
00067   const char* const name = typeid(T).name();
00068 #  if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
00069   int status = 0;
00070   // gcc's implementation of typeid(T).name() mangles the type name,
00071   // so we have to demangle it.
00072 #   if GTEST_HAS_CXXABI_H_
00073   using abi::__cxa_demangle;
00074 #   endif  // GTEST_HAS_CXXABI_H_
00075   char* const readable_name = __cxa_demangle(name, 0, 0, &status);
00076   const std::string name_str(status == 0 ? readable_name : name);
00077   free(readable_name);
00078   return name_str;
00079 #  else
00080   return name;
00081 #  endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC
00082 
00083 # else
00084 
00085   return "<type>";
00086 
00087 # endif  // GTEST_HAS_RTTI
00088 }
00089 
00090 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
00091 
00092 // AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
00093 // type.  This can be used as a compile-time assertion to ensure that
00094 // two types are equal.
00095 
00096 template <typename T1, typename T2>
00097 struct AssertTypeEq;
00098 
00099 template <typename T>
00100 struct AssertTypeEq<T, T> {
00101   typedef bool type;
00102 };
00103 
00104 // A unique type used as the default value for the arguments of class
00105 // template Types.  This allows us to simulate variadic templates
00106 // (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
00107 // support directly.
00108 struct None {};
00109 
00110 // The following family of struct and struct templates are used to
00111 // represent type lists.  In particular, TypesN<T1, T2, ..., TN>
00112 // represents a type list with N types (T1, T2, ..., and TN) in it.
00113 // Except for Types0, every struct in the family has two member types:
00114 // Head for the first type in the list, and Tail for the rest of the
00115 // list.
00116 
00117 // The empty type list.
00118 struct Types0 {};
00119 
00120 // Type lists of length 1, 2, 3, and so on.
00121 
00122 template <typename T1>
00123 struct Types1 {
00124   typedef T1 Head;
00125   typedef Types0 Tail;
00126 };
00127 template <typename T1, typename T2>
00128 struct Types2 {
00129   typedef T1 Head;
00130   typedef Types1<T2> Tail;
00131 };
00132 
00133 template <typename T1, typename T2, typename T3>
00134 struct Types3 {
00135   typedef T1 Head;
00136   typedef Types2<T2, T3> Tail;
00137 };
00138 
00139 template <typename T1, typename T2, typename T3, typename T4>
00140 struct Types4 {
00141   typedef T1 Head;
00142   typedef Types3<T2, T3, T4> Tail;
00143 };
00144 
00145 template <typename T1, typename T2, typename T3, typename T4, typename T5>
00146 struct Types5 {
00147   typedef T1 Head;
00148   typedef Types4<T2, T3, T4, T5> Tail;
00149 };
00150 
00151 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00152     typename T6>
00153 struct Types6 {
00154   typedef T1 Head;
00155   typedef Types5<T2, T3, T4, T5, T6> Tail;
00156 };
00157 
00158 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00159     typename T6, typename T7>
00160 struct Types7 {
00161   typedef T1 Head;
00162   typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
00163 };
00164 
00165 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00166     typename T6, typename T7, typename T8>
00167 struct Types8 {
00168   typedef T1 Head;
00169   typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
00170 };
00171 
00172 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00173     typename T6, typename T7, typename T8, typename T9>
00174 struct Types9 {
00175   typedef T1 Head;
00176   typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
00177 };
00178 
00179 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00180     typename T6, typename T7, typename T8, typename T9, typename T10>
00181 struct Types10 {
00182   typedef T1 Head;
00183   typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
00184 };
00185 
00186 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00187     typename T6, typename T7, typename T8, typename T9, typename T10,
00188     typename T11>
00189 struct Types11 {
00190   typedef T1 Head;
00191   typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
00192 };
00193 
00194 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00195     typename T6, typename T7, typename T8, typename T9, typename T10,
00196     typename T11, typename T12>
00197 struct Types12 {
00198   typedef T1 Head;
00199   typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
00200 };
00201 
00202 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00203     typename T6, typename T7, typename T8, typename T9, typename T10,
00204     typename T11, typename T12, typename T13>
00205 struct Types13 {
00206   typedef T1 Head;
00207   typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
00208 };
00209 
00210 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00211     typename T6, typename T7, typename T8, typename T9, typename T10,
00212     typename T11, typename T12, typename T13, typename T14>
00213 struct Types14 {
00214   typedef T1 Head;
00215   typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
00216 };
00217 
00218 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00219     typename T6, typename T7, typename T8, typename T9, typename T10,
00220     typename T11, typename T12, typename T13, typename T14, typename T15>
00221 struct Types15 {
00222   typedef T1 Head;
00223   typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
00224       T15> Tail;
00225 };
00226 
00227 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00228     typename T6, typename T7, typename T8, typename T9, typename T10,
00229     typename T11, typename T12, typename T13, typename T14, typename T15,
00230     typename T16>
00231 struct Types16 {
00232   typedef T1 Head;
00233   typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00234       T16> Tail;
00235 };
00236 
00237 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00238     typename T6, typename T7, typename T8, typename T9, typename T10,
00239     typename T11, typename T12, typename T13, typename T14, typename T15,
00240     typename T16, typename T17>
00241 struct Types17 {
00242   typedef T1 Head;
00243   typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00244       T16, T17> Tail;
00245 };
00246 
00247 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00248     typename T6, typename T7, typename T8, typename T9, typename T10,
00249     typename T11, typename T12, typename T13, typename T14, typename T15,
00250     typename T16, typename T17, typename T18>
00251 struct Types18 {
00252   typedef T1 Head;
00253   typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00254       T16, T17, T18> Tail;
00255 };
00256 
00257 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00258     typename T6, typename T7, typename T8, typename T9, typename T10,
00259     typename T11, typename T12, typename T13, typename T14, typename T15,
00260     typename T16, typename T17, typename T18, typename T19>
00261 struct Types19 {
00262   typedef T1 Head;
00263   typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00264       T16, T17, T18, T19> Tail;
00265 };
00266 
00267 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00268     typename T6, typename T7, typename T8, typename T9, typename T10,
00269     typename T11, typename T12, typename T13, typename T14, typename T15,
00270     typename T16, typename T17, typename T18, typename T19, typename T20>
00271 struct Types20 {
00272   typedef T1 Head;
00273   typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00274       T16, T17, T18, T19, T20> Tail;
00275 };
00276 
00277 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00278     typename T6, typename T7, typename T8, typename T9, typename T10,
00279     typename T11, typename T12, typename T13, typename T14, typename T15,
00280     typename T16, typename T17, typename T18, typename T19, typename T20,
00281     typename T21>
00282 struct Types21 {
00283   typedef T1 Head;
00284   typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00285       T16, T17, T18, T19, T20, T21> Tail;
00286 };
00287 
00288 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00289     typename T6, typename T7, typename T8, typename T9, typename T10,
00290     typename T11, typename T12, typename T13, typename T14, typename T15,
00291     typename T16, typename T17, typename T18, typename T19, typename T20,
00292     typename T21, typename T22>
00293 struct Types22 {
00294   typedef T1 Head;
00295   typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00296       T16, T17, T18, T19, T20, T21, T22> Tail;
00297 };
00298 
00299 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00300     typename T6, typename T7, typename T8, typename T9, typename T10,
00301     typename T11, typename T12, typename T13, typename T14, typename T15,
00302     typename T16, typename T17, typename T18, typename T19, typename T20,
00303     typename T21, typename T22, typename T23>
00304 struct Types23 {
00305   typedef T1 Head;
00306   typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00307       T16, T17, T18, T19, T20, T21, T22, T23> Tail;
00308 };
00309 
00310 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00311     typename T6, typename T7, typename T8, typename T9, typename T10,
00312     typename T11, typename T12, typename T13, typename T14, typename T15,
00313     typename T16, typename T17, typename T18, typename T19, typename T20,
00314     typename T21, typename T22, typename T23, typename T24>
00315 struct Types24 {
00316   typedef T1 Head;
00317   typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00318       T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
00319 };
00320 
00321 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00322     typename T6, typename T7, typename T8, typename T9, typename T10,
00323     typename T11, typename T12, typename T13, typename T14, typename T15,
00324     typename T16, typename T17, typename T18, typename T19, typename T20,
00325     typename T21, typename T22, typename T23, typename T24, typename T25>
00326 struct Types25 {
00327   typedef T1 Head;
00328   typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00329       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
00330 };
00331 
00332 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00333     typename T6, typename T7, typename T8, typename T9, typename T10,
00334     typename T11, typename T12, typename T13, typename T14, typename T15,
00335     typename T16, typename T17, typename T18, typename T19, typename T20,
00336     typename T21, typename T22, typename T23, typename T24, typename T25,
00337     typename T26>
00338 struct Types26 {
00339   typedef T1 Head;
00340   typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00341       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
00342 };
00343 
00344 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00345     typename T6, typename T7, typename T8, typename T9, typename T10,
00346     typename T11, typename T12, typename T13, typename T14, typename T15,
00347     typename T16, typename T17, typename T18, typename T19, typename T20,
00348     typename T21, typename T22, typename T23, typename T24, typename T25,
00349     typename T26, typename T27>
00350 struct Types27 {
00351   typedef T1 Head;
00352   typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00353       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
00354 };
00355 
00356 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00357     typename T6, typename T7, typename T8, typename T9, typename T10,
00358     typename T11, typename T12, typename T13, typename T14, typename T15,
00359     typename T16, typename T17, typename T18, typename T19, typename T20,
00360     typename T21, typename T22, typename T23, typename T24, typename T25,
00361     typename T26, typename T27, typename T28>
00362 struct Types28 {
00363   typedef T1 Head;
00364   typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00365       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
00366 };
00367 
00368 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00369     typename T6, typename T7, typename T8, typename T9, typename T10,
00370     typename T11, typename T12, typename T13, typename T14, typename T15,
00371     typename T16, typename T17, typename T18, typename T19, typename T20,
00372     typename T21, typename T22, typename T23, typename T24, typename T25,
00373     typename T26, typename T27, typename T28, typename T29>
00374 struct Types29 {
00375   typedef T1 Head;
00376   typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00377       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
00378       T29> Tail;
00379 };
00380 
00381 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00382     typename T6, typename T7, typename T8, typename T9, typename T10,
00383     typename T11, typename T12, typename T13, typename T14, typename T15,
00384     typename T16, typename T17, typename T18, typename T19, typename T20,
00385     typename T21, typename T22, typename T23, typename T24, typename T25,
00386     typename T26, typename T27, typename T28, typename T29, typename T30>
00387 struct Types30 {
00388   typedef T1 Head;
00389   typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00390       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00391       T30> Tail;
00392 };
00393 
00394 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00395     typename T6, typename T7, typename T8, typename T9, typename T10,
00396     typename T11, typename T12, typename T13, typename T14, typename T15,
00397     typename T16, typename T17, typename T18, typename T19, typename T20,
00398     typename T21, typename T22, typename T23, typename T24, typename T25,
00399     typename T26, typename T27, typename T28, typename T29, typename T30,
00400     typename T31>
00401 struct Types31 {
00402   typedef T1 Head;
00403   typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00404       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00405       T30, T31> Tail;
00406 };
00407 
00408 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00409     typename T6, typename T7, typename T8, typename T9, typename T10,
00410     typename T11, typename T12, typename T13, typename T14, typename T15,
00411     typename T16, typename T17, typename T18, typename T19, typename T20,
00412     typename T21, typename T22, typename T23, typename T24, typename T25,
00413     typename T26, typename T27, typename T28, typename T29, typename T30,
00414     typename T31, typename T32>
00415 struct Types32 {
00416   typedef T1 Head;
00417   typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00418       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00419       T30, T31, T32> Tail;
00420 };
00421 
00422 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00423     typename T6, typename T7, typename T8, typename T9, typename T10,
00424     typename T11, typename T12, typename T13, typename T14, typename T15,
00425     typename T16, typename T17, typename T18, typename T19, typename T20,
00426     typename T21, typename T22, typename T23, typename T24, typename T25,
00427     typename T26, typename T27, typename T28, typename T29, typename T30,
00428     typename T31, typename T32, typename T33>
00429 struct Types33 {
00430   typedef T1 Head;
00431   typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00432       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00433       T30, T31, T32, T33> Tail;
00434 };
00435 
00436 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00437     typename T6, typename T7, typename T8, typename T9, typename T10,
00438     typename T11, typename T12, typename T13, typename T14, typename T15,
00439     typename T16, typename T17, typename T18, typename T19, typename T20,
00440     typename T21, typename T22, typename T23, typename T24, typename T25,
00441     typename T26, typename T27, typename T28, typename T29, typename T30,
00442     typename T31, typename T32, typename T33, typename T34>
00443 struct Types34 {
00444   typedef T1 Head;
00445   typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00446       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00447       T30, T31, T32, T33, T34> Tail;
00448 };
00449 
00450 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00451     typename T6, typename T7, typename T8, typename T9, typename T10,
00452     typename T11, typename T12, typename T13, typename T14, typename T15,
00453     typename T16, typename T17, typename T18, typename T19, typename T20,
00454     typename T21, typename T22, typename T23, typename T24, typename T25,
00455     typename T26, typename T27, typename T28, typename T29, typename T30,
00456     typename T31, typename T32, typename T33, typename T34, typename T35>
00457 struct Types35 {
00458   typedef T1 Head;
00459   typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00460       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00461       T30, T31, T32, T33, T34, T35> Tail;
00462 };
00463 
00464 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00465     typename T6, typename T7, typename T8, typename T9, typename T10,
00466     typename T11, typename T12, typename T13, typename T14, typename T15,
00467     typename T16, typename T17, typename T18, typename T19, typename T20,
00468     typename T21, typename T22, typename T23, typename T24, typename T25,
00469     typename T26, typename T27, typename T28, typename T29, typename T30,
00470     typename T31, typename T32, typename T33, typename T34, typename T35,
00471     typename T36>
00472 struct Types36 {
00473   typedef T1 Head;
00474   typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00475       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00476       T30, T31, T32, T33, T34, T35, T36> Tail;
00477 };
00478 
00479 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00480     typename T6, typename T7, typename T8, typename T9, typename T10,
00481     typename T11, typename T12, typename T13, typename T14, typename T15,
00482     typename T16, typename T17, typename T18, typename T19, typename T20,
00483     typename T21, typename T22, typename T23, typename T24, typename T25,
00484     typename T26, typename T27, typename T28, typename T29, typename T30,
00485     typename T31, typename T32, typename T33, typename T34, typename T35,
00486     typename T36, typename T37>
00487 struct Types37 {
00488   typedef T1 Head;
00489   typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00490       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00491       T30, T31, T32, T33, T34, T35, T36, T37> Tail;
00492 };
00493 
00494 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00495     typename T6, typename T7, typename T8, typename T9, typename T10,
00496     typename T11, typename T12, typename T13, typename T14, typename T15,
00497     typename T16, typename T17, typename T18, typename T19, typename T20,
00498     typename T21, typename T22, typename T23, typename T24, typename T25,
00499     typename T26, typename T27, typename T28, typename T29, typename T30,
00500     typename T31, typename T32, typename T33, typename T34, typename T35,
00501     typename T36, typename T37, typename T38>
00502 struct Types38 {
00503   typedef T1 Head;
00504   typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00505       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00506       T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
00507 };
00508 
00509 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00510     typename T6, typename T7, typename T8, typename T9, typename T10,
00511     typename T11, typename T12, typename T13, typename T14, typename T15,
00512     typename T16, typename T17, typename T18, typename T19, typename T20,
00513     typename T21, typename T22, typename T23, typename T24, typename T25,
00514     typename T26, typename T27, typename T28, typename T29, typename T30,
00515     typename T31, typename T32, typename T33, typename T34, typename T35,
00516     typename T36, typename T37, typename T38, typename T39>
00517 struct Types39 {
00518   typedef T1 Head;
00519   typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00520       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00521       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
00522 };
00523 
00524 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00525     typename T6, typename T7, typename T8, typename T9, typename T10,
00526     typename T11, typename T12, typename T13, typename T14, typename T15,
00527     typename T16, typename T17, typename T18, typename T19, typename T20,
00528     typename T21, typename T22, typename T23, typename T24, typename T25,
00529     typename T26, typename T27, typename T28, typename T29, typename T30,
00530     typename T31, typename T32, typename T33, typename T34, typename T35,
00531     typename T36, typename T37, typename T38, typename T39, typename T40>
00532 struct Types40 {
00533   typedef T1 Head;
00534   typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00535       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00536       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
00537 };
00538 
00539 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00540     typename T6, typename T7, typename T8, typename T9, typename T10,
00541     typename T11, typename T12, typename T13, typename T14, typename T15,
00542     typename T16, typename T17, typename T18, typename T19, typename T20,
00543     typename T21, typename T22, typename T23, typename T24, typename T25,
00544     typename T26, typename T27, typename T28, typename T29, typename T30,
00545     typename T31, typename T32, typename T33, typename T34, typename T35,
00546     typename T36, typename T37, typename T38, typename T39, typename T40,
00547     typename T41>
00548 struct Types41 {
00549   typedef T1 Head;
00550   typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00551       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00552       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
00553 };
00554 
00555 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00556     typename T6, typename T7, typename T8, typename T9, typename T10,
00557     typename T11, typename T12, typename T13, typename T14, typename T15,
00558     typename T16, typename T17, typename T18, typename T19, typename T20,
00559     typename T21, typename T22, typename T23, typename T24, typename T25,
00560     typename T26, typename T27, typename T28, typename T29, typename T30,
00561     typename T31, typename T32, typename T33, typename T34, typename T35,
00562     typename T36, typename T37, typename T38, typename T39, typename T40,
00563     typename T41, typename T42>
00564 struct Types42 {
00565   typedef T1 Head;
00566   typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00567       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00568       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
00569 };
00570 
00571 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00572     typename T6, typename T7, typename T8, typename T9, typename T10,
00573     typename T11, typename T12, typename T13, typename T14, typename T15,
00574     typename T16, typename T17, typename T18, typename T19, typename T20,
00575     typename T21, typename T22, typename T23, typename T24, typename T25,
00576     typename T26, typename T27, typename T28, typename T29, typename T30,
00577     typename T31, typename T32, typename T33, typename T34, typename T35,
00578     typename T36, typename T37, typename T38, typename T39, typename T40,
00579     typename T41, typename T42, typename T43>
00580 struct Types43 {
00581   typedef T1 Head;
00582   typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00583       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00584       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
00585       T43> Tail;
00586 };
00587 
00588 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00589     typename T6, typename T7, typename T8, typename T9, typename T10,
00590     typename T11, typename T12, typename T13, typename T14, typename T15,
00591     typename T16, typename T17, typename T18, typename T19, typename T20,
00592     typename T21, typename T22, typename T23, typename T24, typename T25,
00593     typename T26, typename T27, typename T28, typename T29, typename T30,
00594     typename T31, typename T32, typename T33, typename T34, typename T35,
00595     typename T36, typename T37, typename T38, typename T39, typename T40,
00596     typename T41, typename T42, typename T43, typename T44>
00597 struct Types44 {
00598   typedef T1 Head;
00599   typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00600       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00601       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00602       T44> Tail;
00603 };
00604 
00605 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00606     typename T6, typename T7, typename T8, typename T9, typename T10,
00607     typename T11, typename T12, typename T13, typename T14, typename T15,
00608     typename T16, typename T17, typename T18, typename T19, typename T20,
00609     typename T21, typename T22, typename T23, typename T24, typename T25,
00610     typename T26, typename T27, typename T28, typename T29, typename T30,
00611     typename T31, typename T32, typename T33, typename T34, typename T35,
00612     typename T36, typename T37, typename T38, typename T39, typename T40,
00613     typename T41, typename T42, typename T43, typename T44, typename T45>
00614 struct Types45 {
00615   typedef T1 Head;
00616   typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00617       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00618       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00619       T44, T45> Tail;
00620 };
00621 
00622 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00623     typename T6, typename T7, typename T8, typename T9, typename T10,
00624     typename T11, typename T12, typename T13, typename T14, typename T15,
00625     typename T16, typename T17, typename T18, typename T19, typename T20,
00626     typename T21, typename T22, typename T23, typename T24, typename T25,
00627     typename T26, typename T27, typename T28, typename T29, typename T30,
00628     typename T31, typename T32, typename T33, typename T34, typename T35,
00629     typename T36, typename T37, typename T38, typename T39, typename T40,
00630     typename T41, typename T42, typename T43, typename T44, typename T45,
00631     typename T46>
00632 struct Types46 {
00633   typedef T1 Head;
00634   typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00635       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00636       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00637       T44, T45, T46> Tail;
00638 };
00639 
00640 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00641     typename T6, typename T7, typename T8, typename T9, typename T10,
00642     typename T11, typename T12, typename T13, typename T14, typename T15,
00643     typename T16, typename T17, typename T18, typename T19, typename T20,
00644     typename T21, typename T22, typename T23, typename T24, typename T25,
00645     typename T26, typename T27, typename T28, typename T29, typename T30,
00646     typename T31, typename T32, typename T33, typename T34, typename T35,
00647     typename T36, typename T37, typename T38, typename T39, typename T40,
00648     typename T41, typename T42, typename T43, typename T44, typename T45,
00649     typename T46, typename T47>
00650 struct Types47 {
00651   typedef T1 Head;
00652   typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00653       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00654       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00655       T44, T45, T46, T47> Tail;
00656 };
00657 
00658 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00659     typename T6, typename T7, typename T8, typename T9, typename T10,
00660     typename T11, typename T12, typename T13, typename T14, typename T15,
00661     typename T16, typename T17, typename T18, typename T19, typename T20,
00662     typename T21, typename T22, typename T23, typename T24, typename T25,
00663     typename T26, typename T27, typename T28, typename T29, typename T30,
00664     typename T31, typename T32, typename T33, typename T34, typename T35,
00665     typename T36, typename T37, typename T38, typename T39, typename T40,
00666     typename T41, typename T42, typename T43, typename T44, typename T45,
00667     typename T46, typename T47, typename T48>
00668 struct Types48 {
00669   typedef T1 Head;
00670   typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00671       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00672       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00673       T44, T45, T46, T47, T48> Tail;
00674 };
00675 
00676 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00677     typename T6, typename T7, typename T8, typename T9, typename T10,
00678     typename T11, typename T12, typename T13, typename T14, typename T15,
00679     typename T16, typename T17, typename T18, typename T19, typename T20,
00680     typename T21, typename T22, typename T23, typename T24, typename T25,
00681     typename T26, typename T27, typename T28, typename T29, typename T30,
00682     typename T31, typename T32, typename T33, typename T34, typename T35,
00683     typename T36, typename T37, typename T38, typename T39, typename T40,
00684     typename T41, typename T42, typename T43, typename T44, typename T45,
00685     typename T46, typename T47, typename T48, typename T49>
00686 struct Types49 {
00687   typedef T1 Head;
00688   typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00689       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00690       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00691       T44, T45, T46, T47, T48, T49> Tail;
00692 };
00693 
00694 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00695     typename T6, typename T7, typename T8, typename T9, typename T10,
00696     typename T11, typename T12, typename T13, typename T14, typename T15,
00697     typename T16, typename T17, typename T18, typename T19, typename T20,
00698     typename T21, typename T22, typename T23, typename T24, typename T25,
00699     typename T26, typename T27, typename T28, typename T29, typename T30,
00700     typename T31, typename T32, typename T33, typename T34, typename T35,
00701     typename T36, typename T37, typename T38, typename T39, typename T40,
00702     typename T41, typename T42, typename T43, typename T44, typename T45,
00703     typename T46, typename T47, typename T48, typename T49, typename T50>
00704 struct Types50 {
00705   typedef T1 Head;
00706   typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
00707       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
00708       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
00709       T44, T45, T46, T47, T48, T49, T50> Tail;
00710 };
00711 
00712 
00713 }  // namespace internal
00714 
00715 // We don't want to require the users to write TypesN<...> directly,
00716 // as that would require them to count the length.  Types<...> is much
00717 // easier to write, but generates horrible messages when there is a
00718 // compiler error, as gcc insists on printing out each template
00719 // argument, even if it has the default value (this means Types<int>
00720 // will appear as Types<int, None, None, ..., None> in the compiler
00721 // errors).
00722 //
00723 // Our solution is to combine the best part of the two approaches: a
00724 // user would write Types<T1, ..., TN>, and Google Test will translate
00725 // that to TypesN<T1, ..., TN> internally to make error messages
00726 // readable.  The translation is done by the 'type' member of the
00727 // Types template.
00728 template <typename T1 = internal::None, typename T2 = internal::None,
00729     typename T3 = internal::None, typename T4 = internal::None,
00730     typename T5 = internal::None, typename T6 = internal::None,
00731     typename T7 = internal::None, typename T8 = internal::None,
00732     typename T9 = internal::None, typename T10 = internal::None,
00733     typename T11 = internal::None, typename T12 = internal::None,
00734     typename T13 = internal::None, typename T14 = internal::None,
00735     typename T15 = internal::None, typename T16 = internal::None,
00736     typename T17 = internal::None, typename T18 = internal::None,
00737     typename T19 = internal::None, typename T20 = internal::None,
00738     typename T21 = internal::None, typename T22 = internal::None,
00739     typename T23 = internal::None, typename T24 = internal::None,
00740     typename T25 = internal::None, typename T26 = internal::None,
00741     typename T27 = internal::None, typename T28 = internal::None,
00742     typename T29 = internal::None, typename T30 = internal::None,
00743     typename T31 = internal::None, typename T32 = internal::None,
00744     typename T33 = internal::None, typename T34 = internal::None,
00745     typename T35 = internal::None, typename T36 = internal::None,
00746     typename T37 = internal::None, typename T38 = internal::None,
00747     typename T39 = internal::None, typename T40 = internal::None,
00748     typename T41 = internal::None, typename T42 = internal::None,
00749     typename T43 = internal::None, typename T44 = internal::None,
00750     typename T45 = internal::None, typename T46 = internal::None,
00751     typename T47 = internal::None, typename T48 = internal::None,
00752     typename T49 = internal::None, typename T50 = internal::None>
00753 struct Types {
00754   typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
00755       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
00756       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
00757       T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
00758 };
00759 
00760 template <>
00761 struct Types<internal::None, internal::None, internal::None, internal::None,
00762     internal::None, internal::None, internal::None, internal::None,
00763     internal::None, internal::None, internal::None, internal::None,
00764     internal::None, internal::None, internal::None, internal::None,
00765     internal::None, internal::None, internal::None, internal::None,
00766     internal::None, internal::None, internal::None, internal::None,
00767     internal::None, internal::None, internal::None, internal::None,
00768     internal::None, internal::None, internal::None, internal::None,
00769     internal::None, internal::None, internal::None, internal::None,
00770     internal::None, internal::None, internal::None, internal::None,
00771     internal::None, internal::None, internal::None, internal::None,
00772     internal::None, internal::None, internal::None, internal::None,
00773     internal::None, internal::None> {
00774   typedef internal::Types0 type;
00775 };
00776 template <typename T1>
00777 struct Types<T1, internal::None, internal::None, internal::None,
00778     internal::None, internal::None, internal::None, internal::None,
00779     internal::None, internal::None, internal::None, internal::None,
00780     internal::None, internal::None, internal::None, internal::None,
00781     internal::None, internal::None, internal::None, internal::None,
00782     internal::None, internal::None, internal::None, internal::None,
00783     internal::None, internal::None, internal::None, internal::None,
00784     internal::None, internal::None, internal::None, internal::None,
00785     internal::None, internal::None, internal::None, internal::None,
00786     internal::None, internal::None, internal::None, internal::None,
00787     internal::None, internal::None, internal::None, internal::None,
00788     internal::None, internal::None, internal::None, internal::None,
00789     internal::None, internal::None> {
00790   typedef internal::Types1<T1> type;
00791 };
00792 template <typename T1, typename T2>
00793 struct Types<T1, T2, internal::None, internal::None, internal::None,
00794     internal::None, internal::None, internal::None, internal::None,
00795     internal::None, internal::None, internal::None, internal::None,
00796     internal::None, internal::None, internal::None, internal::None,
00797     internal::None, internal::None, internal::None, internal::None,
00798     internal::None, internal::None, internal::None, internal::None,
00799     internal::None, internal::None, internal::None, internal::None,
00800     internal::None, internal::None, internal::None, internal::None,
00801     internal::None, internal::None, internal::None, internal::None,
00802     internal::None, internal::None, internal::None, internal::None,
00803     internal::None, internal::None, internal::None, internal::None,
00804     internal::None, internal::None, internal::None, internal::None,
00805     internal::None> {
00806   typedef internal::Types2<T1, T2> type;
00807 };
00808 template <typename T1, typename T2, typename T3>
00809 struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
00810     internal::None, internal::None, internal::None, internal::None,
00811     internal::None, internal::None, internal::None, internal::None,
00812     internal::None, internal::None, internal::None, internal::None,
00813     internal::None, internal::None, internal::None, internal::None,
00814     internal::None, internal::None, internal::None, internal::None,
00815     internal::None, internal::None, internal::None, internal::None,
00816     internal::None, internal::None, internal::None, internal::None,
00817     internal::None, internal::None, internal::None, internal::None,
00818     internal::None, internal::None, internal::None, internal::None,
00819     internal::None, internal::None, internal::None, internal::None,
00820     internal::None, internal::None, internal::None, internal::None> {
00821   typedef internal::Types3<T1, T2, T3> type;
00822 };
00823 template <typename T1, typename T2, typename T3, typename T4>
00824 struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
00825     internal::None, internal::None, internal::None, internal::None,
00826     internal::None, internal::None, internal::None, internal::None,
00827     internal::None, internal::None, internal::None, internal::None,
00828     internal::None, internal::None, internal::None, internal::None,
00829     internal::None, internal::None, internal::None, internal::None,
00830     internal::None, internal::None, internal::None, internal::None,
00831     internal::None, internal::None, internal::None, internal::None,
00832     internal::None, internal::None, internal::None, internal::None,
00833     internal::None, internal::None, internal::None, internal::None,
00834     internal::None, internal::None, internal::None, internal::None,
00835     internal::None, internal::None, internal::None> {
00836   typedef internal::Types4<T1, T2, T3, T4> type;
00837 };
00838 template <typename T1, typename T2, typename T3, typename T4, typename T5>
00839 struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
00840     internal::None, internal::None, internal::None, internal::None,
00841     internal::None, internal::None, internal::None, internal::None,
00842     internal::None, internal::None, internal::None, internal::None,
00843     internal::None, internal::None, internal::None, internal::None,
00844     internal::None, internal::None, internal::None, internal::None,
00845     internal::None, internal::None, internal::None, internal::None,
00846     internal::None, internal::None, internal::None, internal::None,
00847     internal::None, internal::None, internal::None, internal::None,
00848     internal::None, internal::None, internal::None, internal::None,
00849     internal::None, internal::None, internal::None, internal::None,
00850     internal::None, internal::None, internal::None> {
00851   typedef internal::Types5<T1, T2, T3, T4, T5> type;
00852 };
00853 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00854     typename T6>
00855 struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
00856     internal::None, internal::None, internal::None, internal::None,
00857     internal::None, internal::None, internal::None, internal::None,
00858     internal::None, internal::None, internal::None, internal::None,
00859     internal::None, internal::None, internal::None, internal::None,
00860     internal::None, internal::None, internal::None, internal::None,
00861     internal::None, internal::None, internal::None, internal::None,
00862     internal::None, internal::None, internal::None, internal::None,
00863     internal::None, internal::None, internal::None, internal::None,
00864     internal::None, internal::None, internal::None, internal::None,
00865     internal::None, internal::None, internal::None, internal::None,
00866     internal::None, internal::None> {
00867   typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
00868 };
00869 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00870     typename T6, typename T7>
00871 struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
00872     internal::None, internal::None, internal::None, internal::None,
00873     internal::None, internal::None, internal::None, internal::None,
00874     internal::None, internal::None, internal::None, internal::None,
00875     internal::None, internal::None, internal::None, internal::None,
00876     internal::None, internal::None, internal::None, internal::None,
00877     internal::None, internal::None, internal::None, internal::None,
00878     internal::None, internal::None, internal::None, internal::None,
00879     internal::None, internal::None, internal::None, internal::None,
00880     internal::None, internal::None, internal::None, internal::None,
00881     internal::None, internal::None, internal::None, internal::None,
00882     internal::None> {
00883   typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
00884 };
00885 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00886     typename T6, typename T7, typename T8>
00887 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
00888     internal::None, internal::None, internal::None, internal::None,
00889     internal::None, internal::None, internal::None, internal::None,
00890     internal::None, internal::None, internal::None, internal::None,
00891     internal::None, internal::None, internal::None, internal::None,
00892     internal::None, internal::None, internal::None, internal::None,
00893     internal::None, internal::None, internal::None, internal::None,
00894     internal::None, internal::None, internal::None, internal::None,
00895     internal::None, internal::None, internal::None, internal::None,
00896     internal::None, internal::None, internal::None, internal::None,
00897     internal::None, internal::None, internal::None, internal::None> {
00898   typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
00899 };
00900 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00901     typename T6, typename T7, typename T8, typename T9>
00902 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
00903     internal::None, internal::None, internal::None, internal::None,
00904     internal::None, internal::None, internal::None, internal::None,
00905     internal::None, internal::None, internal::None, internal::None,
00906     internal::None, internal::None, internal::None, internal::None,
00907     internal::None, internal::None, internal::None, internal::None,
00908     internal::None, internal::None, internal::None, internal::None,
00909     internal::None, internal::None, internal::None, internal::None,
00910     internal::None, internal::None, internal::None, internal::None,
00911     internal::None, internal::None, internal::None, internal::None,
00912     internal::None, internal::None, internal::None, internal::None> {
00913   typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
00914 };
00915 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00916     typename T6, typename T7, typename T8, typename T9, typename T10>
00917 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
00918     internal::None, internal::None, internal::None, internal::None,
00919     internal::None, internal::None, internal::None, internal::None,
00920     internal::None, internal::None, internal::None, internal::None,
00921     internal::None, internal::None, internal::None, internal::None,
00922     internal::None, internal::None, internal::None, internal::None,
00923     internal::None, internal::None, internal::None, internal::None,
00924     internal::None, internal::None, internal::None, internal::None,
00925     internal::None, internal::None, internal::None, internal::None,
00926     internal::None, internal::None, internal::None, internal::None,
00927     internal::None, internal::None, internal::None> {
00928   typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
00929 };
00930 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00931     typename T6, typename T7, typename T8, typename T9, typename T10,
00932     typename T11>
00933 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
00934     internal::None, internal::None, internal::None, internal::None,
00935     internal::None, internal::None, internal::None, internal::None,
00936     internal::None, internal::None, internal::None, internal::None,
00937     internal::None, internal::None, internal::None, internal::None,
00938     internal::None, internal::None, internal::None, internal::None,
00939     internal::None, internal::None, internal::None, internal::None,
00940     internal::None, internal::None, internal::None, internal::None,
00941     internal::None, internal::None, internal::None, internal::None,
00942     internal::None, internal::None, internal::None, internal::None,
00943     internal::None, internal::None> {
00944   typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
00945 };
00946 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00947     typename T6, typename T7, typename T8, typename T9, typename T10,
00948     typename T11, typename T12>
00949 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
00950     internal::None, internal::None, internal::None, internal::None,
00951     internal::None, internal::None, internal::None, internal::None,
00952     internal::None, internal::None, internal::None, internal::None,
00953     internal::None, internal::None, internal::None, internal::None,
00954     internal::None, internal::None, internal::None, internal::None,
00955     internal::None, internal::None, internal::None, internal::None,
00956     internal::None, internal::None, internal::None, internal::None,
00957     internal::None, internal::None, internal::None, internal::None,
00958     internal::None, internal::None, internal::None, internal::None,
00959     internal::None> {
00960   typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
00961       T12> type;
00962 };
00963 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00964     typename T6, typename T7, typename T8, typename T9, typename T10,
00965     typename T11, typename T12, typename T13>
00966 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
00967     internal::None, internal::None, internal::None, internal::None,
00968     internal::None, internal::None, internal::None, internal::None,
00969     internal::None, internal::None, internal::None, internal::None,
00970     internal::None, internal::None, internal::None, internal::None,
00971     internal::None, internal::None, internal::None, internal::None,
00972     internal::None, internal::None, internal::None, internal::None,
00973     internal::None, internal::None, internal::None, internal::None,
00974     internal::None, internal::None, internal::None, internal::None,
00975     internal::None, internal::None, internal::None, internal::None,
00976     internal::None> {
00977   typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
00978       T13> type;
00979 };
00980 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00981     typename T6, typename T7, typename T8, typename T9, typename T10,
00982     typename T11, typename T12, typename T13, typename T14>
00983 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
00984     internal::None, internal::None, internal::None, internal::None,
00985     internal::None, internal::None, internal::None, internal::None,
00986     internal::None, internal::None, internal::None, internal::None,
00987     internal::None, internal::None, internal::None, internal::None,
00988     internal::None, internal::None, internal::None, internal::None,
00989     internal::None, internal::None, internal::None, internal::None,
00990     internal::None, internal::None, internal::None, internal::None,
00991     internal::None, internal::None, internal::None, internal::None,
00992     internal::None, internal::None, internal::None, internal::None> {
00993   typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
00994       T13, T14> type;
00995 };
00996 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00997     typename T6, typename T7, typename T8, typename T9, typename T10,
00998     typename T11, typename T12, typename T13, typename T14, typename T15>
00999 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01000     internal::None, internal::None, internal::None, internal::None,
01001     internal::None, internal::None, internal::None, internal::None,
01002     internal::None, internal::None, internal::None, internal::None,
01003     internal::None, internal::None, internal::None, internal::None,
01004     internal::None, internal::None, internal::None, internal::None,
01005     internal::None, internal::None, internal::None, internal::None,
01006     internal::None, internal::None, internal::None, internal::None,
01007     internal::None, internal::None, internal::None, internal::None,
01008     internal::None, internal::None, internal::None> {
01009   typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01010       T13, T14, T15> type;
01011 };
01012 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01013     typename T6, typename T7, typename T8, typename T9, typename T10,
01014     typename T11, typename T12, typename T13, typename T14, typename T15,
01015     typename T16>
01016 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01017     T16, internal::None, internal::None, internal::None, internal::None,
01018     internal::None, internal::None, internal::None, internal::None,
01019     internal::None, internal::None, internal::None, internal::None,
01020     internal::None, internal::None, internal::None, internal::None,
01021     internal::None, internal::None, internal::None, internal::None,
01022     internal::None, internal::None, internal::None, internal::None,
01023     internal::None, internal::None, internal::None, internal::None,
01024     internal::None, internal::None, internal::None, internal::None,
01025     internal::None, internal::None> {
01026   typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01027       T13, T14, T15, T16> type;
01028 };
01029 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01030     typename T6, typename T7, typename T8, typename T9, typename T10,
01031     typename T11, typename T12, typename T13, typename T14, typename T15,
01032     typename T16, typename T17>
01033 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01034     T16, T17, internal::None, internal::None, internal::None, internal::None,
01035     internal::None, internal::None, internal::None, internal::None,
01036     internal::None, internal::None, internal::None, internal::None,
01037     internal::None, internal::None, internal::None, internal::None,
01038     internal::None, internal::None, internal::None, internal::None,
01039     internal::None, internal::None, internal::None, internal::None,
01040     internal::None, internal::None, internal::None, internal::None,
01041     internal::None, internal::None, internal::None, internal::None,
01042     internal::None> {
01043   typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01044       T13, T14, T15, T16, T17> type;
01045 };
01046 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01047     typename T6, typename T7, typename T8, typename T9, typename T10,
01048     typename T11, typename T12, typename T13, typename T14, typename T15,
01049     typename T16, typename T17, typename T18>
01050 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01051     T16, T17, T18, internal::None, internal::None, internal::None,
01052     internal::None, internal::None, internal::None, internal::None,
01053     internal::None, internal::None, internal::None, internal::None,
01054     internal::None, internal::None, internal::None, internal::None,
01055     internal::None, internal::None, internal::None, internal::None,
01056     internal::None, internal::None, internal::None, internal::None,
01057     internal::None, internal::None, internal::None, internal::None,
01058     internal::None, internal::None, internal::None, internal::None,
01059     internal::None> {
01060   typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01061       T13, T14, T15, T16, T17, T18> type;
01062 };
01063 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01064     typename T6, typename T7, typename T8, typename T9, typename T10,
01065     typename T11, typename T12, typename T13, typename T14, typename T15,
01066     typename T16, typename T17, typename T18, typename T19>
01067 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01068     T16, T17, T18, T19, internal::None, internal::None, internal::None,
01069     internal::None, internal::None, internal::None, internal::None,
01070     internal::None, internal::None, internal::None, internal::None,
01071     internal::None, internal::None, internal::None, internal::None,
01072     internal::None, internal::None, internal::None, internal::None,
01073     internal::None, internal::None, internal::None, internal::None,
01074     internal::None, internal::None, internal::None, internal::None,
01075     internal::None, internal::None, internal::None, internal::None> {
01076   typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01077       T13, T14, T15, T16, T17, T18, T19> type;
01078 };
01079 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01080     typename T6, typename T7, typename T8, typename T9, typename T10,
01081     typename T11, typename T12, typename T13, typename T14, typename T15,
01082     typename T16, typename T17, typename T18, typename T19, typename T20>
01083 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01084     T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
01085     internal::None, internal::None, internal::None, internal::None,
01086     internal::None, internal::None, internal::None, internal::None,
01087     internal::None, internal::None, internal::None, internal::None,
01088     internal::None, internal::None, internal::None, internal::None,
01089     internal::None, internal::None, internal::None, internal::None,
01090     internal::None, internal::None, internal::None, internal::None,
01091     internal::None, internal::None, internal::None> {
01092   typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01093       T13, T14, T15, T16, T17, T18, T19, T20> type;
01094 };
01095 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01096     typename T6, typename T7, typename T8, typename T9, typename T10,
01097     typename T11, typename T12, typename T13, typename T14, typename T15,
01098     typename T16, typename T17, typename T18, typename T19, typename T20,
01099     typename T21>
01100 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01101     T16, T17, T18, T19, T20, T21, internal::None, internal::None,
01102     internal::None, internal::None, internal::None, internal::None,
01103     internal::None, internal::None, internal::None, internal::None,
01104     internal::None, internal::None, internal::None, internal::None,
01105     internal::None, internal::None, internal::None, internal::None,
01106     internal::None, internal::None, internal::None, internal::None,
01107     internal::None, internal::None, internal::None, internal::None,
01108     internal::None, internal::None, internal::None> {
01109   typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01110       T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
01111 };
01112 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01113     typename T6, typename T7, typename T8, typename T9, typename T10,
01114     typename T11, typename T12, typename T13, typename T14, typename T15,
01115     typename T16, typename T17, typename T18, typename T19, typename T20,
01116     typename T21, typename T22>
01117 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01118     T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
01119     internal::None, internal::None, internal::None, internal::None,
01120     internal::None, internal::None, internal::None, internal::None,
01121     internal::None, internal::None, internal::None, internal::None,
01122     internal::None, internal::None, internal::None, internal::None,
01123     internal::None, internal::None, internal::None, internal::None,
01124     internal::None, internal::None, internal::None, internal::None,
01125     internal::None, internal::None> {
01126   typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01127       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
01128 };
01129 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01130     typename T6, typename T7, typename T8, typename T9, typename T10,
01131     typename T11, typename T12, typename T13, typename T14, typename T15,
01132     typename T16, typename T17, typename T18, typename T19, typename T20,
01133     typename T21, typename T22, typename T23>
01134 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01135     T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
01136     internal::None, internal::None, internal::None, internal::None,
01137     internal::None, internal::None, internal::None, internal::None,
01138     internal::None, internal::None, internal::None, internal::None,
01139     internal::None, internal::None, internal::None, internal::None,
01140     internal::None, internal::None, internal::None, internal::None,
01141     internal::None, internal::None, internal::None, internal::None,
01142     internal::None> {
01143   typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01144       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
01145 };
01146 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01147     typename T6, typename T7, typename T8, typename T9, typename T10,
01148     typename T11, typename T12, typename T13, typename T14, typename T15,
01149     typename T16, typename T17, typename T18, typename T19, typename T20,
01150     typename T21, typename T22, typename T23, typename T24>
01151 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01152     T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
01153     internal::None, internal::None, internal::None, internal::None,
01154     internal::None, internal::None, internal::None, internal::None,
01155     internal::None, internal::None, internal::None, internal::None,
01156     internal::None, internal::None, internal::None, internal::None,
01157     internal::None, internal::None, internal::None, internal::None,
01158     internal::None, internal::None, internal::None, internal::None,
01159     internal::None> {
01160   typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01161       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
01162 };
01163 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01164     typename T6, typename T7, typename T8, typename T9, typename T10,
01165     typename T11, typename T12, typename T13, typename T14, typename T15,
01166     typename T16, typename T17, typename T18, typename T19, typename T20,
01167     typename T21, typename T22, typename T23, typename T24, typename T25>
01168 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01169     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
01170     internal::None, internal::None, internal::None, internal::None,
01171     internal::None, internal::None, internal::None, internal::None,
01172     internal::None, internal::None, internal::None, internal::None,
01173     internal::None, internal::None, internal::None, internal::None,
01174     internal::None, internal::None, internal::None, internal::None,
01175     internal::None, internal::None, internal::None, internal::None> {
01176   typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01177       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
01178 };
01179 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01180     typename T6, typename T7, typename T8, typename T9, typename T10,
01181     typename T11, typename T12, typename T13, typename T14, typename T15,
01182     typename T16, typename T17, typename T18, typename T19, typename T20,
01183     typename T21, typename T22, typename T23, typename T24, typename T25,
01184     typename T26>
01185 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01186     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
01187     internal::None, internal::None, internal::None, internal::None,
01188     internal::None, internal::None, internal::None, internal::None,
01189     internal::None, internal::None, internal::None, internal::None,
01190     internal::None, internal::None, internal::None, internal::None,
01191     internal::None, internal::None, internal::None, internal::None,
01192     internal::None, internal::None, internal::None> {
01193   typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01194       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
01195       T26> type;
01196 };
01197 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01198     typename T6, typename T7, typename T8, typename T9, typename T10,
01199     typename T11, typename T12, typename T13, typename T14, typename T15,
01200     typename T16, typename T17, typename T18, typename T19, typename T20,
01201     typename T21, typename T22, typename T23, typename T24, typename T25,
01202     typename T26, typename T27>
01203 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01204     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
01205     internal::None, internal::None, internal::None, internal::None,
01206     internal::None, internal::None, internal::None, internal::None,
01207     internal::None, internal::None, internal::None, internal::None,
01208     internal::None, internal::None, internal::None, internal::None,
01209     internal::None, internal::None, internal::None, internal::None,
01210     internal::None, internal::None> {
01211   typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01212       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01213       T27> type;
01214 };
01215 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01216     typename T6, typename T7, typename T8, typename T9, typename T10,
01217     typename T11, typename T12, typename T13, typename T14, typename T15,
01218     typename T16, typename T17, typename T18, typename T19, typename T20,
01219     typename T21, typename T22, typename T23, typename T24, typename T25,
01220     typename T26, typename T27, typename T28>
01221 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01222     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
01223     internal::None, internal::None, internal::None, internal::None,
01224     internal::None, internal::None, internal::None, internal::None,
01225     internal::None, internal::None, internal::None, internal::None,
01226     internal::None, internal::None, internal::None, internal::None,
01227     internal::None, internal::None, internal::None, internal::None,
01228     internal::None, internal::None> {
01229   typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01230       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01231       T27, T28> type;
01232 };
01233 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01234     typename T6, typename T7, typename T8, typename T9, typename T10,
01235     typename T11, typename T12, typename T13, typename T14, typename T15,
01236     typename T16, typename T17, typename T18, typename T19, typename T20,
01237     typename T21, typename T22, typename T23, typename T24, typename T25,
01238     typename T26, typename T27, typename T28, typename T29>
01239 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01240     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
01241     internal::None, internal::None, internal::None, internal::None,
01242     internal::None, internal::None, internal::None, internal::None,
01243     internal::None, internal::None, internal::None, internal::None,
01244     internal::None, internal::None, internal::None, internal::None,
01245     internal::None, internal::None, internal::None, internal::None,
01246     internal::None> {
01247   typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01248       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01249       T27, T28, T29> type;
01250 };
01251 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01252     typename T6, typename T7, typename T8, typename T9, typename T10,
01253     typename T11, typename T12, typename T13, typename T14, typename T15,
01254     typename T16, typename T17, typename T18, typename T19, typename T20,
01255     typename T21, typename T22, typename T23, typename T24, typename T25,
01256     typename T26, typename T27, typename T28, typename T29, typename T30>
01257 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01258     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01259     internal::None, internal::None, internal::None, internal::None,
01260     internal::None, internal::None, internal::None, internal::None,
01261     internal::None, internal::None, internal::None, internal::None,
01262     internal::None, internal::None, internal::None, internal::None,
01263     internal::None, internal::None, internal::None, internal::None> {
01264   typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01265       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01266       T27, T28, T29, T30> type;
01267 };
01268 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01269     typename T6, typename T7, typename T8, typename T9, typename T10,
01270     typename T11, typename T12, typename T13, typename T14, typename T15,
01271     typename T16, typename T17, typename T18, typename T19, typename T20,
01272     typename T21, typename T22, typename T23, typename T24, typename T25,
01273     typename T26, typename T27, typename T28, typename T29, typename T30,
01274     typename T31>
01275 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01276     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01277     T31, internal::None, internal::None, internal::None, internal::None,
01278     internal::None, internal::None, internal::None, internal::None,
01279     internal::None, internal::None, internal::None, internal::None,
01280     internal::None, internal::None, internal::None, internal::None,
01281     internal::None, internal::None, internal::None> {
01282   typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01283       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01284       T27, T28, T29, T30, T31> type;
01285 };
01286 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01287     typename T6, typename T7, typename T8, typename T9, typename T10,
01288     typename T11, typename T12, typename T13, typename T14, typename T15,
01289     typename T16, typename T17, typename T18, typename T19, typename T20,
01290     typename T21, typename T22, typename T23, typename T24, typename T25,
01291     typename T26, typename T27, typename T28, typename T29, typename T30,
01292     typename T31, typename T32>
01293 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01294     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01295     T31, T32, internal::None, internal::None, internal::None, internal::None,
01296     internal::None, internal::None, internal::None, internal::None,
01297     internal::None, internal::None, internal::None, internal::None,
01298     internal::None, internal::None, internal::None, internal::None,
01299     internal::None, internal::None> {
01300   typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01301       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01302       T27, T28, T29, T30, T31, T32> type;
01303 };
01304 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01305     typename T6, typename T7, typename T8, typename T9, typename T10,
01306     typename T11, typename T12, typename T13, typename T14, typename T15,
01307     typename T16, typename T17, typename T18, typename T19, typename T20,
01308     typename T21, typename T22, typename T23, typename T24, typename T25,
01309     typename T26, typename T27, typename T28, typename T29, typename T30,
01310     typename T31, typename T32, typename T33>
01311 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01312     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01313     T31, T32, T33, internal::None, internal::None, internal::None,
01314     internal::None, internal::None, internal::None, internal::None,
01315     internal::None, internal::None, internal::None, internal::None,
01316     internal::None, internal::None, internal::None, internal::None,
01317     internal::None, internal::None> {
01318   typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01319       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01320       T27, T28, T29, T30, T31, T32, T33> type;
01321 };
01322 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01323     typename T6, typename T7, typename T8, typename T9, typename T10,
01324     typename T11, typename T12, typename T13, typename T14, typename T15,
01325     typename T16, typename T17, typename T18, typename T19, typename T20,
01326     typename T21, typename T22, typename T23, typename T24, typename T25,
01327     typename T26, typename T27, typename T28, typename T29, typename T30,
01328     typename T31, typename T32, typename T33, typename T34>
01329 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01330     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01331     T31, T32, T33, T34, internal::None, internal::None, internal::None,
01332     internal::None, internal::None, internal::None, internal::None,
01333     internal::None, internal::None, internal::None, internal::None,
01334     internal::None, internal::None, internal::None, internal::None,
01335     internal::None> {
01336   typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01337       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01338       T27, T28, T29, T30, T31, T32, T33, T34> type;
01339 };
01340 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01341     typename T6, typename T7, typename T8, typename T9, typename T10,
01342     typename T11, typename T12, typename T13, typename T14, typename T15,
01343     typename T16, typename T17, typename T18, typename T19, typename T20,
01344     typename T21, typename T22, typename T23, typename T24, typename T25,
01345     typename T26, typename T27, typename T28, typename T29, typename T30,
01346     typename T31, typename T32, typename T33, typename T34, typename T35>
01347 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01348     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01349     T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
01350     internal::None, internal::None, internal::None, internal::None,
01351     internal::None, internal::None, internal::None, internal::None,
01352     internal::None, internal::None, internal::None, internal::None> {
01353   typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01354       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01355       T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
01356 };
01357 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01358     typename T6, typename T7, typename T8, typename T9, typename T10,
01359     typename T11, typename T12, typename T13, typename T14, typename T15,
01360     typename T16, typename T17, typename T18, typename T19, typename T20,
01361     typename T21, typename T22, typename T23, typename T24, typename T25,
01362     typename T26, typename T27, typename T28, typename T29, typename T30,
01363     typename T31, typename T32, typename T33, typename T34, typename T35,
01364     typename T36>
01365 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01366     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01367     T31, T32, T33, T34, T35, T36, internal::None, internal::None,
01368     internal::None, internal::None, internal::None, internal::None,
01369     internal::None, internal::None, internal::None, internal::None,
01370     internal::None, internal::None, internal::None, internal::None> {
01371   typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01372       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01373       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
01374 };
01375 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01376     typename T6, typename T7, typename T8, typename T9, typename T10,
01377     typename T11, typename T12, typename T13, typename T14, typename T15,
01378     typename T16, typename T17, typename T18, typename T19, typename T20,
01379     typename T21, typename T22, typename T23, typename T24, typename T25,
01380     typename T26, typename T27, typename T28, typename T29, typename T30,
01381     typename T31, typename T32, typename T33, typename T34, typename T35,
01382     typename T36, typename T37>
01383 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01384     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01385     T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
01386     internal::None, internal::None, internal::None, internal::None,
01387     internal::None, internal::None, internal::None, internal::None,
01388     internal::None, internal::None, internal::None> {
01389   typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01390       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01391       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
01392 };
01393 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01394     typename T6, typename T7, typename T8, typename T9, typename T10,
01395     typename T11, typename T12, typename T13, typename T14, typename T15,
01396     typename T16, typename T17, typename T18, typename T19, typename T20,
01397     typename T21, typename T22, typename T23, typename T24, typename T25,
01398     typename T26, typename T27, typename T28, typename T29, typename T30,
01399     typename T31, typename T32, typename T33, typename T34, typename T35,
01400     typename T36, typename T37, typename T38>
01401 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01402     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01403     T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
01404     internal::None, internal::None, internal::None, internal::None,
01405     internal::None, internal::None, internal::None, internal::None,
01406     internal::None, internal::None> {
01407   typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01408       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01409       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
01410 };
01411 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01412     typename T6, typename T7, typename T8, typename T9, typename T10,
01413     typename T11, typename T12, typename T13, typename T14, typename T15,
01414     typename T16, typename T17, typename T18, typename T19, typename T20,
01415     typename T21, typename T22, typename T23, typename T24, typename T25,
01416     typename T26, typename T27, typename T28, typename T29, typename T30,
01417     typename T31, typename T32, typename T33, typename T34, typename T35,
01418     typename T36, typename T37, typename T38, typename T39>
01419 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01420     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01421     T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
01422     internal::None, internal::None, internal::None, internal::None,
01423     internal::None, internal::None, internal::None, internal::None,
01424     internal::None, internal::None> {
01425   typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01426       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01427       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
01428 };
01429 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01430     typename T6, typename T7, typename T8, typename T9, typename T10,
01431     typename T11, typename T12, typename T13, typename T14, typename T15,
01432     typename T16, typename T17, typename T18, typename T19, typename T20,
01433     typename T21, typename T22, typename T23, typename T24, typename T25,
01434     typename T26, typename T27, typename T28, typename T29, typename T30,
01435     typename T31, typename T32, typename T33, typename T34, typename T35,
01436     typename T36, typename T37, typename T38, typename T39, typename T40>
01437 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01438     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01439     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
01440     internal::None, internal::None, internal::None, internal::None,
01441     internal::None, internal::None, internal::None, internal::None,
01442     internal::None> {
01443   typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01444       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01445       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
01446       T40> type;
01447 };
01448 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01449     typename T6, typename T7, typename T8, typename T9, typename T10,
01450     typename T11, typename T12, typename T13, typename T14, typename T15,
01451     typename T16, typename T17, typename T18, typename T19, typename T20,
01452     typename T21, typename T22, typename T23, typename T24, typename T25,
01453     typename T26, typename T27, typename T28, typename T29, typename T30,
01454     typename T31, typename T32, typename T33, typename T34, typename T35,
01455     typename T36, typename T37, typename T38, typename T39, typename T40,
01456     typename T41>
01457 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01458     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01459     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
01460     internal::None, internal::None, internal::None, internal::None,
01461     internal::None, internal::None, internal::None, internal::None> {
01462   typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01463       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01464       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01465       T41> type;
01466 };
01467 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01468     typename T6, typename T7, typename T8, typename T9, typename T10,
01469     typename T11, typename T12, typename T13, typename T14, typename T15,
01470     typename T16, typename T17, typename T18, typename T19, typename T20,
01471     typename T21, typename T22, typename T23, typename T24, typename T25,
01472     typename T26, typename T27, typename T28, typename T29, typename T30,
01473     typename T31, typename T32, typename T33, typename T34, typename T35,
01474     typename T36, typename T37, typename T38, typename T39, typename T40,
01475     typename T41, typename T42>
01476 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01477     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01478     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
01479     internal::None, internal::None, internal::None, internal::None,
01480     internal::None, internal::None, internal::None> {
01481   typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01482       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01483       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01484       T41, T42> type;
01485 };
01486 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01487     typename T6, typename T7, typename T8, typename T9, typename T10,
01488     typename T11, typename T12, typename T13, typename T14, typename T15,
01489     typename T16, typename T17, typename T18, typename T19, typename T20,
01490     typename T21, typename T22, typename T23, typename T24, typename T25,
01491     typename T26, typename T27, typename T28, typename T29, typename T30,
01492     typename T31, typename T32, typename T33, typename T34, typename T35,
01493     typename T36, typename T37, typename T38, typename T39, typename T40,
01494     typename T41, typename T42, typename T43>
01495 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01496     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01497     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
01498     internal::None, internal::None, internal::None, internal::None,
01499     internal::None, internal::None, internal::None> {
01500   typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01501       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01502       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01503       T41, T42, T43> type;
01504 };
01505 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01506     typename T6, typename T7, typename T8, typename T9, typename T10,
01507     typename T11, typename T12, typename T13, typename T14, typename T15,
01508     typename T16, typename T17, typename T18, typename T19, typename T20,
01509     typename T21, typename T22, typename T23, typename T24, typename T25,
01510     typename T26, typename T27, typename T28, typename T29, typename T30,
01511     typename T31, typename T32, typename T33, typename T34, typename T35,
01512     typename T36, typename T37, typename T38, typename T39, typename T40,
01513     typename T41, typename T42, typename T43, typename T44>
01514 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01515     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01516     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
01517     internal::None, internal::None, internal::None, internal::None,
01518     internal::None, internal::None> {
01519   typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01520       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01521       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01522       T41, T42, T43, T44> type;
01523 };
01524 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01525     typename T6, typename T7, typename T8, typename T9, typename T10,
01526     typename T11, typename T12, typename T13, typename T14, typename T15,
01527     typename T16, typename T17, typename T18, typename T19, typename T20,
01528     typename T21, typename T22, typename T23, typename T24, typename T25,
01529     typename T26, typename T27, typename T28, typename T29, typename T30,
01530     typename T31, typename T32, typename T33, typename T34, typename T35,
01531     typename T36, typename T37, typename T38, typename T39, typename T40,
01532     typename T41, typename T42, typename T43, typename T44, typename T45>
01533 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01534     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01535     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
01536     internal::None, internal::None, internal::None, internal::None,
01537     internal::None> {
01538   typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01539       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01540       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01541       T41, T42, T43, T44, T45> type;
01542 };
01543 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01544     typename T6, typename T7, typename T8, typename T9, typename T10,
01545     typename T11, typename T12, typename T13, typename T14, typename T15,
01546     typename T16, typename T17, typename T18, typename T19, typename T20,
01547     typename T21, typename T22, typename T23, typename T24, typename T25,
01548     typename T26, typename T27, typename T28, typename T29, typename T30,
01549     typename T31, typename T32, typename T33, typename T34, typename T35,
01550     typename T36, typename T37, typename T38, typename T39, typename T40,
01551     typename T41, typename T42, typename T43, typename T44, typename T45,
01552     typename T46>
01553 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01554     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01555     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
01556     T46, internal::None, internal::None, internal::None, internal::None> {
01557   typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01558       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01559       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01560       T41, T42, T43, T44, T45, T46> type;
01561 };
01562 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01563     typename T6, typename T7, typename T8, typename T9, typename T10,
01564     typename T11, typename T12, typename T13, typename T14, typename T15,
01565     typename T16, typename T17, typename T18, typename T19, typename T20,
01566     typename T21, typename T22, typename T23, typename T24, typename T25,
01567     typename T26, typename T27, typename T28, typename T29, typename T30,
01568     typename T31, typename T32, typename T33, typename T34, typename T35,
01569     typename T36, typename T37, typename T38, typename T39, typename T40,
01570     typename T41, typename T42, typename T43, typename T44, typename T45,
01571     typename T46, typename T47>
01572 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01573     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01574     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
01575     T46, T47, internal::None, internal::None, internal::None> {
01576   typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01577       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01578       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01579       T41, T42, T43, T44, T45, T46, T47> type;
01580 };
01581 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01582     typename T6, typename T7, typename T8, typename T9, typename T10,
01583     typename T11, typename T12, typename T13, typename T14, typename T15,
01584     typename T16, typename T17, typename T18, typename T19, typename T20,
01585     typename T21, typename T22, typename T23, typename T24, typename T25,
01586     typename T26, typename T27, typename T28, typename T29, typename T30,
01587     typename T31, typename T32, typename T33, typename T34, typename T35,
01588     typename T36, typename T37, typename T38, typename T39, typename T40,
01589     typename T41, typename T42, typename T43, typename T44, typename T45,
01590     typename T46, typename T47, typename T48>
01591 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01592     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01593     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
01594     T46, T47, T48, internal::None, internal::None> {
01595   typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01596       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01597       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01598       T41, T42, T43, T44, T45, T46, T47, T48> type;
01599 };
01600 template <typename T1, typename T2, typename T3, typename T4, typename T5,
01601     typename T6, typename T7, typename T8, typename T9, typename T10,
01602     typename T11, typename T12, typename T13, typename T14, typename T15,
01603     typename T16, typename T17, typename T18, typename T19, typename T20,
01604     typename T21, typename T22, typename T23, typename T24, typename T25,
01605     typename T26, typename T27, typename T28, typename T29, typename T30,
01606     typename T31, typename T32, typename T33, typename T34, typename T35,
01607     typename T36, typename T37, typename T38, typename T39, typename T40,
01608     typename T41, typename T42, typename T43, typename T44, typename T45,
01609     typename T46, typename T47, typename T48, typename T49>
01610 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
01611     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
01612     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
01613     T46, T47, T48, T49, internal::None> {
01614   typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
01615       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
01616       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
01617       T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
01618 };
01619 
01620 namespace internal {
01621 
01622 # define GTEST_TEMPLATE_ template <typename T> class
01623 
01624 // The template "selector" struct TemplateSel<Tmpl> is used to
01625 // represent Tmpl, which must be a class template with one type
01626 // parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
01627 // as the type Tmpl<T>.  This allows us to actually instantiate the
01628 // template "selected" by TemplateSel<Tmpl>.
01629 //
01630 // This trick is necessary for simulating typedef for class templates,
01631 // which C++ doesn't support directly.
01632 template <GTEST_TEMPLATE_ Tmpl>
01633 struct TemplateSel {
01634   template <typename T>
01635   struct Bind {
01636     typedef Tmpl<T> type;
01637   };
01638 };
01639 
01640 # define GTEST_BIND_(TmplSel, T) \
01641   TmplSel::template Bind<T>::type
01642 
01643 // A unique struct template used as the default value for the
01644 // arguments of class template Templates.  This allows us to simulate
01645 // variadic templates (e.g. Templates<int>, Templates<int, double>,
01646 // and etc), which C++ doesn't support directly.
01647 template <typename T>
01648 struct NoneT {};
01649 
01650 // The following family of struct and struct templates are used to
01651 // represent template lists.  In particular, TemplatesN<T1, T2, ...,
01652 // TN> represents a list of N templates (T1, T2, ..., and TN).  Except
01653 // for Templates0, every struct in the family has two member types:
01654 // Head for the selector of the first template in the list, and Tail
01655 // for the rest of the list.
01656 
01657 // The empty template list.
01658 struct Templates0 {};
01659 
01660 // Template lists of length 1, 2, 3, and so on.
01661 
01662 template <GTEST_TEMPLATE_ T1>
01663 struct Templates1 {
01664   typedef TemplateSel<T1> Head;
01665   typedef Templates0 Tail;
01666 };
01667 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
01668 struct Templates2 {
01669   typedef TemplateSel<T1> Head;
01670   typedef Templates1<T2> Tail;
01671 };
01672 
01673 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
01674 struct Templates3 {
01675   typedef TemplateSel<T1> Head;
01676   typedef Templates2<T2, T3> Tail;
01677 };
01678 
01679 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01680     GTEST_TEMPLATE_ T4>
01681 struct Templates4 {
01682   typedef TemplateSel<T1> Head;
01683   typedef Templates3<T2, T3, T4> Tail;
01684 };
01685 
01686 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01687     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
01688 struct Templates5 {
01689   typedef TemplateSel<T1> Head;
01690   typedef Templates4<T2, T3, T4, T5> Tail;
01691 };
01692 
01693 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01694     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
01695 struct Templates6 {
01696   typedef TemplateSel<T1> Head;
01697   typedef Templates5<T2, T3, T4, T5, T6> Tail;
01698 };
01699 
01700 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01701     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01702     GTEST_TEMPLATE_ T7>
01703 struct Templates7 {
01704   typedef TemplateSel<T1> Head;
01705   typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
01706 };
01707 
01708 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01709     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01710     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
01711 struct Templates8 {
01712   typedef TemplateSel<T1> Head;
01713   typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
01714 };
01715 
01716 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01717     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01718     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
01719 struct Templates9 {
01720   typedef TemplateSel<T1> Head;
01721   typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
01722 };
01723 
01724 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01725     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01726     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01727     GTEST_TEMPLATE_ T10>
01728 struct Templates10 {
01729   typedef TemplateSel<T1> Head;
01730   typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
01731 };
01732 
01733 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01734     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01735     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01736     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
01737 struct Templates11 {
01738   typedef TemplateSel<T1> Head;
01739   typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
01740 };
01741 
01742 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01743     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01744     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01745     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
01746 struct Templates12 {
01747   typedef TemplateSel<T1> Head;
01748   typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
01749 };
01750 
01751 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01752     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01753     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01754     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01755     GTEST_TEMPLATE_ T13>
01756 struct Templates13 {
01757   typedef TemplateSel<T1> Head;
01758   typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
01759 };
01760 
01761 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01762     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01763     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01764     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01765     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
01766 struct Templates14 {
01767   typedef TemplateSel<T1> Head;
01768   typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
01769       T14> Tail;
01770 };
01771 
01772 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01773     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01774     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01775     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01776     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
01777 struct Templates15 {
01778   typedef TemplateSel<T1> Head;
01779   typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01780       T15> Tail;
01781 };
01782 
01783 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01784     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01785     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01786     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01787     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01788     GTEST_TEMPLATE_ T16>
01789 struct Templates16 {
01790   typedef TemplateSel<T1> Head;
01791   typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01792       T15, T16> Tail;
01793 };
01794 
01795 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01796     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01797     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01798     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01799     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01800     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
01801 struct Templates17 {
01802   typedef TemplateSel<T1> Head;
01803   typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01804       T15, T16, T17> Tail;
01805 };
01806 
01807 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01808     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01809     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01810     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01811     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01812     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
01813 struct Templates18 {
01814   typedef TemplateSel<T1> Head;
01815   typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01816       T15, T16, T17, T18> Tail;
01817 };
01818 
01819 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01820     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01821     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01822     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01823     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01824     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01825     GTEST_TEMPLATE_ T19>
01826 struct Templates19 {
01827   typedef TemplateSel<T1> Head;
01828   typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01829       T15, T16, T17, T18, T19> Tail;
01830 };
01831 
01832 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01833     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01834     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01835     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01836     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01837     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01838     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
01839 struct Templates20 {
01840   typedef TemplateSel<T1> Head;
01841   typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01842       T15, T16, T17, T18, T19, T20> Tail;
01843 };
01844 
01845 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01846     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01847     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01848     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01849     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01850     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01851     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
01852 struct Templates21 {
01853   typedef TemplateSel<T1> Head;
01854   typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01855       T15, T16, T17, T18, T19, T20, T21> Tail;
01856 };
01857 
01858 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01859     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01860     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01861     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01862     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01863     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01864     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01865     GTEST_TEMPLATE_ T22>
01866 struct Templates22 {
01867   typedef TemplateSel<T1> Head;
01868   typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01869       T15, T16, T17, T18, T19, T20, T21, T22> Tail;
01870 };
01871 
01872 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01873     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01874     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01875     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01876     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01877     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01878     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01879     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
01880 struct Templates23 {
01881   typedef TemplateSel<T1> Head;
01882   typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01883       T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
01884 };
01885 
01886 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01887     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01888     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01889     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01890     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01891     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01892     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01893     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
01894 struct Templates24 {
01895   typedef TemplateSel<T1> Head;
01896   typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01897       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
01898 };
01899 
01900 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01901     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01902     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01903     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01904     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01905     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01906     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01907     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01908     GTEST_TEMPLATE_ T25>
01909 struct Templates25 {
01910   typedef TemplateSel<T1> Head;
01911   typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01912       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
01913 };
01914 
01915 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01916     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01917     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01918     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01919     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01920     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01921     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01922     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01923     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
01924 struct Templates26 {
01925   typedef TemplateSel<T1> Head;
01926   typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01927       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
01928 };
01929 
01930 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01931     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01932     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01933     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01934     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01935     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01936     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01937     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01938     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
01939 struct Templates27 {
01940   typedef TemplateSel<T1> Head;
01941   typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01942       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
01943 };
01944 
01945 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01946     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01947     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01948     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01949     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01950     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01951     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01952     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01953     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
01954     GTEST_TEMPLATE_ T28>
01955 struct Templates28 {
01956   typedef TemplateSel<T1> Head;
01957   typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01958       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
01959       T28> Tail;
01960 };
01961 
01962 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01963     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01964     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01965     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01966     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01967     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01968     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01969     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01970     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
01971     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
01972 struct Templates29 {
01973   typedef TemplateSel<T1> Head;
01974   typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01975       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
01976       T29> Tail;
01977 };
01978 
01979 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01980     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01981     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01982     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
01983     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
01984     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
01985     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
01986     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
01987     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
01988     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
01989 struct Templates30 {
01990   typedef TemplateSel<T1> Head;
01991   typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
01992       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
01993       T29, T30> Tail;
01994 };
01995 
01996 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
01997     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
01998     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
01999     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02000     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02001     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02002     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02003     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02004     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02005     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02006     GTEST_TEMPLATE_ T31>
02007 struct Templates31 {
02008   typedef TemplateSel<T1> Head;
02009   typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02010       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02011       T29, T30, T31> Tail;
02012 };
02013 
02014 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02015     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02016     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02017     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02018     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02019     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02020     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02021     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02022     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02023     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02024     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
02025 struct Templates32 {
02026   typedef TemplateSel<T1> Head;
02027   typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02028       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02029       T29, T30, T31, T32> Tail;
02030 };
02031 
02032 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02033     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02034     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02035     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02036     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02037     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02038     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02039     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02040     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02041     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02042     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
02043 struct Templates33 {
02044   typedef TemplateSel<T1> Head;
02045   typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02046       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02047       T29, T30, T31, T32, T33> Tail;
02048 };
02049 
02050 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02051     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02052     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02053     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02054     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02055     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02056     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02057     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02058     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02059     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02060     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02061     GTEST_TEMPLATE_ T34>
02062 struct Templates34 {
02063   typedef TemplateSel<T1> Head;
02064   typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02065       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02066       T29, T30, T31, T32, T33, T34> Tail;
02067 };
02068 
02069 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02070     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02071     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02072     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02073     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02074     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02075     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02076     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02077     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02078     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02079     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02080     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
02081 struct Templates35 {
02082   typedef TemplateSel<T1> Head;
02083   typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02084       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02085       T29, T30, T31, T32, T33, T34, T35> Tail;
02086 };
02087 
02088 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02089     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02090     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02091     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02092     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02093     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02094     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02095     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02096     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02097     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02098     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02099     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
02100 struct Templates36 {
02101   typedef TemplateSel<T1> Head;
02102   typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02103       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02104       T29, T30, T31, T32, T33, T34, T35, T36> Tail;
02105 };
02106 
02107 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02108     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02109     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02110     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02111     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02112     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02113     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02114     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02115     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02116     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02117     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02118     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02119     GTEST_TEMPLATE_ T37>
02120 struct Templates37 {
02121   typedef TemplateSel<T1> Head;
02122   typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02123       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02124       T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
02125 };
02126 
02127 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02128     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02129     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02130     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02131     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02132     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02133     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02134     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02135     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02136     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02137     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02138     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02139     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
02140 struct Templates38 {
02141   typedef TemplateSel<T1> Head;
02142   typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02143       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02144       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
02145 };
02146 
02147 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02148     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02149     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02150     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02151     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02152     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02153     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02154     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02155     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02156     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02157     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02158     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02159     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
02160 struct Templates39 {
02161   typedef TemplateSel<T1> Head;
02162   typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02163       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02164       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
02165 };
02166 
02167 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02168     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02169     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02170     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02171     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02172     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02173     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02174     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02175     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02176     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02177     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02178     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02179     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02180     GTEST_TEMPLATE_ T40>
02181 struct Templates40 {
02182   typedef TemplateSel<T1> Head;
02183   typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02184       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02185       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
02186 };
02187 
02188 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02189     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02190     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02191     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02192     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02193     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02194     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02195     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02196     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02197     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02198     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02199     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02200     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02201     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
02202 struct Templates41 {
02203   typedef TemplateSel<T1> Head;
02204   typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02205       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02206       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
02207 };
02208 
02209 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02210     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02211     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02212     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02213     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02214     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02215     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02216     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02217     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02218     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02219     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02220     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02221     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02222     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
02223 struct Templates42 {
02224   typedef TemplateSel<T1> Head;
02225   typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02226       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02227       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
02228       T42> Tail;
02229 };
02230 
02231 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02232     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02233     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02234     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02235     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02236     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02237     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02238     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02239     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02240     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02241     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02242     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02243     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02244     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02245     GTEST_TEMPLATE_ T43>
02246 struct Templates43 {
02247   typedef TemplateSel<T1> Head;
02248   typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02249       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02250       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02251       T43> Tail;
02252 };
02253 
02254 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02255     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02256     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02257     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02258     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02259     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02260     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02261     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02262     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02263     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02264     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02265     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02266     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02267     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02268     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
02269 struct Templates44 {
02270   typedef TemplateSel<T1> Head;
02271   typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02272       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02273       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02274       T43, T44> Tail;
02275 };
02276 
02277 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02278     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02279     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02280     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02281     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02282     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02283     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02284     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02285     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02286     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02287     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02288     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02289     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02290     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02291     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
02292 struct Templates45 {
02293   typedef TemplateSel<T1> Head;
02294   typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02295       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02296       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02297       T43, T44, T45> Tail;
02298 };
02299 
02300 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02301     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02302     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02303     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02304     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02305     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02306     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02307     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02308     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02309     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02310     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02311     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02312     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02313     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02314     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
02315     GTEST_TEMPLATE_ T46>
02316 struct Templates46 {
02317   typedef TemplateSel<T1> Head;
02318   typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02319       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02320       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02321       T43, T44, T45, T46> Tail;
02322 };
02323 
02324 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02325     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02326     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02327     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02328     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02329     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02330     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02331     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02332     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02333     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02334     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02335     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02336     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02337     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02338     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
02339     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
02340 struct Templates47 {
02341   typedef TemplateSel<T1> Head;
02342   typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02343       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02344       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02345       T43, T44, T45, T46, T47> Tail;
02346 };
02347 
02348 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02349     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02350     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02351     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02352     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02353     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02354     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02355     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02356     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02357     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02358     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02359     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02360     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02361     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02362     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
02363     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
02364 struct Templates48 {
02365   typedef TemplateSel<T1> Head;
02366   typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02367       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02368       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02369       T43, T44, T45, T46, T47, T48> Tail;
02370 };
02371 
02372 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02373     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02374     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02375     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02376     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02377     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02378     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02379     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02380     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02381     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02382     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02383     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02384     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02385     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02386     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
02387     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
02388     GTEST_TEMPLATE_ T49>
02389 struct Templates49 {
02390   typedef TemplateSel<T1> Head;
02391   typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02392       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02393       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02394       T43, T44, T45, T46, T47, T48, T49> Tail;
02395 };
02396 
02397 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02398     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02399     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02400     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02401     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02402     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02403     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02404     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02405     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02406     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02407     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02408     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
02409     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
02410     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
02411     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
02412     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
02413     GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
02414 struct Templates50 {
02415   typedef TemplateSel<T1> Head;
02416   typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02417       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02418       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
02419       T43, T44, T45, T46, T47, T48, T49, T50> Tail;
02420 };
02421 
02422 
02423 // We don't want to require the users to write TemplatesN<...> directly,
02424 // as that would require them to count the length.  Templates<...> is much
02425 // easier to write, but generates horrible messages when there is a
02426 // compiler error, as gcc insists on printing out each template
02427 // argument, even if it has the default value (this means Templates<list>
02428 // will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
02429 // errors).
02430 //
02431 // Our solution is to combine the best part of the two approaches: a
02432 // user would write Templates<T1, ..., TN>, and Google Test will translate
02433 // that to TemplatesN<T1, ..., TN> internally to make error messages
02434 // readable.  The translation is done by the 'type' member of the
02435 // Templates template.
02436 template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
02437     GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
02438     GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
02439     GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
02440     GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
02441     GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
02442     GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
02443     GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
02444     GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
02445     GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
02446     GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
02447     GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
02448     GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
02449     GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
02450     GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
02451     GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
02452     GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
02453     GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
02454     GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
02455     GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
02456     GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
02457     GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
02458     GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
02459     GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
02460     GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
02461 struct Templates {
02462   typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02463       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02464       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
02465       T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
02466 };
02467 
02468 template <>
02469 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02470     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02471     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02472     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02473     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02474     NoneT> {
02475   typedef Templates0 type;
02476 };
02477 template <GTEST_TEMPLATE_ T1>
02478 struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02479     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02480     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02481     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02482     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02483     NoneT> {
02484   typedef Templates1<T1> type;
02485 };
02486 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
02487 struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02488     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02489     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02490     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02491     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02492     NoneT> {
02493   typedef Templates2<T1, T2> type;
02494 };
02495 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
02496 struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02497     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02498     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02499     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02500     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02501   typedef Templates3<T1, T2, T3> type;
02502 };
02503 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02504     GTEST_TEMPLATE_ T4>
02505 struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02506     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02507     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02508     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02509     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02510   typedef Templates4<T1, T2, T3, T4> type;
02511 };
02512 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02513     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
02514 struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02515     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02516     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02517     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02518     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02519   typedef Templates5<T1, T2, T3, T4, T5> type;
02520 };
02521 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02522     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
02523 struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
02524     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02525     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02526     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02527     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02528   typedef Templates6<T1, T2, T3, T4, T5, T6> type;
02529 };
02530 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02531     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02532     GTEST_TEMPLATE_ T7>
02533 struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
02534     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02535     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02536     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02537     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02538   typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
02539 };
02540 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02541     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02542     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
02543 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
02544     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02545     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02546     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02547     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02548   typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
02549 };
02550 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02551     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02552     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
02553 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
02554     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02555     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02556     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02557     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02558   typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
02559 };
02560 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02561     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02562     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02563     GTEST_TEMPLATE_ T10>
02564 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
02565     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02566     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02567     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02568     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02569   typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
02570 };
02571 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02572     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02573     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02574     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
02575 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
02576     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02577     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02578     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02579     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02580   typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
02581 };
02582 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02583     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02584     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02585     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
02586 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
02587     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02588     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02589     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02590     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02591   typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
02592 };
02593 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02594     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02595     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02596     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02597     GTEST_TEMPLATE_ T13>
02598 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
02599     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02600     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02601     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02602     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02603   typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
02604       T13> type;
02605 };
02606 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02607     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02608     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02609     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02610     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
02611 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02612     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02613     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02614     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02615     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02616   typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02617       T14> type;
02618 };
02619 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02620     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02621     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02622     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02623     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
02624 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02625     T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02626     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02627     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02628     NoneT, NoneT, NoneT, NoneT, NoneT> {
02629   typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02630       T14, T15> type;
02631 };
02632 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02633     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02634     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02635     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02636     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02637     GTEST_TEMPLATE_ T16>
02638 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02639     T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02640     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02641     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02642     NoneT, NoneT, NoneT, NoneT, NoneT> {
02643   typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02644       T14, T15, T16> type;
02645 };
02646 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02647     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02648     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02649     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02650     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02651     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
02652 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02653     T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02654     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02655     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02656     NoneT, NoneT, NoneT, NoneT, NoneT> {
02657   typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02658       T14, T15, T16, T17> type;
02659 };
02660 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02661     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02662     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02663     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02664     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02665     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
02666 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02667     T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02668     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02669     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02670     NoneT, NoneT, NoneT, NoneT> {
02671   typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02672       T14, T15, T16, T17, T18> type;
02673 };
02674 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02675     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02676     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02677     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02678     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02679     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02680     GTEST_TEMPLATE_ T19>
02681 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02682     T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02683     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02684     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02685     NoneT, NoneT, NoneT, NoneT> {
02686   typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02687       T14, T15, T16, T17, T18, T19> type;
02688 };
02689 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02690     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02691     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02692     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02693     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02694     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02695     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
02696 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02697     T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02698     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02699     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02700     NoneT, NoneT, NoneT, NoneT> {
02701   typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02702       T14, T15, T16, T17, T18, T19, T20> type;
02703 };
02704 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02705     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02706     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02707     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02708     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02709     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02710     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
02711 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02712     T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
02713     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02714     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02715     NoneT, NoneT, NoneT, NoneT> {
02716   typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02717       T14, T15, T16, T17, T18, T19, T20, T21> type;
02718 };
02719 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02720     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02721     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02722     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02723     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02724     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02725     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02726     GTEST_TEMPLATE_ T22>
02727 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02728     T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
02729     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02730     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02731     NoneT, NoneT, NoneT> {
02732   typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02733       T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
02734 };
02735 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02736     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02737     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02738     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02739     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02740     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02741     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02742     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
02743 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02744     T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
02745     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02746     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02747     NoneT, NoneT, NoneT> {
02748   typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02749       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
02750 };
02751 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02752     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02753     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02754     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02755     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02756     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02757     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02758     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
02759 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02760     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
02761     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02762     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02763     NoneT, NoneT, NoneT> {
02764   typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02765       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
02766 };
02767 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02768     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02769     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02770     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02771     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02772     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02773     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02774     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02775     GTEST_TEMPLATE_ T25>
02776 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02777     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
02778     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02779     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02780     NoneT, NoneT> {
02781   typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02782       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
02783 };
02784 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02785     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02786     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02787     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02788     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02789     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02790     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02791     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02792     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
02793 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02794     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
02795     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02796     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02797     NoneT, NoneT> {
02798   typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02799       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
02800 };
02801 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02802     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02803     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02804     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02805     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02806     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02807     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02808     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02809     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
02810 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02811     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
02812     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02813     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02814     NoneT, NoneT> {
02815   typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02816       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
02817       T27> type;
02818 };
02819 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02820     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02821     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02822     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02823     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02824     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02825     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02826     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02827     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02828     GTEST_TEMPLATE_ T28>
02829 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02830     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
02831     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02832     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02833     NoneT, NoneT> {
02834   typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02835       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02836       T28> type;
02837 };
02838 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02839     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02840     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02841     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02842     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02843     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02844     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02845     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02846     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02847     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
02848 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02849     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02850     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02851     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02852     NoneT> {
02853   typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02854       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02855       T28, T29> type;
02856 };
02857 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02858     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02859     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02860     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02861     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02862     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02863     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02864     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02865     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02866     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
02867 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02868     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02869     T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02870     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02871   typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02872       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02873       T28, T29, T30> type;
02874 };
02875 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02876     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02877     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02878     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02879     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02880     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02881     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02882     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02883     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02884     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02885     GTEST_TEMPLATE_ T31>
02886 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02887     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02888     T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02889     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02890   typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02891       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02892       T28, T29, T30, T31> type;
02893 };
02894 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02895     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02896     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02897     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02898     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02899     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02900     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02901     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02902     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02903     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02904     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
02905 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02906     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02907     T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02908     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02909   typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02910       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02911       T28, T29, T30, T31, T32> type;
02912 };
02913 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02914     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02915     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02916     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02917     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02918     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02919     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02920     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02921     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02922     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02923     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
02924 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02925     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02926     T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02927     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02928   typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02929       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02930       T28, T29, T30, T31, T32, T33> type;
02931 };
02932 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02933     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02934     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02935     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02936     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02937     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02938     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02939     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02940     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02941     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02942     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02943     GTEST_TEMPLATE_ T34>
02944 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02945     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02946     T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02947     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02948   typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02949       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02950       T28, T29, T30, T31, T32, T33, T34> type;
02951 };
02952 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02953     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02954     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02955     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02956     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02957     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02958     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02959     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02960     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02961     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02962     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02963     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
02964 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02965     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02966     T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
02967     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02968   typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02969       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02970       T28, T29, T30, T31, T32, T33, T34, T35> type;
02971 };
02972 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02973     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02974     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02975     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02976     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02977     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02978     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02979     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
02980     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
02981     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
02982     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
02983     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
02984 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
02985     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
02986     T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
02987     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
02988   typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
02989       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
02990       T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
02991 };
02992 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
02993     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
02994     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
02995     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
02996     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
02997     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
02998     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
02999     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03000     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03001     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03002     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03003     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03004     GTEST_TEMPLATE_ T37>
03005 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03006     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03007     T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
03008     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03009   typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03010       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03011       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
03012 };
03013 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03014     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03015     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03016     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03017     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03018     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03019     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03020     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03021     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03022     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03023     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03024     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03025     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
03026 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03027     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03028     T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
03029     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03030   typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03031       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03032       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
03033 };
03034 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03035     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03036     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03037     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03038     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03039     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03040     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03041     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03042     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03043     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03044     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03045     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03046     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
03047 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03048     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03049     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
03050     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03051   typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03052       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03053       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
03054 };
03055 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03056     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03057     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03058     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03059     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03060     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03061     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03062     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03063     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03064     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03065     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03066     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03067     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03068     GTEST_TEMPLATE_ T40>
03069 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03070     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03071     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
03072     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03073   typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03074       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03075       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
03076 };
03077 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03078     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03079     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03080     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03081     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03082     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03083     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03084     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03085     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03086     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03087     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03088     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03089     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03090     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
03091 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03092     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03093     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
03094     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03095   typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03096       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03097       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
03098       T41> type;
03099 };
03100 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03101     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03102     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03103     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03104     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03105     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03106     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03107     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03108     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03109     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03110     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03111     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03112     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03113     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
03114 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03115     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03116     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
03117     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03118   typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03119       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03120       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03121       T42> type;
03122 };
03123 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03124     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03125     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03126     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03127     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03128     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03129     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03130     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03131     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03132     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03133     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03134     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03135     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03136     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03137     GTEST_TEMPLATE_ T43>
03138 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03139     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03140     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
03141     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03142   typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03143       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03144       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03145       T42, T43> type;
03146 };
03147 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03148     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03149     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03150     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03151     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03152     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03153     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03154     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03155     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03156     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03157     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03158     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03159     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03160     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03161     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
03162 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03163     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03164     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03165     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
03166   typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03167       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03168       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03169       T42, T43, T44> type;
03170 };
03171 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03172     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03173     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03174     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03175     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03176     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03177     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03178     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03179     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03180     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03181     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03182     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03183     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03184     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03185     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
03186 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03187     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03188     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03189     T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
03190   typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03191       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03192       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03193       T42, T43, T44, T45> type;
03194 };
03195 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03196     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03197     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03198     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03199     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03200     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03201     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03202     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03203     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03204     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03205     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03206     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03207     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03208     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03209     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
03210     GTEST_TEMPLATE_ T46>
03211 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03212     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03213     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03214     T45, T46, NoneT, NoneT, NoneT, NoneT> {
03215   typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03216       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03217       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03218       T42, T43, T44, T45, T46> type;
03219 };
03220 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03221     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03222     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03223     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03224     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03225     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03226     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03227     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03228     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03229     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03230     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03231     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03232     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03233     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03234     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
03235     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
03236 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03237     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03238     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03239     T45, T46, T47, NoneT, NoneT, NoneT> {
03240   typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03241       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03242       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03243       T42, T43, T44, T45, T46, T47> type;
03244 };
03245 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03246     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03247     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03248     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03249     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03250     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03251     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03252     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03253     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03254     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03255     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03256     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03257     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03258     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03259     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
03260     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
03261 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03262     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03263     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03264     T45, T46, T47, T48, NoneT, NoneT> {
03265   typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03266       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03267       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03268       T42, T43, T44, T45, T46, T47, T48> type;
03269 };
03270 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
03271     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
03272     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
03273     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
03274     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
03275     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
03276     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
03277     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
03278     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
03279     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
03280     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
03281     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
03282     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
03283     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
03284     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
03285     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
03286     GTEST_TEMPLATE_ T49>
03287 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
03288     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
03289     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
03290     T45, T46, T47, T48, T49, NoneT> {
03291   typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03292       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
03293       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
03294       T42, T43, T44, T45, T46, T47, T48, T49> type;
03295 };
03296 
03297 // The TypeList template makes it possible to use either a single type
03298 // or a Types<...> list in TYPED_TEST_CASE() and
03299 // INSTANTIATE_TYPED_TEST_CASE_P().
03300 
03301 template <typename T>
03302 struct TypeList {
03303   typedef Types1<T> type;
03304 };
03305 
03306 template <typename T1, typename T2, typename T3, typename T4, typename T5,
03307     typename T6, typename T7, typename T8, typename T9, typename T10,
03308     typename T11, typename T12, typename T13, typename T14, typename T15,
03309     typename T16, typename T17, typename T18, typename T19, typename T20,
03310     typename T21, typename T22, typename T23, typename T24, typename T25,
03311     typename T26, typename T27, typename T28, typename T29, typename T30,
03312     typename T31, typename T32, typename T33, typename T34, typename T35,
03313     typename T36, typename T37, typename T38, typename T39, typename T40,
03314     typename T41, typename T42, typename T43, typename T44, typename T45,
03315     typename T46, typename T47, typename T48, typename T49, typename T50>
03316 struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
03317     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
03318     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
03319     T44, T45, T46, T47, T48, T49, T50> > {
03320   typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
03321       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
03322       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
03323       T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
03324 };
03325 
03326 #endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
03327 
03328 }  // namespace internal
03329 }  // namespace testing
03330 
03331 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_