PageRenderTime 76ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/Unittests/googletest/include/gtest/internal/gtest-type-util.h

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