Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

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