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


pcl
Author(s): Open Perception
autogenerated on Wed Aug 26 2015 15:24:39