51 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 
   52 #define GTEST_INCLUDE_GTEST_GTEST_H_ 
   94 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 
   95 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 
  136 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 
  137 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 
  298 # include <sys/types.h> 
  299 # include <sys/stat.h> 
  300 #endif  // !_WIN32_WCE 
  302 #if defined __APPLE__ 
  303 # include <AvailabilityMacros.h> 
  304 # include <TargetConditionals.h> 
  311 #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" 
  312 #define GTEST_FLAG_PREFIX_ "gtest_" 
  313 #define GTEST_FLAG_PREFIX_DASH_ "gtest-" 
  314 #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" 
  315 #define GTEST_NAME_ "Google Test" 
  316 #define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" 
  321 # define GTEST_GCC_VER_ \ 
  322     (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) 
  327 # define GTEST_OS_CYGWIN 1 
  328 #elif defined __SYMBIAN32__ 
  329 # define GTEST_OS_SYMBIAN 1 
  331 # define GTEST_OS_WINDOWS 1 
  333 #  define GTEST_OS_WINDOWS_MOBILE 1 
  334 # elif defined(__MINGW__) || defined(__MINGW32__) 
  335 #  define GTEST_OS_WINDOWS_MINGW 1 
  337 #  define GTEST_OS_WINDOWS_DESKTOP 1 
  338 # endif  // _WIN32_WCE 
  339 #elif defined __APPLE__ 
  340 # define GTEST_OS_MAC 1 
  341 # if TARGET_OS_IPHONE 
  342 #  define GTEST_OS_IOS 1 
  343 #  if TARGET_IPHONE_SIMULATOR 
  344 #   define GTEST_OS_IOS_SIMULATOR 1 
  347 #elif defined __linux__ 
  348 # define GTEST_OS_LINUX 1 
  349 # if defined __ANDROID__ 
  350 #  define GTEST_OS_LINUX_ANDROID 1 
  352 #elif defined __MVS__ 
  353 # define GTEST_OS_ZOS 1 
  354 #elif defined(__sun) && defined(__SVR4) 
  355 # define GTEST_OS_SOLARIS 1 
  357 # define GTEST_OS_AIX 1 
  358 #elif defined(__hpux) 
  359 # define GTEST_OS_HPUX 1 
  360 #elif defined __native_client__ 
  361 # define GTEST_OS_NACL 1 
  362 #elif defined __OpenBSD__ 
  363 # define GTEST_OS_OPENBSD 1 
  364 #elif defined __QNX__ 
  365 # define GTEST_OS_QNX 1 
  368 #ifndef GTEST_LANG_CXX11 
  373 # if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L 
  375 #  define GTEST_LANG_CXX11 1 
  377 #  define GTEST_LANG_CXX11 0 
  384 #if !GTEST_OS_WINDOWS 
  389 # include <strings.h> 
  390 #elif !GTEST_OS_WINDOWS_MOBILE 
  395 #if GTEST_OS_LINUX_ANDROID 
  397 #  include <android/api-level.h>   
  401 #ifndef GTEST_HAS_POSIX_RE 
  402 # if GTEST_OS_LINUX_ANDROID 
  404 #  define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) 
  406 #  define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) 
  410 #if GTEST_HAS_POSIX_RE 
  418 # define GTEST_USES_POSIX_RE 1 
  420 #elif GTEST_OS_WINDOWS 
  424 # define GTEST_USES_SIMPLE_RE 1 
  430 # define GTEST_USES_SIMPLE_RE 1 
  432 #endif  // GTEST_HAS_POSIX_RE 
  434 #ifndef GTEST_HAS_EXCEPTIONS 
  437 # if defined(_MSC_VER) || defined(__BORLANDC__) 
  441 #  ifndef _HAS_EXCEPTIONS 
  442 #   define _HAS_EXCEPTIONS 1 
  443 #  endif  // _HAS_EXCEPTIONS 
  444 #  define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS 
  445 # elif defined(__GNUC__) && __EXCEPTIONS 
  447 #  define GTEST_HAS_EXCEPTIONS 1 
  448 # elif defined(__SUNPRO_CC) 
  452 #  define GTEST_HAS_EXCEPTIONS 1 
  453 # elif defined(__IBMCPP__) && __EXCEPTIONS 
  455 #  define GTEST_HAS_EXCEPTIONS 1 
  456 # elif defined(__HP_aCC) 
  459 #  define GTEST_HAS_EXCEPTIONS 1 
  463 #  define GTEST_HAS_EXCEPTIONS 0 
  464 # endif  // defined(_MSC_VER) || defined(__BORLANDC__) 
  465 #endif  // GTEST_HAS_EXCEPTIONS 
  467 #if !defined(GTEST_HAS_STD_STRING) 
  470 # define GTEST_HAS_STD_STRING 1 
  471 #elif !GTEST_HAS_STD_STRING 
  473 # error "Google Test cannot be used where ::std::string isn't available." 
  474 #endif  // !defined(GTEST_HAS_STD_STRING) 
  476 #ifndef GTEST_HAS_GLOBAL_STRING 
  480 # define GTEST_HAS_GLOBAL_STRING 0 
  482 #endif  // GTEST_HAS_GLOBAL_STRING 
  484 #ifndef GTEST_HAS_STD_WSTRING 
  493 # define GTEST_HAS_STD_WSTRING \ 
  494     (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) 
  496 #endif  // GTEST_HAS_STD_WSTRING 
  498 #ifndef GTEST_HAS_GLOBAL_WSTRING 
  501 # define GTEST_HAS_GLOBAL_WSTRING \ 
  502     (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) 
  503 #endif  // GTEST_HAS_GLOBAL_WSTRING 
  506 #ifndef GTEST_HAS_RTTI 
  512 #  ifdef _CPPRTTI  // MSVC defines this macro iff RTTI is enabled. 
  513 #   define GTEST_HAS_RTTI 1 
  515 #   define GTEST_HAS_RTTI 0 
  519 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) 
  526 #   if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ 
  527        !defined(__EXCEPTIONS) 
  528 #    define GTEST_HAS_RTTI 0 
  530 #    define GTEST_HAS_RTTI 1 
  531 #   endif  // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS 
  533 #   define GTEST_HAS_RTTI 0 
  534 #  endif  // __GXX_RTTI 
  539 # elif defined(__clang__) 
  541 #  define GTEST_HAS_RTTI __has_feature(cxx_rtti) 
  545 # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) 
  548 #   define GTEST_HAS_RTTI 1 
  550 #   define GTEST_HAS_RTTI 0 
  556 #  define GTEST_HAS_RTTI 1 
  560 #endif  // GTEST_HAS_RTTI 
  569 #ifndef GTEST_HAS_PTHREAD 
  575 # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ 
  577 #endif  // GTEST_HAS_PTHREAD 
  579 #if GTEST_HAS_PTHREAD 
  582 # include <pthread.h>   
  591 #ifndef GTEST_HAS_TR1_TUPLE 
  592 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) 
  594 #  define GTEST_HAS_TR1_TUPLE 0 
  597 #  define GTEST_HAS_TR1_TUPLE 1 
  599 #endif  // GTEST_HAS_TR1_TUPLE 
  603 #ifndef GTEST_USE_OWN_TR1_TUPLE 
  616 # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ 
  617       && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 
  618 #  define GTEST_ENV_HAS_TR1_TUPLE_ 1 
  624 # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) 
  625 #  define GTEST_ENV_HAS_STD_TUPLE_ 1 
  628 # if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ 
  629 #  define GTEST_USE_OWN_TR1_TUPLE 0 
  631 #  define GTEST_USE_OWN_TR1_TUPLE 1 
  634 #endif  // GTEST_USE_OWN_TR1_TUPLE 
  639 #if GTEST_HAS_TR1_TUPLE 
  641 # if GTEST_USE_OWN_TR1_TUPLE 
  679 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 
  680 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 
  689 #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) 
  690 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: 
  692 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ 
  693     template <GTEST_10_TYPENAMES_(U)> friend class tuple; \ 
  698 #define GTEST_0_TUPLE_(T) tuple<> 
  699 #define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \ 
  701 #define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \ 
  703 #define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \ 
  705 #define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \ 
  707 #define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \ 
  709 #define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \ 
  711 #define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 
  713 #define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 
  715 #define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 
  717 #define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 
  721 #define GTEST_0_TYPENAMES_(T) 
  722 #define GTEST_1_TYPENAMES_(T) typename T##0 
  723 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 
  724 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 
  725 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  727 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  728     typename T##3, typename T##4 
  729 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  730     typename T##3, typename T##4, typename T##5 
  731 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  732     typename T##3, typename T##4, typename T##5, typename T##6 
  733 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  734     typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 
  735 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  736     typename T##3, typename T##4, typename T##5, typename T##6, \ 
  737     typename T##7, typename T##8 
  738 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 
  739     typename T##3, typename T##4, typename T##5, typename T##6, \ 
  740     typename T##7, typename T##8, typename T##9 
  748 template <
typename T0 = void, 
typename T1 = void, 
typename T2 = void,
 
  749     typename T3 = void, 
typename T4 = void, 
typename T5 = void,
 
  750     typename T6 = void, 
typename T7 = void, 
typename T8 = void,
 
  756 namespace gtest_internal {
 
  759 template <
typename T>
 
  761 template <
typename T>
 
  765 #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type 
  769 template <
typename T>
 
  771 template <
typename T>
 
  775 #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type 
  778 template <
int k> 
class Get;
 
  782 template <
bool kIndexVal
id, 
int kIndex, 
class Tuple>
 
  785 template <GTEST_10_TYPENAMES_(T)>
 
  790 template <GTEST_10_TYPENAMES_(T)>
 
  795 template <GTEST_10_TYPENAMES_(T)>
 
  800 template <GTEST_10_TYPENAMES_(T)>
 
  805 template <GTEST_10_TYPENAMES_(T)>
 
  810 template <GTEST_10_TYPENAMES_(T)>
 
  815 template <GTEST_10_TYPENAMES_(T)>
 
  820 template <GTEST_10_TYPENAMES_(T)>
 
  825 template <GTEST_10_TYPENAMES_(T)>
 
  830 template <GTEST_10_TYPENAMES_(T)>
 
  845 template <GTEST_1_TYPENAMES_(T)>
 
  846 class GTEST_1_TUPLE_(T) {
 
  856   template <GTEST_1_TYPENAMES_(U)>
 
  859   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
  861   template <GTEST_1_TYPENAMES_(U)>
 
  868   template <GTEST_1_TYPENAMES_(U)>
 
  877 template <GTEST_2_TYPENAMES_(T)>
 
  878 class GTEST_2_TUPLE_(T) {
 
  882   tuple() : f0_(), f1_() {}
 
  889   template <GTEST_2_TYPENAMES_(U)>
 
  891   template <
typename U0, 
typename U1>
 
  892   tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
 
  894   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
  896   template <GTEST_2_TYPENAMES_(U)>
 
  900   template <
typename U0, 
typename U1>
 
  901   tuple& operator=(const ::std::pair<U0, U1>& p) {
 
  909   template <GTEST_2_TYPENAMES_(U)>
 
  920 template <GTEST_3_TYPENAMES_(T)>
 
  921 class GTEST_3_TUPLE_(T) {
 
  925   tuple() : f0_(), f1_(), f2_() {}
 
  932   template <GTEST_3_TYPENAMES_(U)>
 
  935   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
  937   template <GTEST_3_TYPENAMES_(U)>
 
  944   template <GTEST_3_TYPENAMES_(U)>
 
  957 template <GTEST_4_TYPENAMES_(T)>
 
  958 class GTEST_4_TUPLE_(T) {
 
  962   tuple() : f0_(), f1_(), f2_(), f3_() {}
 
  970   template <GTEST_4_TYPENAMES_(U)>
 
  974   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
  976   template <GTEST_4_TYPENAMES_(U)>
 
  983   template <GTEST_4_TYPENAMES_(U)>
 
  998 template <GTEST_5_TYPENAMES_(T)>
 
  999 class GTEST_5_TUPLE_(T) {
 
 1003   tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
 
 1012   template <GTEST_5_TYPENAMES_(U)>
 
 1014       f3_(t.f3_), f4_(t.f4_) {}
 
 1016   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
 1018   template <GTEST_5_TYPENAMES_(U)>
 
 1025   template <GTEST_5_TYPENAMES_(U)>
 
 1042 template <GTEST_6_TYPENAMES_(T)>
 
 1043 class GTEST_6_TUPLE_(T) {
 
 1047   tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
 
 1055       f4_(t.
f4_), f5_(t.
f5_) {}
 
 1057   template <GTEST_6_TYPENAMES_(U)>
 
 1059       f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
 
 1061   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
 1063   template <GTEST_6_TYPENAMES_(U)>
 
 1070   template <GTEST_6_TYPENAMES_(U)>
 
 1089 template <GTEST_7_TYPENAMES_(T)>
 
 1090 class GTEST_7_TUPLE_(T) {
 
 1094   tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
 
 1099       f3_(
f3), f4_(
f4), f5_(
f5), f6_(
f6) {}
 
 1104   template <GTEST_7_TYPENAMES_(U)>
 
 1106       f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
 
 1108   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
 1110   template <GTEST_7_TYPENAMES_(U)>
 
 1117   template <GTEST_7_TYPENAMES_(U)>
 
 1138 template <GTEST_8_TYPENAMES_(T)>
 
 1139 class GTEST_8_TUPLE_(T) {
 
 1143   tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
 
 1149       f5_(
f5), f6_(
f6), f7_(
f7) {}
 
 1154   template <GTEST_8_TYPENAMES_(U)>
 
 1156       f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
 
 1158   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
 1160   template <GTEST_8_TYPENAMES_(U)>
 
 1167   template <GTEST_8_TYPENAMES_(U)>
 
 1190 template <GTEST_9_TYPENAMES_(T)>
 
 1191 class GTEST_9_TUPLE_(T) {
 
 1195   tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
 
 1201       f5_(
f5), f6_(
f6), f7_(
f7), f8_(
f8) {}
 
 1206   template <GTEST_9_TYPENAMES_(U)>
 
 1208       f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
 
 1210   tuple& operator=(
const tuple& t) { 
return CopyFrom(t); }
 
 1212   template <GTEST_9_TYPENAMES_(U)>
 
 1219   template <GTEST_9_TYPENAMES_(U)>
 
 1244 template <GTEST_10_TYPENAMES_(T)>
 
 1249   tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
 
 1258   tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 
 1259       f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
 
 1261   template <GTEST_10_TYPENAMES_(U)>
 
 1263       f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
 
 1268   template <GTEST_10_TYPENAMES_(U)>
 
 1275   template <GTEST_10_TYPENAMES_(U)>
 
 1310 template <GTEST_1_TYPENAMES_(T)>
 
 1315 template <GTEST_2_TYPENAMES_(T)>
 
 1320 template <GTEST_3_TYPENAMES_(T)>
 
 1325 template <GTEST_4_TYPENAMES_(T)>
 
 1331 template <GTEST_5_TYPENAMES_(T)>
 
 1337 template <GTEST_6_TYPENAMES_(T)>
 
 1343 template <GTEST_7_TYPENAMES_(T)>
 
 1345     const T3& 
f3, 
const T4& 
f4, 
const T5& 
f5, 
const T6& 
f6) {
 
 1349 template <GTEST_8_TYPENAMES_(T)>
 
 1351     const T3& 
f3, 
const T4& 
f4, 
const T5& 
f5, 
const T6& 
f6, 
const T7& 
f7) {
 
 1355 template <GTEST_9_TYPENAMES_(T)>
 
 1357     const T3& 
f3, 
const T4& 
f4, 
const T5& 
f5, 
const T6& 
f6, 
const T7& 
f7,
 
 1362 template <GTEST_10_TYPENAMES_(T)>
 
 1364     const T3& 
f3, 
const T4& 
f4, 
const T5& 
f5, 
const T6& 
f6, 
const T7& 
f7,
 
 1373 template <GTEST_0_TYPENAMES_(T)>
 
 1375   static const int value = 0;
 
 1378 template <GTEST_1_TYPENAMES_(T)>
 
 1380   static const int value = 1;
 
 1383 template <GTEST_2_TYPENAMES_(T)>
 
 1385   static const int value = 2;
 
 1388 template <GTEST_3_TYPENAMES_(T)>
 
 1390   static const int value = 3;
 
 1393 template <GTEST_4_TYPENAMES_(T)>
 
 1395   static const int value = 4;
 
 1398 template <GTEST_5_TYPENAMES_(T)>
 
 1400   static const int value = 5;
 
 1403 template <GTEST_6_TYPENAMES_(T)>
 
 1405   static const int value = 6;
 
 1408 template <GTEST_7_TYPENAMES_(T)>
 
 1410   static const int value = 7;
 
 1413 template <GTEST_8_TYPENAMES_(T)>
 
 1415   static const int value = 8;
 
 1418 template <GTEST_9_TYPENAMES_(T)>
 
 1420   static const int value = 9;
 
 1423 template <GTEST_10_TYPENAMES_(T)>
 
 1425   static const int value = 10;
 
 1428 template <
int k, 
class Tuple>
 
 1434 #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type 
 1438 namespace gtest_internal {
 
 1443   template <
class Tuple>
 
 1445   Field(Tuple& t) { 
return t.f0_; }  
 
 1447   template <
class Tuple>
 
 1449   ConstField(
const Tuple& t) { 
return t.f0_; }
 
 1455   template <
class Tuple>
 
 1457   Field(Tuple& t) { 
return t.f1_; }  
 
 1459   template <
class Tuple>
 
 1461   ConstField(
const Tuple& t) { 
return t.f1_; }
 
 1467   template <
class Tuple>
 
 1469   Field(Tuple& t) { 
return t.f2_; }  
 
 1471   template <
class Tuple>
 
 1473   ConstField(
const Tuple& t) { 
return t.f2_; }
 
 1479   template <
class Tuple>
 
 1481   Field(Tuple& t) { 
return t.f3_; }  
 
 1483   template <
class Tuple>
 
 1485   ConstField(
const Tuple& t) { 
return t.f3_; }
 
 1491   template <
class Tuple>
 
 1493   Field(Tuple& t) { 
return t.f4_; }  
 
 1495   template <
class Tuple>
 
 1497   ConstField(
const Tuple& t) { 
return t.f4_; }
 
 1503   template <
class Tuple>
 
 1505   Field(Tuple& t) { 
return t.f5_; }  
 
 1507   template <
class Tuple>
 
 1509   ConstField(
const Tuple& t) { 
return t.f5_; }
 
 1515   template <
class Tuple>
 
 1517   Field(Tuple& t) { 
return t.f6_; }  
 
 1519   template <
class Tuple>
 
 1521   ConstField(
const Tuple& t) { 
return t.f6_; }
 
 1527   template <
class Tuple>
 
 1529   Field(Tuple& t) { 
return t.f7_; }  
 
 1531   template <
class Tuple>
 
 1533   ConstField(
const Tuple& t) { 
return t.f7_; }
 
 1539   template <
class Tuple>
 
 1541   Field(Tuple& t) { 
return t.f8_; }  
 
 1543   template <
class Tuple>
 
 1545   ConstField(
const Tuple& t) { 
return t.f8_; }
 
 1551   template <
class Tuple>
 
 1553   Field(Tuple& t) { 
return t.f9_; }  
 
 1555   template <
class Tuple>
 
 1557   ConstField(
const Tuple& t) { 
return t.f9_; }
 
 1562 template <
int k, GTEST_10_TYPENAMES_(T)>
 
 1568 template <
int k, GTEST_10_TYPENAMES_(T)>
 
 1578 namespace gtest_internal {
 
 1584 template <
int kSize1, 
int kSize2>
 
 1589   template <
class Tuple1, 
class Tuple2>
 
 1590   static bool Eq(
const Tuple1& , 
const Tuple2& ) {
 
 1597   template <
class Tuple1, 
class Tuple2>
 
 1598   static bool Eq(
const Tuple1& t1, 
const Tuple2& t2) {
 
 1600         ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
 
 1606 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
 
 1614 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
 
 1624 #undef GTEST_0_TUPLE_ 
 1625 #undef GTEST_1_TUPLE_ 
 1626 #undef GTEST_2_TUPLE_ 
 1627 #undef GTEST_3_TUPLE_ 
 1628 #undef GTEST_4_TUPLE_ 
 1629 #undef GTEST_5_TUPLE_ 
 1630 #undef GTEST_6_TUPLE_ 
 1631 #undef GTEST_7_TUPLE_ 
 1632 #undef GTEST_8_TUPLE_ 
 1633 #undef GTEST_9_TUPLE_ 
 1634 #undef GTEST_10_TUPLE_ 
 1636 #undef GTEST_0_TYPENAMES_ 
 1637 #undef GTEST_1_TYPENAMES_ 
 1638 #undef GTEST_2_TYPENAMES_ 
 1639 #undef GTEST_3_TYPENAMES_ 
 1640 #undef GTEST_4_TYPENAMES_ 
 1641 #undef GTEST_5_TYPENAMES_ 
 1642 #undef GTEST_6_TYPENAMES_ 
 1643 #undef GTEST_7_TYPENAMES_ 
 1644 #undef GTEST_8_TYPENAMES_ 
 1645 #undef GTEST_9_TYPENAMES_ 
 1646 #undef GTEST_10_TYPENAMES_ 
 1648 #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ 
 1649 #undef GTEST_BY_REF_ 
 1650 #undef GTEST_ADD_REF_ 
 1651 #undef GTEST_TUPLE_ELEMENT_ 
 1653 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 
 1654 # elif GTEST_ENV_HAS_STD_TUPLE_ 
 1665 using ::std::tuple_element;
 
 1666 using ::std::tuple_size;
 
 1670 # elif GTEST_OS_SYMBIAN 
 1677 #  ifdef BOOST_HAS_TR1_TUPLE 
 1678 #   undef BOOST_HAS_TR1_TUPLE 
 1679 #  endif  // BOOST_HAS_TR1_TUPLE 
 1683 #  define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED 
 1686 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) 
 1690 #  if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 
 1696 #   define _TR1_FUNCTIONAL 1 
 1697 #   include <tr1/tuple> 
 1698 #   undef _TR1_FUNCTIONAL  // Allows the user to #include 
 1701 #   include <tr1/tuple>   
 1702 #  endif  // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 
 1708 # endif  // GTEST_USE_OWN_TR1_TUPLE 
 1710 #endif  // GTEST_HAS_TR1_TUPLE 
 1716 #ifndef GTEST_HAS_CLONE 
 1719 # if GTEST_OS_LINUX && !defined(__ia64__) 
 1720 #  if GTEST_OS_LINUX_ANDROID 
 1722 #    if defined(__arm__) && __ANDROID_API__ >= 9 
 1723 #     define GTEST_HAS_CLONE 1 
 1725 #     define GTEST_HAS_CLONE 0 
 1728 #   define GTEST_HAS_CLONE 1 
 1731 #  define GTEST_HAS_CLONE 0 
 1732 # endif  // GTEST_OS_LINUX && !defined(__ia64__) 
 1734 #endif  // GTEST_HAS_CLONE 
 1738 #ifndef GTEST_HAS_STREAM_REDIRECTION 
 1741 # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN 
 1742 #  define GTEST_HAS_STREAM_REDIRECTION 0 
 1744 #  define GTEST_HAS_STREAM_REDIRECTION 1 
 1745 # endif  // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN 
 1746 #endif  // GTEST_HAS_STREAM_REDIRECTION 
 1752 #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ 
 1753      (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ 
 1754      (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ 
 1755      GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ 
 1756      GTEST_OS_OPENBSD || GTEST_OS_QNX) 
 1757 # define GTEST_HAS_DEATH_TEST 1 
 1764 #define GTEST_HAS_PARAM_TEST 1 
 1770 #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ 
 1771     defined(__IBMCPP__) || defined(__HP_aCC) 
 1772 # define GTEST_HAS_TYPED_TEST 1 
 1773 # define GTEST_HAS_TYPED_TEST_P 1 
 1780 #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) 
 1781 # define GTEST_HAS_COMBINE 1 
 1785 #define GTEST_WIDE_STRING_USES_UTF16_ \ 
 1786     (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) 
 1790 # define GTEST_CAN_STREAM_RESULTS_ 1 
 1803 #ifdef __INTEL_COMPILER 
 1804 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ 
 1806 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default:  // NOLINT 
 1820 #if defined(__GNUC__) && !defined(COMPILER_ICC) 
 1821 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 
 1823 # define GTEST_ATTRIBUTE_UNUSED_ 
 1828 #define GTEST_DISALLOW_ASSIGN_(type)\ 
 1829   void operator=(type const &) 
 1833 #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ 
 1834   type(type const &);\ 
 1835   GTEST_DISALLOW_ASSIGN_(type) 
 1842 #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) 
 1843 # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) 
 1845 # define GTEST_MUST_USE_RESULT_ 
 1846 #endif  // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC 
 1851 #ifndef GTEST_HAS_SEH 
 1854 # if defined(_MSC_VER) || defined(__BORLANDC__) 
 1856 #  define GTEST_HAS_SEH 1 
 1859 #  define GTEST_HAS_SEH 0 
 1862 #endif  // GTEST_HAS_SEH 
 1866 # if GTEST_LINKED_AS_SHARED_LIBRARY 
 1867 #  define GTEST_API_ __declspec(dllimport) 
 1868 # elif GTEST_CREATE_SHARED_LIBRARY 
 1869 #  define GTEST_API_ __declspec(dllexport) 
 1880 # define GTEST_NO_INLINE_ __attribute__((noinline)) 
 1882 # define GTEST_NO_INLINE_ 
 1886 #if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) 
 1887 # define GTEST_HAS_CXXABI_H_ 1 
 1889 # define GTEST_HAS_CXXABI_H_ 0 
 1896 namespace internal {
 
 1922 #define GTEST_COMPILE_ASSERT_(expr, msg) \ 
 1923   typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \ 
 1924       msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ 
 1970 template <
typename T1, 
typename T2>
 
 1973 template <
typename T>
 
 1976 #if GTEST_HAS_GLOBAL_STRING 
 1980 #endif  // GTEST_HAS_GLOBAL_STRING 
 1982 #if GTEST_HAS_GLOBAL_WSTRING 
 1984 #elif GTEST_HAS_STD_WSTRING 
 1986 #endif  // GTEST_HAS_GLOBAL_WSTRING 
 1996 template <
typename T>
 
 2006   T* 
get()
 const { 
return ptr_; }
 
 2009     T* 
const ptr = ptr_;
 
 2016       if (
IsTrue(
sizeof(T) > 0)) {  
 
 2042 #if GTEST_HAS_GLOBAL_STRING 
 2046 #endif  // GTEST_HAS_GLOBAL_STRING 
 2048   RE(
const char* regex) { Init(regex); }  
 
 2062     return FullMatch(str.c_str(), re);
 
 2065     return PartialMatch(str.c_str(), re);
 
 2068 #if GTEST_HAS_GLOBAL_STRING 
 2071     return FullMatch(str.c_str(), re);
 
 2074     return PartialMatch(str.c_str(), re);
 
 2077 #endif  // GTEST_HAS_GLOBAL_STRING 
 2079   static bool FullMatch(
const char* str, 
const RE& re);
 
 2080   static bool PartialMatch(
const char* str, 
const RE& re);
 
 2083   void Init(
const char* regex);
 
 2091 #if GTEST_USES_POSIX_RE 
 2096 #else  // GTEST_USES_SIMPLE_RE 
 2098   const char* full_pattern_;  
 
 2146 #define GTEST_LOG_(severity) \ 
 2147     ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ 
 2148                                   __FILE__, __LINE__).GetStream() 
 2167 #define GTEST_CHECK_(condition) \ 
 2168     GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 2169     if (::testing::internal::IsTrue(condition)) \ 
 2172       GTEST_LOG_(FATAL) << "Condition " #condition " failed. " 
 2179 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ 
 2180   if (const int gtest_error = (posix_call)) \ 
 2181     GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ 
 2204 template<
typename To>
 
 2228 template<
typename To, 
typename From>  
 
 2236     ::testing::internal::ImplicitCast_<From*>(to);
 
 2243   return static_cast<To
>(
f);
 
 2251 template <
class Derived, 
class Base>
 
 2255   return dynamic_cast<Derived*
>(base);  
 
 2257   return static_cast<Derived*
>(base);  
 
 2261 #if GTEST_HAS_STREAM_REDIRECTION 
 2274 #endif  // GTEST_HAS_STREAM_REDIRECTION 
 2277 #if GTEST_HAS_DEATH_TEST 
 2279 const ::std::vector<testing::internal::string>& GetInjectableArgvs();
 
 2280 void SetInjectableArgvs(const ::std::vector<testing::internal::string>*
 
 2284 extern ::std::vector<testing::internal::string> g_argvs;
 
 2286 #endif  // GTEST_HAS_DEATH_TEST 
 2290 #if GTEST_HAS_PTHREAD 
 2295 inline void SleepMilliseconds(
int n) {
 
 2296   const timespec time = {
 
 2300   nanosleep(&time, NULL);
 
 2309 class Notification {
 
 2311   Notification() : notified_(false) {
 
 2315     pthread_mutex_destroy(&mutex_);
 
 2321     pthread_mutex_lock(&mutex_);
 
 2323     pthread_mutex_unlock(&mutex_);
 
 2328   void WaitForNotification() {
 
 2330       pthread_mutex_lock(&mutex_);
 
 2331       const bool notified = notified_;
 
 2332       pthread_mutex_unlock(&mutex_);
 
 2335       SleepMilliseconds(10);
 
 2340   pthread_mutex_t mutex_;
 
 2351 class ThreadWithParamBase {
 
 2353   virtual ~ThreadWithParamBase() {}
 
 2354   virtual void Run() = 0;
 
 2363 extern "C" inline void* ThreadFuncWithCLinkage(
void* thread) {
 
 2364   static_cast<ThreadWithParamBase*
>(thread)->Run();
 
 2380 template <
typename T>
 
 2381 class ThreadWithParam : 
public ThreadWithParamBase {
 
 2383   typedef void (*UserThreadFunc)(T);
 
 2386       UserThreadFunc func, T param, Notification* thread_can_start)
 
 2389         thread_can_start_(thread_can_start),
 
 2391     ThreadWithParamBase* 
const base = 
this;
 
 2395         pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base));
 
 2397   ~ThreadWithParam() { Join(); }
 
 2406   virtual void Run() {
 
 2407     if (thread_can_start_ != NULL)
 
 2408       thread_can_start_->WaitForNotification();
 
 2413   const UserThreadFunc func_;  
 
 2417   Notification* 
const thread_can_start_;
 
 2448     owner_ = pthread_self();
 
 2464   void AssertHeld()
 const {
 
 2465     GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
 
 2466         << 
"The current thread is not holding the mutex @" << 
this;
 
 2475   pthread_mutex_t mutex_;  
 
 2487 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 
 2488     extern ::testing::internal::MutexBase mutex 
 2496 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 
 2497     ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } 
 2501 class Mutex : 
public MutexBase {
 
 2518 class GTestMutexLock {
 
 2520   explicit GTestMutexLock(MutexBase* mutex)
 
 2521       : mutex_(mutex) { mutex_->Lock(); }
 
 2523   ~GTestMutexLock() { mutex_->Unlock(); }
 
 2526   MutexBase* 
const mutex_;
 
 2539 class ThreadLocalValueHolderBase {
 
 2541   virtual ~ThreadLocalValueHolderBase() {}
 
 2546 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
 
 2547   delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
 
 2579 template <
typename T>
 
 2582   ThreadLocal() : key_(CreateKey()),
 
 2584   explicit ThreadLocal(
const T& value) : key_(CreateKey()),
 
 2589     DeleteThreadLocalValue(pthread_getspecific(key_));
 
 2596   T* pointer() { 
return GetOrCreateValue(); }
 
 2597   const T* pointer()
 const { 
return GetOrCreateValue(); }
 
 2598   const T& 
get()
 const { 
return *pointer(); }
 
 2599   void set(
const T& value) { *pointer() = value; }
 
 2603   class ValueHolder : 
public ThreadLocalValueHolderBase {
 
 2605     explicit ValueHolder(
const T& value) : value_(value) {}
 
 2607     T* pointer() { 
return &value_; }
 
 2614   static pthread_key_t CreateKey() {
 
 2619         pthread_key_create(&key, &DeleteThreadLocalValue));
 
 2623   T* GetOrCreateValue()
 const {
 
 2624     ThreadLocalValueHolderBase* 
const holder =
 
 2625         static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(key_));
 
 2626     if (holder != NULL) {
 
 2627       return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
 
 2630     ValueHolder* 
const new_holder = 
new ValueHolder(default_);
 
 2631     ThreadLocalValueHolderBase* 
const holder_base = new_holder;
 
 2633     return new_holder->pointer();
 
 2637   const pthread_key_t key_;
 
 2643 # define GTEST_IS_THREADSAFE 1 
 2645 #else  // GTEST_HAS_PTHREAD 
 2660 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 
 2661   extern ::testing::internal::Mutex mutex 
 2663 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex 
 2672 template <
typename T>
 
 2679   const T& 
get()
 const { 
return value_; }
 
 2680   void set(
const T& value) { value_ = value; }
 
 2687 # define GTEST_IS_THREADSAFE 0 
 2689 #endif  // GTEST_HAS_PTHREAD 
 2701 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) 
 2704 # define GTEST_ELLIPSIS_NEEDS_POD_ 1 
 2706 # define GTEST_CAN_COMPARE_NULL 1 
 2713 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) 
 2714 # define GTEST_NEEDS_IS_POINTER_ 1 
 2717 template <
bool bool_value>
 
 2720   static const bool value = bool_value;
 
 2727 template <
typename T>
 
 2730 template <
typename T>
 
 2733 template <
typename Iterator>
 
 2738 template <
typename T>
 
 2743 template <
typename T>
 
 2748 #if GTEST_OS_WINDOWS 
 2749 # define GTEST_PATH_SEP_ "\\" 
 2750 # define GTEST_HAS_ALT_PATH_SEP_ 1 
 2754 # define GTEST_PATH_SEP_ "/" 
 2755 # define GTEST_HAS_ALT_PATH_SEP_ 0 
 2757 #endif  // GTEST_OS_WINDOWS 
 2767   return isalpha(
static_cast<unsigned char>(ch)) != 0;
 
 2770   return isalnum(
static_cast<unsigned char>(ch)) != 0;
 
 2773   return isdigit(
static_cast<unsigned char>(ch)) != 0;
 
 2776   return islower(
static_cast<unsigned char>(ch)) != 0;
 
 2779   return isspace(
static_cast<unsigned char>(ch)) != 0;
 
 2782   return isupper(
static_cast<unsigned char>(ch)) != 0;
 
 2785   return isxdigit(
static_cast<unsigned char>(ch)) != 0;
 
 2788   const unsigned char low_byte = 
static_cast<unsigned char>(ch);
 
 2789   return ch == low_byte && isxdigit(low_byte) != 0;
 
 2793   return static_cast<char>(tolower(
static_cast<unsigned char>(ch)));
 
 2796   return static_cast<char>(toupper(
static_cast<unsigned char>(ch)));
 
 2809 #if GTEST_OS_WINDOWS 
 2813 # ifdef __BORLANDC__ 
 2814 inline int IsATTY(
int fd) { 
return isatty(fd); }
 
 2815 inline int StrCaseCmp(
const char* s1, 
const char* s2) {
 
 2816   return stricmp(s1, s2);
 
 2818 inline char* 
StrDup(
const char* src) { 
return strdup(src); }
 
 2819 # else  // !__BORLANDC__ 
 2820 #  if GTEST_OS_WINDOWS_MOBILE 
 2821 inline int IsATTY(
int ) { 
return 0; }
 
 2823 inline int IsATTY(
int fd) { 
return _isatty(fd); }
 
 2824 #  endif  // GTEST_OS_WINDOWS_MOBILE 
 2825 inline int StrCaseCmp(
const char* s1, 
const char* s2) {
 
 2826   return _stricmp(s1, s2);
 
 2828 inline char* 
StrDup(
const char* src) { 
return _strdup(src); }
 
 2829 # endif  // __BORLANDC__ 
 2831 # if GTEST_OS_WINDOWS_MOBILE 
 2832 inline int FileNo(FILE* file) { 
return reinterpret_cast<int>(_fileno(file)); }
 
 2836 inline int FileNo(FILE* file) { 
return _fileno(file); }
 
 2837 inline int Stat(
const char* path, 
StatStruct* buf) { 
return _stat(path, buf); }
 
 2838 inline int RmDir(
const char* dir) { 
return _rmdir(dir); }
 
 2840   return (_S_IFDIR & st.st_mode) != 0;
 
 2842 # endif  // GTEST_OS_WINDOWS_MOBILE 
 2848 inline int FileNo(FILE* file) { 
return fileno(file); }
 
 2849 inline int IsATTY(
int fd) { 
return isatty(fd); }
 
 2852   return strcasecmp(s1, s2);
 
 2854 inline char* 
StrDup(
const char* src) { 
return strdup(src); }
 
 2855 inline int RmDir(
const char* dir) { 
return rmdir(dir); }
 
 2858 #endif  // GTEST_OS_WINDOWS 
 2864 # pragma warning(push) 
 2865 # pragma warning(disable:4996) 
 2868 inline const char* 
StrNCpy(
char* dest, 
const char* src, 
size_t n) {
 
 2869   return strncpy(dest, src, n);
 
 2876 #if !GTEST_OS_WINDOWS_MOBILE 
 2877 inline int ChDir(
const char* dir) { 
return chdir(dir); }
 
 2879 inline FILE* 
FOpen(
const char* path, 
const char* mode) {
 
 2880   return fopen(path, mode);
 
 2882 #if !GTEST_OS_WINDOWS_MOBILE 
 2883 inline FILE *
FReopen(
const char* path, 
const char* mode, FILE* stream) {
 
 2884   return freopen(path, mode, stream);
 
 2886 inline FILE* 
FDOpen(
int fd, 
const char* mode) { 
return fdopen(fd, mode); }
 
 2888 inline int FClose(FILE* fp) { 
return fclose(fp); }
 
 2889 #if !GTEST_OS_WINDOWS_MOBILE 
 2890 inline int Read(
int fd, 
void* buf, 
unsigned int count) {
 
 2891   return static_cast<int>(read(fd, buf, count));
 
 2893 inline int Write(
int fd, 
const void* buf, 
unsigned int count) {
 
 2894   return static_cast<int>(write(fd, buf, count));
 
 2896 inline int Close(
int fd) { 
return close(fd); }
 
 2897 inline const char* 
StrError(
int errnum) { 
return strerror(errnum); }
 
 2899 inline const char* 
GetEnv(
const char* name) {
 
 2900 #if GTEST_OS_WINDOWS_MOBILE 
 2903 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 
 2906   const char* 
const env = getenv(name);
 
 2907   return (env != NULL && env[0] != 
'\0') ? env : NULL;
 
 2909   return getenv(name);
 
 2914 # pragma warning(pop)  // Restores the warning state. 
 2917 #if GTEST_OS_WINDOWS_MOBILE 
 2924 #endif  // GTEST_OS_WINDOWS_MOBILE 
 2933 #if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE 
 2935 # define GTEST_SNPRINTF_(buffer, size, format, ...) \ 
 2936      _snprintf_s(buffer, size, size, format, __VA_ARGS__) 
 2937 #elif defined(_MSC_VER) 
 2940 # define GTEST_SNPRINTF_ _snprintf 
 2942 # define GTEST_SNPRINTF_ snprintf 
 2973 template <
size_t size>
 
 2997 #if GTEST_OS_WINDOWS 
 2998   typedef __int64 
Int;
 
 2999   typedef unsigned __int64 
UInt;
 
 3003 #endif  // GTEST_OS_WINDOWS 
 3016 #define GTEST_FLAG(name) FLAGS_gtest_##name 
 3019 #define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) 
 3020 #define GTEST_DECLARE_int32_(name) \ 
 3021     GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) 
 3022 #define GTEST_DECLARE_string_(name) \ 
 3023     GTEST_API_ extern ::std::string GTEST_FLAG(name) 
 3026 #define GTEST_DEFINE_bool_(name, default_val, doc) \ 
 3027     GTEST_API_ bool GTEST_FLAG(name) = (default_val) 
 3028 #define GTEST_DEFINE_int32_(name, default_val, doc) \ 
 3029     GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) 
 3030 #define GTEST_DEFINE_string_(name, default_val, doc) \ 
 3031     GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) 
 3034 #define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) 
 3035 #define GTEST_LOCK_EXCLUDED_(locks) 
 3043 bool ParseInt32(
const Message& src_text, 
const char* str, 
Int32* value);
 
 3054 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 
 3057 # include <stdlib.h> 
 3058 # include <sys/types.h> 
 3059 # include <sys/wait.h> 
 3060 # include <unistd.h> 
 3061 #endif  // GTEST_OS_LINUX 
 3063 #if GTEST_HAS_EXCEPTIONS 
 3064 # include <stdexcept> 
 3119 #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 
 3120 #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 
 3127 void operator<<(
const testing::internal::Secret&, 
int);
 
 3161   typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
 
 3173   explicit Message(
const char* str) : ss_(new ::
std::stringstream) {
 
 3177 #if GTEST_OS_SYMBIAN 
 3179   template <
typename T>
 
 3186   template <
typename T>
 
 3202     using ::operator <<;
 
 3220   template <
typename T>
 
 3222     if (pointer == NULL) {
 
 3229 #endif  // GTEST_OS_SYMBIAN 
 3244     return *
this << (b ? 
"true" : 
"false");
 
 3252 #if GTEST_HAS_STD_WSTRING 
 3256 #endif  // GTEST_HAS_STD_WSTRING 
 3258 #if GTEST_HAS_GLOBAL_WSTRING 
 3262 #endif  // GTEST_HAS_GLOBAL_WSTRING 
 3272 #if GTEST_OS_SYMBIAN 
 3277   template <
typename T>
 
 3279     if (pointer == NULL) {
 
 3285   template <
typename T>
 
 3290     using ::operator <<;
 
 3293 #endif  // GTEST_OS_SYMBIAN 
 3300   void operator=(
const Message&);
 
 3308 namespace internal {
 
 3314 template <
typename T>
 
 3316   return (
Message() << streamable).GetString();
 
 3322 #endif  // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 
 3363 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 
 3364 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 
 3376 namespace internal {
 
 3390   static const char* CloneCString(
const char* c_str);
 
 3392 #if GTEST_OS_WINDOWS_MOBILE 
 3405   static LPCWSTR AnsiToUtf16(
const char* c_str);
 
 3415   static const char* Utf16ToAnsi(LPCWSTR utf16_str);
 
 3423   static bool CStringEquals(
const char* lhs, 
const char* rhs);
 
 3429   static std::string ShowWideCString(
const wchar_t* wide_c_str);
 
 3437   static bool WideCStringEquals(
const wchar_t* lhs, 
const wchar_t* rhs);
 
 3445   static bool CaseInsensitiveCStringEquals(
const char* lhs,
 
 3460   static bool CaseInsensitiveWideCStringEquals(
const wchar_t* lhs,
 
 3461                                                const wchar_t* rhs);
 
 3465   static bool EndsWithCaseInsensitive(
 
 3475   static std::string FormatByte(
unsigned char value);
 
 3488 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 
 3528 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 
 3529 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 
 3533 namespace internal {
 
 3565   const char* 
c_str()
 const { 
return pathname_.c_str(); }
 
 3577                                const char* extension);
 
 3595                                          const char* extension);
 
 3598   bool IsEmpty()
 const { 
return pathname_.empty(); }
 
 3603   FilePath RemoveTrailingPathSeparator() 
const;
 
 3611   FilePath RemoveDirectoryName() 
const;
 
 3625   FilePath RemoveExtension(
const char* extension) 
const;
 
 3631   bool CreateDirectoriesRecursively() 
const;
 
 3637   bool CreateFolder() 
const;
 
 3641   bool FileOrDirectoryExists() 
const;
 
 3645   bool DirectoryExists() 
const;
 
 3650   bool IsDirectory() 
const;
 
 3654   bool IsRootDirectory() 
const;
 
 3657   bool IsAbsolutePath() 
const;
 
 3685   const char* FindLastPathSeparator() 
const;
 
 3693 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 
 3737 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 
 3738 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 
 3743 # if GTEST_HAS_CXXABI_H_ 
 3744 #  include <cxxabi.h> 
 3745 # elif defined(__HP_aCC) 
 3746 #  include <acxx_demangle.h> 
 3747 # endif  // GTEST_HASH_CXXABI_H_ 
 3750 namespace internal {
 
 3755 template <
typename T>
 
 3759   const char* 
const name = 
typeid(T).name();
 
 3760 #  if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) 
 3764 #   if GTEST_HAS_CXXABI_H_ 
 3765   using abi::__cxa_demangle;
 
 3766 #   endif  // GTEST_HAS_CXXABI_H_ 
 3767   char* 
const readable_name = __cxa_demangle(name, 0, 0, &
status);
 
 3769   free(readable_name);
 
 3773 #  endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC 
 3779 # endif  // GTEST_HAS_RTTI 
 3782 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 
 3788 template <
typename T1, 
typename T2>
 
 3789 struct AssertTypeEq;
 
 3791 template <
typename T>
 
 3792 struct AssertTypeEq<T, T> {
 
 3814 template <
typename T1>
 
 3817   typedef Types0 Tail;
 
 3819 template <
typename T1, 
typename T2>
 
 3822   typedef Types1<T2> Tail;
 
 3825 template <
typename T1, 
typename T2, 
typename T3>
 
 3828   typedef Types2<T2, T3> Tail;
 
 3831 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
 3834   typedef Types3<T2, T3, T4> Tail;
 
 3837 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
 3840   typedef Types4<T2, T3, T4, T5> Tail;
 
 3843 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3847   typedef Types5<T2, T3, T4, T5, T6> Tail;
 
 3850 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3851     typename T6, 
typename T7>
 
 3854   typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
 
 3857 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3858     typename T6, 
typename T7, 
typename T8>
 
 3861   typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
 
 3864 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3865     typename T6, 
typename T7, 
typename T8, 
typename T9>
 
 3868   typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
 
 3871 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3872     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
 3875   typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
 
 3878 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3879     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3883   typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
 
 3886 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3887     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3888     typename T11, 
typename T12>
 
 3891   typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
 
 3894 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3895     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3896     typename T11, 
typename T12, 
typename T13>
 
 3899   typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
 
 3902 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3903     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3904     typename T11, 
typename T12, 
typename T13, 
typename T14>
 
 3907   typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
 
 3910 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3911     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3912     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15>
 
 3915   typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 3919 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3920     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3921     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3925   typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3929 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3930     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3931     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3932     typename T16, 
typename T17>
 
 3935   typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3939 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3940     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3941     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3942     typename T16, 
typename T17, 
typename T18>
 
 3945   typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3946       T16, T17, T18> Tail;
 
 3949 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3950     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3951     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3952     typename T16, 
typename T17, 
typename T18, 
typename T19>
 
 3955   typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3956       T16, T17, T18, T19> Tail;
 
 3959 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3960     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3961     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3962     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20>
 
 3965   typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3966       T16, T17, T18, T19, T20> Tail;
 
 3969 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3970     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3971     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3972     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 3976   typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3977       T16, T17, T18, T19, T20, T21> Tail;
 
 3980 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3981     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3982     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3983     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 3984     typename T21, 
typename T22>
 
 3987   typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3988       T16, T17, T18, T19, T20, T21, T22> Tail;
 
 3991 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 3992     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 3993     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 3994     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 3995     typename T21, 
typename T22, 
typename T23>
 
 3998   typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 3999       T16, T17, T18, T19, T20, T21, T22, T23> Tail;
 
 4002 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4003     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4004     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4005     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4006     typename T21, 
typename T22, 
typename T23, 
typename T24>
 
 4009   typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4010       T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
 
 4013 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4014     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4015     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4016     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4017     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25>
 
 4020   typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4021       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
 
 4024 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4025     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4026     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4027     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4028     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4032   typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4033       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
 
 4036 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4037     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4038     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4039     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4040     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4041     typename T26, 
typename T27>
 
 4044   typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4045       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
 
 4048 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4049     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4050     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4051     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4052     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4053     typename T26, 
typename T27, 
typename T28>
 
 4056   typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4057       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
 
 4060 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4061     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4062     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4063     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4064     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4065     typename T26, 
typename T27, 
typename T28, 
typename T29>
 
 4068   typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4069       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 4073 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4074     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4075     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4076     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4077     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4078     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30>
 
 4081   typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4082       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4086 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4087     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4088     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4089     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4090     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4091     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4095   typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4096       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4100 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4101     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4102     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4103     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4104     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4105     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4106     typename T31, 
typename T32>
 
 4109   typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4110       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4111       T30, T31, T32> Tail;
 
 4114 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4115     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4116     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4117     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4118     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4119     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4120     typename T31, 
typename T32, 
typename T33>
 
 4123   typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4124       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4125       T30, T31, T32, T33> Tail;
 
 4128 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4129     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4130     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4131     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4132     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4133     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4134     typename T31, 
typename T32, 
typename T33, 
typename T34>
 
 4137   typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4138       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4139       T30, T31, T32, T33, T34> Tail;
 
 4142 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4143     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4144     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4145     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4146     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4147     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4148     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35>
 
 4151   typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4152       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4153       T30, T31, T32, T33, T34, T35> Tail;
 
 4156 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4157     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4158     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4159     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4160     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4161     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4162     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4166   typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4167       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4168       T30, T31, T32, T33, T34, T35, T36> Tail;
 
 4171 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4172     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4173     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4174     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4175     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4176     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4177     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4178     typename T36, 
typename T37>
 
 4181   typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4182       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4183       T30, T31, T32, T33, T34, T35, T36, T37> Tail;
 
 4186 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4187     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4188     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4189     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4190     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4191     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4192     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4193     typename T36, 
typename T37, 
typename T38>
 
 4196   typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4197       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4198       T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
 
 4201 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4202     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4203     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4204     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4205     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4206     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4207     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4208     typename T36, 
typename T37, 
typename T38, 
typename T39>
 
 4211   typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4212       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4213       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
 
 4216 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4217     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4218     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4219     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4220     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4221     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4222     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4223     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40>
 
 4226   typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4227       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4228       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
 
 4231 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4232     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4233     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4234     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4235     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4236     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4237     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4238     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4242   typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4243       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4244       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
 
 4247 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4248     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4249     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4250     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4251     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4252     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4253     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4254     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4255     typename T41, 
typename T42>
 
 4258   typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4259       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4260       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
 
 4263 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4264     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4265     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4266     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4267     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4268     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4269     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4270     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4271     typename T41, 
typename T42, 
typename T43>
 
 4274   typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4275       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4276       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 4280 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4281     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4282     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4283     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4284     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4285     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4286     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4287     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4288     typename T41, 
typename T42, 
typename T43, 
typename T44>
 
 4291   typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4292       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4293       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4297 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4298     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4299     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4300     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4301     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4302     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4303     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4304     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4305     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45>
 
 4308   typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4309       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4310       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4314 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4315     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4316     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4317     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4318     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4319     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4320     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4321     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4322     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 4326   typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4327       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4328       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4329       T44, T45, T46> Tail;
 
 4332 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4333     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4334     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4335     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4336     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4337     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4338     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4339     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4340     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 4341     typename T46, 
typename T47>
 
 4344   typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4345       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4346       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4347       T44, T45, T46, T47> Tail;
 
 4350 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4351     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4352     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4353     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4354     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4355     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4356     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4357     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4358     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 4359     typename T46, 
typename T47, 
typename T48>
 
 4362   typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4363       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4364       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4365       T44, T45, T46, T47, T48> Tail;
 
 4368 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4369     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4370     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4371     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4372     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4373     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4374     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4375     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4376     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 4377     typename T46, 
typename T47, 
typename T48, 
typename T49>
 
 4380   typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4381       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4382       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4383       T44, T45, T46, T47, T48, T49> Tail;
 
 4386 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4387     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4388     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4389     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4390     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4391     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4392     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 4393     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 4394     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 4395     typename T46, 
typename T47, 
typename T48, 
typename T49, 
typename T50>
 
 4398   typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4399       T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4400       T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 4401       T44, T45, T46, T47, T48, T49, T50> Tail;
 
 4420 template <
typename T1 = internal::None, 
typename T2 = internal::None,
 
 4421     typename T3 = internal::None, 
typename T4 = internal::None,
 
 4422     typename T5 = internal::None, 
typename T6 = internal::None,
 
 4423     typename T7 = internal::None, 
typename T8 = internal::None,
 
 4424     typename T9 = internal::None, 
typename T10 = internal::None,
 
 4425     typename T11 = internal::None, 
typename T12 = internal::None,
 
 4426     typename T13 = internal::None, 
typename T14 = internal::None,
 
 4427     typename T15 = internal::None, 
typename T16 = internal::None,
 
 4428     typename T17 = internal::None, 
typename T18 = internal::None,
 
 4429     typename T19 = internal::None, 
typename T20 = internal::None,
 
 4430     typename T21 = internal::None, 
typename T22 = internal::None,
 
 4431     typename T23 = internal::None, 
typename T24 = internal::None,
 
 4432     typename T25 = internal::None, 
typename T26 = internal::None,
 
 4433     typename T27 = internal::None, 
typename T28 = internal::None,
 
 4434     typename T29 = internal::None, 
typename T30 = internal::None,
 
 4435     typename T31 = internal::None, 
typename T32 = internal::None,
 
 4436     typename T33 = internal::None, 
typename T34 = internal::None,
 
 4437     typename T35 = internal::None, 
typename T36 = internal::None,
 
 4438     typename T37 = internal::None, 
typename T38 = internal::None,
 
 4439     typename T39 = internal::None, 
typename T40 = internal::None,
 
 4440     typename T41 = internal::None, 
typename T42 = internal::None,
 
 4441     typename T43 = internal::None, 
typename T44 = internal::None,
 
 4442     typename T45 = internal::None, 
typename T46 = internal::None,
 
 4443     typename T47 = internal::None, 
typename T48 = internal::None,
 
 4444     typename T49 = internal::None, 
typename T50 = internal::None>
 
 4446   typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4447       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4448       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 4449       T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
 
 4453 struct Types<internal::None, internal::None, internal::None, internal::None,
 
 4454     internal::None, internal::None, internal::None, internal::None,
 
 4455     internal::None, internal::None, internal::None, internal::None,
 
 4456     internal::None, internal::None, internal::None, internal::None,
 
 4457     internal::None, internal::None, internal::None, internal::None,
 
 4458     internal::None, internal::None, internal::None, internal::None,
 
 4459     internal::None, internal::None, internal::None, internal::None,
 
 4460     internal::None, internal::None, internal::None, internal::None,
 
 4461     internal::None, internal::None, internal::None, internal::None,
 
 4462     internal::None, internal::None, internal::None, internal::None,
 
 4463     internal::None, internal::None, internal::None, internal::None,
 
 4464     internal::None, internal::None, internal::None, internal::None,
 
 4465     internal::None, internal::None> {
 
 4466   typedef internal::Types0 type;
 
 4468 template <
typename T1>
 
 4469 struct Types<T1, internal::None, internal::None, internal::None,
 
 4470     internal::None, internal::None, internal::None, internal::None,
 
 4471     internal::None, internal::None, internal::None, internal::None,
 
 4472     internal::None, internal::None, internal::None, internal::None,
 
 4473     internal::None, internal::None, internal::None, internal::None,
 
 4474     internal::None, internal::None, internal::None, internal::None,
 
 4475     internal::None, internal::None, internal::None, internal::None,
 
 4476     internal::None, internal::None, internal::None, internal::None,
 
 4477     internal::None, internal::None, internal::None, internal::None,
 
 4478     internal::None, internal::None, internal::None, internal::None,
 
 4479     internal::None, internal::None, internal::None, internal::None,
 
 4480     internal::None, internal::None, internal::None, internal::None,
 
 4481     internal::None, internal::None> {
 
 4482   typedef internal::Types1<T1> type;
 
 4484 template <
typename T1, 
typename T2>
 
 4485 struct Types<T1, T2, internal::None, internal::None, internal::None,
 
 4486     internal::None, internal::None, internal::None, internal::None,
 
 4487     internal::None, internal::None, internal::None, internal::None,
 
 4488     internal::None, internal::None, internal::None, internal::None,
 
 4489     internal::None, internal::None, internal::None, internal::None,
 
 4490     internal::None, internal::None, internal::None, internal::None,
 
 4491     internal::None, internal::None, internal::None, internal::None,
 
 4492     internal::None, internal::None, internal::None, internal::None,
 
 4493     internal::None, internal::None, internal::None, internal::None,
 
 4494     internal::None, internal::None, internal::None, internal::None,
 
 4495     internal::None, internal::None, internal::None, internal::None,
 
 4496     internal::None, internal::None, internal::None, internal::None,
 
 4498   typedef internal::Types2<T1, T2> type;
 
 4500 template <
typename T1, 
typename T2, 
typename T3>
 
 4501 struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
 
 4502     internal::None, internal::None, internal::None, internal::None,
 
 4503     internal::None, internal::None, internal::None, internal::None,
 
 4504     internal::None, internal::None, internal::None, internal::None,
 
 4505     internal::None, internal::None, internal::None, internal::None,
 
 4506     internal::None, internal::None, internal::None, internal::None,
 
 4507     internal::None, internal::None, internal::None, internal::None,
 
 4508     internal::None, internal::None, internal::None, internal::None,
 
 4509     internal::None, internal::None, internal::None, internal::None,
 
 4510     internal::None, internal::None, internal::None, internal::None,
 
 4511     internal::None, internal::None, internal::None, internal::None,
 
 4512     internal::None, internal::None, internal::None, internal::None> {
 
 4513   typedef internal::Types3<T1, T2, T3> type;
 
 4515 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
 4516 struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
 
 4517     internal::None, internal::None, internal::None, internal::None,
 
 4518     internal::None, internal::None, internal::None, internal::None,
 
 4519     internal::None, internal::None, internal::None, internal::None,
 
 4520     internal::None, internal::None, internal::None, internal::None,
 
 4521     internal::None, internal::None, internal::None, internal::None,
 
 4522     internal::None, internal::None, internal::None, internal::None,
 
 4523     internal::None, internal::None, internal::None, internal::None,
 
 4524     internal::None, internal::None, internal::None, internal::None,
 
 4525     internal::None, internal::None, internal::None, internal::None,
 
 4526     internal::None, internal::None, internal::None, internal::None,
 
 4527     internal::None, internal::None, internal::None> {
 
 4528   typedef internal::Types4<T1, T2, T3, T4> type;
 
 4530 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
 4531 struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
 
 4532     internal::None, internal::None, internal::None, internal::None,
 
 4533     internal::None, internal::None, internal::None, internal::None,
 
 4534     internal::None, internal::None, internal::None, internal::None,
 
 4535     internal::None, internal::None, internal::None, internal::None,
 
 4536     internal::None, internal::None, internal::None, internal::None,
 
 4537     internal::None, internal::None, internal::None, internal::None,
 
 4538     internal::None, internal::None, internal::None, internal::None,
 
 4539     internal::None, internal::None, internal::None, internal::None,
 
 4540     internal::None, internal::None, internal::None, internal::None,
 
 4541     internal::None, internal::None, internal::None, internal::None,
 
 4542     internal::None, internal::None, internal::None> {
 
 4543   typedef internal::Types5<T1, T2, T3, T4, T5> type;
 
 4545 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4547 struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
 
 4548     internal::None, internal::None, internal::None, internal::None,
 
 4549     internal::None, internal::None, internal::None, internal::None,
 
 4550     internal::None, internal::None, internal::None, internal::None,
 
 4551     internal::None, internal::None, internal::None, internal::None,
 
 4552     internal::None, internal::None, internal::None, internal::None,
 
 4553     internal::None, internal::None, internal::None, internal::None,
 
 4554     internal::None, internal::None, internal::None, internal::None,
 
 4555     internal::None, internal::None, internal::None, internal::None,
 
 4556     internal::None, internal::None, internal::None, internal::None,
 
 4557     internal::None, internal::None, internal::None, internal::None,
 
 4558     internal::None, internal::None> {
 
 4559   typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
 
 4561 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4562     typename T6, 
typename T7>
 
 4563 struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
 
 4564     internal::None, internal::None, internal::None, internal::None,
 
 4565     internal::None, internal::None, internal::None, internal::None,
 
 4566     internal::None, internal::None, internal::None, internal::None,
 
 4567     internal::None, internal::None, internal::None, internal::None,
 
 4568     internal::None, internal::None, internal::None, internal::None,
 
 4569     internal::None, internal::None, internal::None, internal::None,
 
 4570     internal::None, internal::None, internal::None, internal::None,
 
 4571     internal::None, internal::None, internal::None, internal::None,
 
 4572     internal::None, internal::None, internal::None, internal::None,
 
 4573     internal::None, internal::None, internal::None, internal::None,
 
 4575   typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
 
 4577 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4578     typename T6, 
typename T7, 
typename T8>
 
 4579 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
 
 4580     internal::None, internal::None, internal::None, internal::None,
 
 4581     internal::None, internal::None, internal::None, internal::None,
 
 4582     internal::None, internal::None, internal::None, internal::None,
 
 4583     internal::None, internal::None, internal::None, internal::None,
 
 4584     internal::None, internal::None, internal::None, internal::None,
 
 4585     internal::None, internal::None, internal::None, internal::None,
 
 4586     internal::None, internal::None, internal::None, internal::None,
 
 4587     internal::None, internal::None, internal::None, internal::None,
 
 4588     internal::None, internal::None, internal::None, internal::None,
 
 4589     internal::None, internal::None, internal::None, internal::None> {
 
 4590   typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
 
 4592 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4593     typename T6, 
typename T7, 
typename T8, 
typename T9>
 
 4594 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
 
 4595     internal::None, internal::None, internal::None, internal::None,
 
 4596     internal::None, internal::None, internal::None, internal::None,
 
 4597     internal::None, internal::None, internal::None, internal::None,
 
 4598     internal::None, internal::None, internal::None, internal::None,
 
 4599     internal::None, internal::None, internal::None, internal::None,
 
 4600     internal::None, internal::None, internal::None, internal::None,
 
 4601     internal::None, internal::None, internal::None, internal::None,
 
 4602     internal::None, internal::None, internal::None, internal::None,
 
 4603     internal::None, internal::None, internal::None, internal::None,
 
 4604     internal::None, internal::None, internal::None, internal::None> {
 
 4605   typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
 
 4607 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4608     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
 4609 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
 
 4610     internal::None, internal::None, internal::None, internal::None,
 
 4611     internal::None, internal::None, internal::None, internal::None,
 
 4612     internal::None, internal::None, internal::None, internal::None,
 
 4613     internal::None, internal::None, internal::None, internal::None,
 
 4614     internal::None, internal::None, internal::None, internal::None,
 
 4615     internal::None, internal::None, internal::None, internal::None,
 
 4616     internal::None, internal::None, internal::None, internal::None,
 
 4617     internal::None, internal::None, internal::None, internal::None,
 
 4618     internal::None, internal::None, internal::None, internal::None,
 
 4619     internal::None, internal::None, internal::None> {
 
 4620   typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
 
 4622 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4623     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4625 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
 
 4626     internal::None, internal::None, internal::None, internal::None,
 
 4627     internal::None, internal::None, internal::None, internal::None,
 
 4628     internal::None, internal::None, internal::None, internal::None,
 
 4629     internal::None, internal::None, internal::None, internal::None,
 
 4630     internal::None, internal::None, internal::None, internal::None,
 
 4631     internal::None, internal::None, internal::None, internal::None,
 
 4632     internal::None, internal::None, internal::None, internal::None,
 
 4633     internal::None, internal::None, internal::None, internal::None,
 
 4634     internal::None, internal::None, internal::None, internal::None,
 
 4635     internal::None, internal::None> {
 
 4636   typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
 
 4638 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4639     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4640     typename T11, 
typename T12>
 
 4641 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
 
 4642     internal::None, internal::None, internal::None, internal::None,
 
 4643     internal::None, internal::None, internal::None, internal::None,
 
 4644     internal::None, internal::None, internal::None, internal::None,
 
 4645     internal::None, internal::None, internal::None, internal::None,
 
 4646     internal::None, internal::None, internal::None, internal::None,
 
 4647     internal::None, internal::None, internal::None, internal::None,
 
 4648     internal::None, internal::None, internal::None, internal::None,
 
 4649     internal::None, internal::None, internal::None, internal::None,
 
 4650     internal::None, internal::None, internal::None, internal::None,
 
 4652   typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
 4655 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4656     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4657     typename T11, 
typename T12, 
typename T13>
 
 4658 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 4659     internal::None, internal::None, internal::None, internal::None,
 
 4660     internal::None, internal::None, internal::None, internal::None,
 
 4661     internal::None, internal::None, internal::None, internal::None,
 
 4662     internal::None, internal::None, internal::None, internal::None,
 
 4663     internal::None, internal::None, internal::None, internal::None,
 
 4664     internal::None, internal::None, internal::None, internal::None,
 
 4665     internal::None, internal::None, internal::None, internal::None,
 
 4666     internal::None, internal::None, internal::None, internal::None,
 
 4667     internal::None, internal::None, internal::None, internal::None,
 
 4669   typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4672 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4673     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4674     typename T11, 
typename T12, 
typename T13, 
typename T14>
 
 4675 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 4676     internal::None, internal::None, internal::None, internal::None,
 
 4677     internal::None, internal::None, internal::None, internal::None,
 
 4678     internal::None, internal::None, internal::None, internal::None,
 
 4679     internal::None, internal::None, internal::None, internal::None,
 
 4680     internal::None, internal::None, internal::None, internal::None,
 
 4681     internal::None, internal::None, internal::None, internal::None,
 
 4682     internal::None, internal::None, internal::None, internal::None,
 
 4683     internal::None, internal::None, internal::None, internal::None,
 
 4684     internal::None, internal::None, internal::None, internal::None> {
 
 4685   typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4688 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4689     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4690     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15>
 
 4691 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4692     internal::None, internal::None, internal::None, internal::None,
 
 4693     internal::None, internal::None, internal::None, internal::None,
 
 4694     internal::None, internal::None, internal::None, internal::None,
 
 4695     internal::None, internal::None, internal::None, internal::None,
 
 4696     internal::None, internal::None, internal::None, internal::None,
 
 4697     internal::None, internal::None, internal::None, internal::None,
 
 4698     internal::None, internal::None, internal::None, internal::None,
 
 4699     internal::None, internal::None, internal::None, internal::None,
 
 4700     internal::None, internal::None, internal::None> {
 
 4701   typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4702       T13, T14, T15> type;
 
 4704 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4705     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4706     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4708 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4709     T16, internal::None, internal::None, internal::None, internal::None,
 
 4710     internal::None, internal::None, internal::None, internal::None,
 
 4711     internal::None, internal::None, internal::None, internal::None,
 
 4712     internal::None, internal::None, internal::None, internal::None,
 
 4713     internal::None, internal::None, internal::None, internal::None,
 
 4714     internal::None, internal::None, internal::None, internal::None,
 
 4715     internal::None, internal::None, internal::None, internal::None,
 
 4716     internal::None, internal::None, internal::None, internal::None,
 
 4717     internal::None, internal::None> {
 
 4718   typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4719       T13, T14, T15, T16> type;
 
 4721 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4722     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4723     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4724     typename T16, 
typename T17>
 
 4725 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4726     T16, T17, internal::None, internal::None, internal::None, internal::None,
 
 4727     internal::None, internal::None, internal::None, internal::None,
 
 4728     internal::None, internal::None, internal::None, internal::None,
 
 4729     internal::None, internal::None, internal::None, internal::None,
 
 4730     internal::None, internal::None, internal::None, internal::None,
 
 4731     internal::None, internal::None, internal::None, internal::None,
 
 4732     internal::None, internal::None, internal::None, internal::None,
 
 4733     internal::None, internal::None, internal::None, internal::None,
 
 4735   typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4736       T13, T14, T15, T16, T17> type;
 
 4738 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4739     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4740     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4741     typename T16, 
typename T17, 
typename T18>
 
 4742 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4743     T16, T17, T18, internal::None, internal::None, internal::None,
 
 4744     internal::None, internal::None, internal::None, internal::None,
 
 4745     internal::None, internal::None, internal::None, internal::None,
 
 4746     internal::None, internal::None, internal::None, internal::None,
 
 4747     internal::None, internal::None, internal::None, internal::None,
 
 4748     internal::None, internal::None, internal::None, internal::None,
 
 4749     internal::None, internal::None, internal::None, internal::None,
 
 4750     internal::None, internal::None, internal::None, internal::None,
 
 4752   typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4753       T13, T14, T15, T16, T17, T18> type;
 
 4755 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4756     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4757     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4758     typename T16, 
typename T17, 
typename T18, 
typename T19>
 
 4759 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4760     T16, T17, T18, T19, internal::None, internal::None, internal::None,
 
 4761     internal::None, internal::None, internal::None, internal::None,
 
 4762     internal::None, internal::None, internal::None, internal::None,
 
 4763     internal::None, internal::None, internal::None, internal::None,
 
 4764     internal::None, internal::None, internal::None, internal::None,
 
 4765     internal::None, internal::None, internal::None, internal::None,
 
 4766     internal::None, internal::None, internal::None, internal::None,
 
 4767     internal::None, internal::None, internal::None, internal::None> {
 
 4768   typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4769       T13, T14, T15, T16, T17, T18, T19> type;
 
 4771 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4772     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4773     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4774     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20>
 
 4775 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4776     T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
 
 4777     internal::None, internal::None, internal::None, internal::None,
 
 4778     internal::None, internal::None, internal::None, internal::None,
 
 4779     internal::None, internal::None, internal::None, internal::None,
 
 4780     internal::None, internal::None, internal::None, internal::None,
 
 4781     internal::None, internal::None, internal::None, internal::None,
 
 4782     internal::None, internal::None, internal::None, internal::None,
 
 4783     internal::None, internal::None, internal::None> {
 
 4784   typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4785       T13, T14, T15, T16, T17, T18, T19, T20> type;
 
 4787 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4788     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4789     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4790     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4792 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4793     T16, T17, T18, T19, T20, T21, internal::None, internal::None,
 
 4794     internal::None, internal::None, internal::None, internal::None,
 
 4795     internal::None, internal::None, internal::None, internal::None,
 
 4796     internal::None, internal::None, internal::None, internal::None,
 
 4797     internal::None, internal::None, internal::None, internal::None,
 
 4798     internal::None, internal::None, internal::None, internal::None,
 
 4799     internal::None, internal::None, internal::None, internal::None,
 
 4800     internal::None, internal::None, internal::None> {
 
 4801   typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4802       T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
 
 4804 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4805     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4806     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4807     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4808     typename T21, 
typename T22>
 
 4809 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4810     T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
 
 4811     internal::None, internal::None, internal::None, internal::None,
 
 4812     internal::None, internal::None, internal::None, internal::None,
 
 4813     internal::None, internal::None, internal::None, internal::None,
 
 4814     internal::None, internal::None, internal::None, internal::None,
 
 4815     internal::None, internal::None, internal::None, internal::None,
 
 4816     internal::None, internal::None, internal::None, internal::None,
 
 4817     internal::None, internal::None> {
 
 4818   typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4819       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
 
 4821 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4822     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4823     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4824     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4825     typename T21, 
typename T22, 
typename T23>
 
 4826 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4827     T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
 
 4828     internal::None, internal::None, internal::None, internal::None,
 
 4829     internal::None, internal::None, internal::None, internal::None,
 
 4830     internal::None, internal::None, internal::None, internal::None,
 
 4831     internal::None, internal::None, internal::None, internal::None,
 
 4832     internal::None, internal::None, internal::None, internal::None,
 
 4833     internal::None, internal::None, internal::None, internal::None,
 
 4835   typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4836       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
 
 4838 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4839     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4840     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4841     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4842     typename T21, 
typename T22, 
typename T23, 
typename T24>
 
 4843 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4844     T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
 
 4845     internal::None, internal::None, internal::None, internal::None,
 
 4846     internal::None, internal::None, internal::None, internal::None,
 
 4847     internal::None, internal::None, internal::None, internal::None,
 
 4848     internal::None, internal::None, internal::None, internal::None,
 
 4849     internal::None, internal::None, internal::None, internal::None,
 
 4850     internal::None, internal::None, internal::None, internal::None,
 
 4852   typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4853       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
 
 4855 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4856     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4857     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4858     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4859     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25>
 
 4860 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4861     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
 
 4862     internal::None, internal::None, internal::None, internal::None,
 
 4863     internal::None, internal::None, internal::None, internal::None,
 
 4864     internal::None, internal::None, internal::None, internal::None,
 
 4865     internal::None, internal::None, internal::None, internal::None,
 
 4866     internal::None, internal::None, internal::None, internal::None,
 
 4867     internal::None, internal::None, internal::None, internal::None> {
 
 4868   typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4869       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
 
 4871 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4872     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4873     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4874     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4875     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4877 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4878     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
 
 4879     internal::None, internal::None, internal::None, internal::None,
 
 4880     internal::None, internal::None, internal::None, internal::None,
 
 4881     internal::None, internal::None, internal::None, internal::None,
 
 4882     internal::None, internal::None, internal::None, internal::None,
 
 4883     internal::None, internal::None, internal::None, internal::None,
 
 4884     internal::None, internal::None, internal::None> {
 
 4885   typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4886       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
 4889 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4890     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4891     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4892     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4893     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4894     typename T26, 
typename T27>
 
 4895 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4896     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
 
 4897     internal::None, internal::None, internal::None, internal::None,
 
 4898     internal::None, internal::None, internal::None, internal::None,
 
 4899     internal::None, internal::None, internal::None, internal::None,
 
 4900     internal::None, internal::None, internal::None, internal::None,
 
 4901     internal::None, internal::None, internal::None, internal::None,
 
 4902     internal::None, internal::None> {
 
 4903   typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4904       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4907 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4908     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4909     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4910     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4911     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4912     typename T26, 
typename T27, 
typename T28>
 
 4913 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4914     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 4915     internal::None, internal::None, internal::None, internal::None,
 
 4916     internal::None, internal::None, internal::None, internal::None,
 
 4917     internal::None, internal::None, internal::None, internal::None,
 
 4918     internal::None, internal::None, internal::None, internal::None,
 
 4919     internal::None, internal::None, internal::None, internal::None,
 
 4920     internal::None, internal::None> {
 
 4921   typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4922       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4925 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4926     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4927     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4928     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4929     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4930     typename T26, 
typename T27, 
typename T28, 
typename T29>
 
 4931 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4932     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 4933     internal::None, internal::None, internal::None, internal::None,
 
 4934     internal::None, internal::None, internal::None, internal::None,
 
 4935     internal::None, internal::None, internal::None, internal::None,
 
 4936     internal::None, internal::None, internal::None, internal::None,
 
 4937     internal::None, internal::None, internal::None, internal::None,
 
 4939   typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4940       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4941       T27, T28, T29> type;
 
 4943 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4944     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4945     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4946     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4947     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4948     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30>
 
 4949 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4950     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 4951     internal::None, internal::None, internal::None, internal::None,
 
 4952     internal::None, internal::None, internal::None, internal::None,
 
 4953     internal::None, internal::None, internal::None, internal::None,
 
 4954     internal::None, internal::None, internal::None, internal::None,
 
 4955     internal::None, internal::None, internal::None, internal::None> {
 
 4956   typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4957       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4958       T27, T28, T29, T30> type;
 
 4960 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4961     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4962     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4963     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4964     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4965     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4967 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4968     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 4969     T31, internal::None, internal::None, internal::None, internal::None,
 
 4970     internal::None, internal::None, internal::None, internal::None,
 
 4971     internal::None, internal::None, internal::None, internal::None,
 
 4972     internal::None, internal::None, internal::None, internal::None,
 
 4973     internal::None, internal::None, internal::None> {
 
 4974   typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4975       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4976       T27, T28, T29, T30, T31> type;
 
 4978 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4979     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4980     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4981     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 4982     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 4983     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 4984     typename T31, 
typename T32>
 
 4985 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 4986     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 4987     T31, T32, internal::None, internal::None, internal::None, internal::None,
 
 4988     internal::None, internal::None, internal::None, internal::None,
 
 4989     internal::None, internal::None, internal::None, internal::None,
 
 4990     internal::None, internal::None, internal::None, internal::None,
 
 4991     internal::None, internal::None> {
 
 4992   typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 4993       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 4994       T27, T28, T29, T30, T31, T32> type;
 
 4996 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 4997     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 4998     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 4999     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5000     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5001     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5002     typename T31, 
typename T32, 
typename T33>
 
 5003 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5004     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5005     T31, T32, T33, internal::None, internal::None, internal::None,
 
 5006     internal::None, internal::None, internal::None, internal::None,
 
 5007     internal::None, internal::None, internal::None, internal::None,
 
 5008     internal::None, internal::None, internal::None, internal::None,
 
 5009     internal::None, internal::None> {
 
 5010   typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5011       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5012       T27, T28, T29, T30, T31, T32, T33> type;
 
 5014 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5015     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5016     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5017     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5018     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5019     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5020     typename T31, 
typename T32, 
typename T33, 
typename T34>
 
 5021 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5022     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5023     T31, T32, T33, T34, internal::None, internal::None, internal::None,
 
 5024     internal::None, internal::None, internal::None, internal::None,
 
 5025     internal::None, internal::None, internal::None, internal::None,
 
 5026     internal::None, internal::None, internal::None, internal::None,
 
 5028   typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5029       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5030       T27, T28, T29, T30, T31, T32, T33, T34> type;
 
 5032 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5033     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5034     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5035     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5036     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5037     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5038     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35>
 
 5039 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5040     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5041     T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
 
 5042     internal::None, internal::None, internal::None, internal::None,
 
 5043     internal::None, internal::None, internal::None, internal::None,
 
 5044     internal::None, internal::None, internal::None, internal::None> {
 
 5045   typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5046       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5047       T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
 
 5049 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5050     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5051     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5052     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5053     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5054     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5055     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5057 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5058     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5059     T31, T32, T33, T34, T35, T36, internal::None, internal::None,
 
 5060     internal::None, internal::None, internal::None, internal::None,
 
 5061     internal::None, internal::None, internal::None, internal::None,
 
 5062     internal::None, internal::None, internal::None, internal::None> {
 
 5063   typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5064       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5065       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
 
 5067 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5068     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5069     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5070     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5071     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5072     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5073     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5074     typename T36, 
typename T37>
 
 5075 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5076     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5077     T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
 
 5078     internal::None, internal::None, internal::None, internal::None,
 
 5079     internal::None, internal::None, internal::None, internal::None,
 
 5080     internal::None, internal::None, internal::None> {
 
 5081   typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5082       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5083       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
 
 5085 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5086     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5087     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5088     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5089     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5090     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5091     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5092     typename T36, 
typename T37, 
typename T38>
 
 5093 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5094     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5095     T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
 
 5096     internal::None, internal::None, internal::None, internal::None,
 
 5097     internal::None, internal::None, internal::None, internal::None,
 
 5098     internal::None, internal::None> {
 
 5099   typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5100       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5101       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
 
 5103 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5104     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5105     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5106     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5107     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5108     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5109     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5110     typename T36, 
typename T37, 
typename T38, 
typename T39>
 
 5111 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5112     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5113     T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
 
 5114     internal::None, internal::None, internal::None, internal::None,
 
 5115     internal::None, internal::None, internal::None, internal::None,
 
 5116     internal::None, internal::None> {
 
 5117   typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5118       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5119       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
 
 5121 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5122     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5123     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5124     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5125     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5126     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5127     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5128     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40>
 
 5129 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5130     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5131     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
 
 5132     internal::None, internal::None, internal::None, internal::None,
 
 5133     internal::None, internal::None, internal::None, internal::None,
 
 5135   typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5136       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5137       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
 5140 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5141     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5142     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5143     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5144     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5145     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5146     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5147     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5149 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5150     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5151     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
 
 5152     internal::None, internal::None, internal::None, internal::None,
 
 5153     internal::None, internal::None, internal::None, internal::None> {
 
 5154   typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5155       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5156       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5159 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5160     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5161     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5162     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5163     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5164     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5165     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5166     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5167     typename T41, 
typename T42>
 
 5168 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5169     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5170     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
 
 5171     internal::None, internal::None, internal::None, internal::None,
 
 5172     internal::None, internal::None, internal::None> {
 
 5173   typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5174       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5175       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5178 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5179     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5180     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5181     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5182     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5183     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5184     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5185     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5186     typename T41, 
typename T42, 
typename T43>
 
 5187 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5188     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5189     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 5190     internal::None, internal::None, internal::None, internal::None,
 
 5191     internal::None, internal::None, internal::None> {
 
 5192   typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5193       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5194       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5195       T41, T42, T43> type;
 
 5197 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5198     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5199     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5200     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5201     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5202     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5203     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5204     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5205     typename T41, 
typename T42, 
typename T43, 
typename T44>
 
 5206 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5207     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5208     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 5209     internal::None, internal::None, internal::None, internal::None,
 
 5210     internal::None, internal::None> {
 
 5211   typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5212       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5213       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5214       T41, T42, T43, T44> type;
 
 5216 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5217     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5218     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5219     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5220     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5221     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5222     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5223     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5224     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45>
 
 5225 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5226     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5227     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
 
 5228     internal::None, internal::None, internal::None, internal::None,
 
 5230   typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5231       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5232       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5233       T41, T42, T43, T44, T45> type;
 
 5235 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5236     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5237     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5238     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5239     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5240     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5241     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5242     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5243     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 5245 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5246     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5247     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
 
 5248     T46, internal::None, internal::None, internal::None, internal::None> {
 
 5249   typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5250       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5251       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5252       T41, T42, T43, T44, T45, T46> type;
 
 5254 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5255     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5256     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5257     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5258     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5259     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5260     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5261     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5262     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 5263     typename T46, 
typename T47>
 
 5264 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5265     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5266     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
 
 5267     T46, T47, internal::None, internal::None, internal::None> {
 
 5268   typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5269       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5270       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5271       T41, T42, T43, T44, T45, T46, T47> type;
 
 5273 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5274     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5275     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5276     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5277     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5278     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5279     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5280     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5281     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 5282     typename T46, 
typename T47, 
typename T48>
 
 5283 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5284     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5285     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
 
 5286     T46, T47, T48, internal::None, internal::None> {
 
 5287   typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5288       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5289       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5290       T41, T42, T43, T44, T45, T46, T47, T48> type;
 
 5292 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 5293     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 5294     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 5295     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 5296     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 5297     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 5298     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 5299     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 5300     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 5301     typename T46, 
typename T47, 
typename T48, 
typename T49>
 
 5302 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 
 5303     T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
 
 5304     T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
 
 5305     T46, T47, T48, T49, internal::None> {
 
 5306   typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 5307       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 5308       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 5309       T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
 
 5312 namespace internal {
 
 5314 # define GTEST_TEMPLATE_ template <typename T> class 
 5324 template <GTEST_TEMPLATE_ Tmpl>
 
 5325 struct TemplateSel {
 
 5326   template <
typename T>
 
 5328     typedef Tmpl<T> type;
 
 5332 # define GTEST_BIND_(TmplSel, T) \ 
 5333   TmplSel::template Bind<T>::type 
 5339 template <
typename T>
 
 5350 struct Templates0 {};
 
 5354 template <GTEST_TEMPLATE_ T1>
 
 5356   typedef TemplateSel<T1> Head;
 
 5357   typedef Templates0 Tail;
 
 5359 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
 
 5361   typedef TemplateSel<T1> Head;
 
 5362   typedef Templates1<T2> Tail;
 
 5365 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
 
 5367   typedef TemplateSel<T1> Head;
 
 5368   typedef Templates2<T2, T3> Tail;
 
 5371 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5374   typedef TemplateSel<T1> Head;
 
 5375   typedef Templates3<T2, T3, T4> Tail;
 
 5378 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5379     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
 
 5381   typedef TemplateSel<T1> Head;
 
 5382   typedef Templates4<T2, T3, T4, T5> Tail;
 
 5385 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5386     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
 
 5388   typedef TemplateSel<T1> Head;
 
 5389   typedef Templates5<T2, T3, T4, T5, T6> Tail;
 
 5392 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5393     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5396   typedef TemplateSel<T1> Head;
 
 5397   typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
 
 5400 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5401     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5402     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
 
 5404   typedef TemplateSel<T1> Head;
 
 5405   typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
 
 5408 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5409     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5410     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
 
 5412   typedef TemplateSel<T1> Head;
 
 5413   typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
 
 5416 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5417     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5418     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5419     GTEST_TEMPLATE_ T10>
 
 5420 struct Templates10 {
 
 5421   typedef TemplateSel<T1> Head;
 
 5422   typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
 
 5425 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5426     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5427     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5428     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
 
 5429 struct Templates11 {
 
 5430   typedef TemplateSel<T1> Head;
 
 5431   typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
 
 5434 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5435     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5436     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5437     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
 
 5438 struct Templates12 {
 
 5439   typedef TemplateSel<T1> Head;
 
 5440   typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
 
 5443 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5444     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5445     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5446     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5447     GTEST_TEMPLATE_ T13>
 
 5448 struct Templates13 {
 
 5449   typedef TemplateSel<T1> Head;
 
 5450   typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
 
 5453 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5454     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5455     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5456     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5457     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
 
 5458 struct Templates14 {
 
 5459   typedef TemplateSel<T1> Head;
 
 5460   typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 5464 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5465     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5466     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5467     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5468     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
 
 5469 struct Templates15 {
 
 5470   typedef TemplateSel<T1> Head;
 
 5471   typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5475 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5476     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5477     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5478     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5479     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5480     GTEST_TEMPLATE_ T16>
 
 5481 struct Templates16 {
 
 5482   typedef TemplateSel<T1> Head;
 
 5483   typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5487 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5488     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5489     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5490     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5491     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5492     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
 
 5493 struct Templates17 {
 
 5494   typedef TemplateSel<T1> Head;
 
 5495   typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5496       T15, T16, T17> Tail;
 
 5499 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5500     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5501     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5502     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5503     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5504     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
 
 5505 struct Templates18 {
 
 5506   typedef TemplateSel<T1> Head;
 
 5507   typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5508       T15, T16, T17, T18> Tail;
 
 5511 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5512     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5513     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5514     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5515     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5516     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5517     GTEST_TEMPLATE_ T19>
 
 5518 struct Templates19 {
 
 5519   typedef TemplateSel<T1> Head;
 
 5520   typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5521       T15, T16, T17, T18, T19> Tail;
 
 5524 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5525     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5526     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5527     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5528     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5529     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5530     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
 
 5531 struct Templates20 {
 
 5532   typedef TemplateSel<T1> Head;
 
 5533   typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5534       T15, T16, T17, T18, T19, T20> Tail;
 
 5537 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5538     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5539     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5540     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5541     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5542     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5543     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
 
 5544 struct Templates21 {
 
 5545   typedef TemplateSel<T1> Head;
 
 5546   typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5547       T15, T16, T17, T18, T19, T20, T21> Tail;
 
 5550 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5551     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5552     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5553     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5554     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5555     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5556     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5557     GTEST_TEMPLATE_ T22>
 
 5558 struct Templates22 {
 
 5559   typedef TemplateSel<T1> Head;
 
 5560   typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5561       T15, T16, T17, T18, T19, T20, T21, T22> Tail;
 
 5564 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5565     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5566     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5567     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5568     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5569     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5570     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5571     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
 
 5572 struct Templates23 {
 
 5573   typedef TemplateSel<T1> Head;
 
 5574   typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5575       T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
 
 5578 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5579     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5580     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5581     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5582     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5583     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5584     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5585     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
 
 5586 struct Templates24 {
 
 5587   typedef TemplateSel<T1> Head;
 
 5588   typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5589       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
 
 5592 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5593     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5594     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5595     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5596     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5597     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5598     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5599     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5600     GTEST_TEMPLATE_ T25>
 
 5601 struct Templates25 {
 
 5602   typedef TemplateSel<T1> Head;
 
 5603   typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5604       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
 
 5607 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5608     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5609     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5610     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5611     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5612     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5613     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5614     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5615     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
 
 5616 struct Templates26 {
 
 5617   typedef TemplateSel<T1> Head;
 
 5618   typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5619       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
 
 5622 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5623     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5624     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5625     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5626     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5627     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5628     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5629     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5630     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
 
 5631 struct Templates27 {
 
 5632   typedef TemplateSel<T1> Head;
 
 5633   typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5634       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
 
 5637 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5638     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5639     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5640     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5641     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5642     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5643     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5644     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5645     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5646     GTEST_TEMPLATE_ T28>
 
 5647 struct Templates28 {
 
 5648   typedef TemplateSel<T1> Head;
 
 5649   typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5650       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 5654 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5655     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5656     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5657     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5658     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5659     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5660     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5661     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5662     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5663     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
 
 5664 struct Templates29 {
 
 5665   typedef TemplateSel<T1> Head;
 
 5666   typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5667       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5671 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5672     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5673     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5674     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5675     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5676     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5677     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5678     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5679     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5680     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
 
 5681 struct Templates30 {
 
 5682   typedef TemplateSel<T1> Head;
 
 5683   typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5684       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5688 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5689     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5690     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5691     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5692     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5693     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5694     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5695     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5696     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5697     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5698     GTEST_TEMPLATE_ T31>
 
 5699 struct Templates31 {
 
 5700   typedef TemplateSel<T1> Head;
 
 5701   typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5702       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5703       T29, T30, T31> Tail;
 
 5706 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5707     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5708     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5709     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5710     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5711     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5712     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5713     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5714     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5715     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5716     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
 
 5717 struct Templates32 {
 
 5718   typedef TemplateSel<T1> Head;
 
 5719   typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5720       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5721       T29, T30, T31, T32> Tail;
 
 5724 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5725     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5726     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5727     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5728     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5729     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5730     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5731     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5732     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5733     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5734     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
 
 5735 struct Templates33 {
 
 5736   typedef TemplateSel<T1> Head;
 
 5737   typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5738       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5739       T29, T30, T31, T32, T33> Tail;
 
 5742 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5743     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5744     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5745     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5746     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5747     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5748     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5749     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5750     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5751     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5752     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5753     GTEST_TEMPLATE_ T34>
 
 5754 struct Templates34 {
 
 5755   typedef TemplateSel<T1> Head;
 
 5756   typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5757       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5758       T29, T30, T31, T32, T33, T34> Tail;
 
 5761 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5762     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5763     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5764     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5765     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5766     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5767     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5768     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5769     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5770     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5771     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5772     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
 
 5773 struct Templates35 {
 
 5774   typedef TemplateSel<T1> Head;
 
 5775   typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5776       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5777       T29, T30, T31, T32, T33, T34, T35> Tail;
 
 5780 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5781     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5782     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5783     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5784     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5785     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5786     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5787     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5788     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5789     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5790     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5791     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
 
 5792 struct Templates36 {
 
 5793   typedef TemplateSel<T1> Head;
 
 5794   typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5795       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5796       T29, T30, T31, T32, T33, T34, T35, T36> Tail;
 
 5799 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5800     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5801     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5802     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5803     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5804     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5805     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5806     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5807     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5808     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5809     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5810     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5811     GTEST_TEMPLATE_ T37>
 
 5812 struct Templates37 {
 
 5813   typedef TemplateSel<T1> Head;
 
 5814   typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5815       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5816       T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
 
 5819 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5820     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5821     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5822     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5823     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5824     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5825     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5826     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5827     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5828     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5829     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5830     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5831     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
 
 5832 struct Templates38 {
 
 5833   typedef TemplateSel<T1> Head;
 
 5834   typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5835       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5836       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
 
 5839 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5840     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5841     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5842     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5843     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5844     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5845     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5846     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5847     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5848     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5849     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5850     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5851     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
 
 5852 struct Templates39 {
 
 5853   typedef TemplateSel<T1> Head;
 
 5854   typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5855       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5856       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
 
 5859 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5860     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5861     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5862     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5863     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5864     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5865     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5866     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5867     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5868     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5869     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5870     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5871     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5872     GTEST_TEMPLATE_ T40>
 
 5873 struct Templates40 {
 
 5874   typedef TemplateSel<T1> Head;
 
 5875   typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5876       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5877       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
 
 5880 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5881     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5882     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5883     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5884     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5885     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5886     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5887     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5888     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5889     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5890     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5891     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5892     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5893     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
 
 5894 struct Templates41 {
 
 5895   typedef TemplateSel<T1> Head;
 
 5896   typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5897       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5898       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
 
 5901 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5902     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5903     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5904     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5905     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5906     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5907     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5908     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5909     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5910     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5911     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5912     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5913     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5914     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
 
 5915 struct Templates42 {
 
 5916   typedef TemplateSel<T1> Head;
 
 5917   typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5918       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5919       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 5923 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5924     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5925     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5926     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5927     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5928     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5929     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5930     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5931     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5932     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5933     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5934     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5935     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5936     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 5937     GTEST_TEMPLATE_ T43>
 
 5938 struct Templates43 {
 
 5939   typedef TemplateSel<T1> Head;
 
 5940   typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5941       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5942       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 5946 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5947     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5948     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5949     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5950     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5951     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5952     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5953     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5954     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5955     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5956     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5957     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5958     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5959     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 5960     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
 
 5961 struct Templates44 {
 
 5962   typedef TemplateSel<T1> Head;
 
 5963   typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5964       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5965       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 5969 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5970     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5971     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5972     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5973     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5974     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5975     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5976     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 5977     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 5978     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 5979     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 5980     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 5981     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 5982     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 5983     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
 
 5984 struct Templates45 {
 
 5985   typedef TemplateSel<T1> Head;
 
 5986   typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 5987       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 5988       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 5989       T43, T44, T45> Tail;
 
 5992 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 5993     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 5994     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 5995     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 5996     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 5997     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 5998     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 5999     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6000     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6001     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6002     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6003     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6004     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6005     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6006     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6007     GTEST_TEMPLATE_ T46>
 
 6008 struct Templates46 {
 
 6009   typedef TemplateSel<T1> Head;
 
 6010   typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6011       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6012       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 6013       T43, T44, T45, T46> Tail;
 
 6016 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6017     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6018     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6019     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6020     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6021     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6022     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6023     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6024     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6025     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6026     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6027     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6028     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6029     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6030     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6031     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
 
 6032 struct Templates47 {
 
 6033   typedef TemplateSel<T1> Head;
 
 6034   typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6035       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6036       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 6037       T43, T44, T45, T46, T47> Tail;
 
 6040 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6041     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6042     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6043     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6044     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6045     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6046     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6047     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6048     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6049     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6050     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6051     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6052     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6053     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6054     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6055     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
 
 6056 struct Templates48 {
 
 6057   typedef TemplateSel<T1> Head;
 
 6058   typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6059       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6060       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 6061       T43, T44, T45, T46, T47, T48> Tail;
 
 6064 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6065     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6066     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6067     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6068     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6069     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6070     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6071     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6072     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6073     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6074     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6075     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6076     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6077     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6078     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6079     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
 
 6080     GTEST_TEMPLATE_ T49>
 
 6081 struct Templates49 {
 
 6082   typedef TemplateSel<T1> Head;
 
 6083   typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6084       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6085       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 6086       T43, T44, T45, T46, T47, T48, T49> Tail;
 
 6089 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6090     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6091     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6092     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6093     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6094     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6095     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6096     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6097     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6098     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6099     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6100     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6101     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6102     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6103     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6104     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
 
 6105     GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
 
 6106 struct Templates50 {
 
 6107   typedef TemplateSel<T1> Head;
 
 6108   typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6109       T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6110       T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
 6111       T43, T44, T45, T46, T47, T48, T49, T50> Tail;
 
 6128 template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
 
 6129     GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
 
 6130     GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
 
 6131     GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
 
 6132     GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
 
 6133     GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
 
 6134     GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
 
 6135     GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
 
 6136     GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
 
 6137     GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
 
 6138     GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
 
 6139     GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
 
 6140     GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
 
 6141     GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
 
 6142     GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
 
 6143     GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
 
 6144     GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
 
 6145     GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
 
 6146     GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
 
 6147     GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
 
 6148     GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
 
 6149     GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
 
 6150     GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
 
 6151     GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
 
 6152     GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
 
 6154   typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6155       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6156       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6157       T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
 
 6161 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6162     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6163     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6164     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6165     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6167   typedef Templates0 type;
 
 6169 template <GTEST_TEMPLATE_ T1>
 
 6170 struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6171     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6172     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6173     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6174     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6176   typedef Templates1<T1> type;
 
 6178 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
 
 6179 struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6180     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6181     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6182     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6183     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6185   typedef Templates2<T1, T2> type;
 
 6187 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
 
 6188 struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6189     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6190     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6191     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6192     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6193   typedef Templates3<T1, T2, T3> type;
 
 6195 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6197 struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6198     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6199     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6200     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6201     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6202   typedef Templates4<T1, T2, T3, T4> type;
 
 6204 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6205     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
 
 6206 struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6207     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6208     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6209     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6210     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6211   typedef Templates5<T1, T2, T3, T4, T5> type;
 
 6213 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6214     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
 
 6215 struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6216     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6217     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6218     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6219     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6220   typedef Templates6<T1, T2, T3, T4, T5, T6> type;
 
 6222 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6223     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6225 struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6226     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6227     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6228     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6229     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6230   typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
 
 6232 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6233     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6234     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
 
 6235 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
 
 6236     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6237     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6238     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6239     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6240   typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
 
 6242 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6243     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6244     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
 
 6245 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
 
 6246     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6247     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6248     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6249     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6250   typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
 
 6252 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6253     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6254     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6255     GTEST_TEMPLATE_ T10>
 
 6256 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
 
 6257     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6258     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6259     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6260     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6261   typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
 
 6263 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6264     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6265     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6266     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
 
 6267 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
 
 6268     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6269     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6270     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6271     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6272   typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
 
 6274 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6275     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6276     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6277     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
 
 6278 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
 
 6279     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6280     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6281     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6282     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6283   typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
 
 6285 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6286     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6287     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6288     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6289     GTEST_TEMPLATE_ T13>
 
 6290 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
 
 6291     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6292     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6293     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6294     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6295   typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 6298 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6299     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6300     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6301     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6302     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
 
 6303 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6304     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6305     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6306     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6307     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6308   typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6311 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6312     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6313     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6314     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6315     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
 
 6316 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6317     T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6318     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6319     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6320     NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6321   typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6324 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6325     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6326     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6327     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6328     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6329     GTEST_TEMPLATE_ T16>
 
 6330 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6331     T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6332     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6333     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6334     NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6335   typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6336       T14, T15, T16> type;
 
 6338 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6339     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6340     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6341     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6342     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6343     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
 
 6344 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6345     T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6346     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6347     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6348     NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6349   typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6350       T14, T15, T16, T17> type;
 
 6352 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6353     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6354     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6355     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6356     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6357     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
 
 6358 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6359     T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6360     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6361     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6362     NoneT, NoneT, NoneT, NoneT> {
 
 6363   typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6364       T14, T15, T16, T17, T18> type;
 
 6366 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6367     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6368     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6369     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6370     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6371     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6372     GTEST_TEMPLATE_ T19>
 
 6373 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6374     T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6375     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6376     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6377     NoneT, NoneT, NoneT, NoneT> {
 
 6378   typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6379       T14, T15, T16, T17, T18, T19> type;
 
 6381 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6382     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6383     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6384     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6385     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6386     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6387     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
 
 6388 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6389     T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6390     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6391     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6392     NoneT, NoneT, NoneT, NoneT> {
 
 6393   typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6394       T14, T15, T16, T17, T18, T19, T20> type;
 
 6396 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6397     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6398     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6399     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6400     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6401     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6402     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
 
 6403 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6404     T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6405     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6406     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6407     NoneT, NoneT, NoneT, NoneT> {
 
 6408   typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6409       T14, T15, T16, T17, T18, T19, T20, T21> type;
 
 6411 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6412     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6413     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6414     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6415     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6416     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6417     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6418     GTEST_TEMPLATE_ T22>
 
 6419 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6420     T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6421     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6422     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6423     NoneT, NoneT, NoneT> {
 
 6424   typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6425       T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
 
 6427 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6428     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6429     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6430     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6431     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6432     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6433     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6434     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
 
 6435 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6436     T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
 
 6437     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6438     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6439     NoneT, NoneT, NoneT> {
 
 6440   typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6441       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
 
 6443 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6444     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6445     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6446     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6447     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6448     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6449     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6450     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
 
 6451 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6452     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
 
 6453     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6454     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6455     NoneT, NoneT, NoneT> {
 
 6456   typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6457       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
 
 6459 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6460     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6461     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6462     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6463     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6464     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6465     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6466     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6467     GTEST_TEMPLATE_ T25>
 
 6468 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6469     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
 
 6470     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6471     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6473   typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6474       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
 
 6476 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6477     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6478     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6479     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6480     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6481     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6482     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6483     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6484     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
 
 6485 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6486     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
 
 6487     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6488     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6490   typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6491       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
 
 6493 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6494     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6495     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6496     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6497     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6498     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6499     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6500     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6501     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
 
 6502 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6503     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
 
 6504     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6505     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6507   typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6508       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 6511 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6512     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6513     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6514     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6515     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6516     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6517     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6518     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6519     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6520     GTEST_TEMPLATE_ T28>
 
 6521 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6522     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 6523     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6524     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6526   typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6527       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6530 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6531     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6532     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6533     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6534     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6535     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6536     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6537     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6538     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6539     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
 
 6540 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6541     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6542     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6543     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6545   typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6546       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6549 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6550     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6551     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6552     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6553     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6554     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6555     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6556     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6557     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6558     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
 
 6559 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6560     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6561     T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6562     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6563   typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6564       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6565       T28, T29, T30> type;
 
 6567 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6568     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6569     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6570     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6571     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6572     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6573     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6574     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6575     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6576     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6577     GTEST_TEMPLATE_ T31>
 
 6578 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6579     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6580     T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6581     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6582   typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6583       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6584       T28, T29, T30, T31> type;
 
 6586 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6587     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6588     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6589     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6590     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6591     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6592     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6593     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6594     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6595     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6596     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
 
 6597 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6598     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6599     T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6600     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6601   typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6602       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6603       T28, T29, T30, T31, T32> type;
 
 6605 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6606     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6607     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6608     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6609     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6610     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6611     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6612     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6613     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6614     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6615     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
 
 6616 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6617     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6618     T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6619     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6620   typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6621       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6622       T28, T29, T30, T31, T32, T33> type;
 
 6624 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6625     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6626     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6627     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6628     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6629     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6630     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6631     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6632     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6633     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6634     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6635     GTEST_TEMPLATE_ T34>
 
 6636 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6637     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6638     T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6639     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6640   typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6641       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6642       T28, T29, T30, T31, T32, T33, T34> type;
 
 6644 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6645     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6646     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6647     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6648     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6649     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6650     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6651     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6652     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6653     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6654     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6655     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
 
 6656 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6657     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6658     T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6659     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6660   typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6661       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6662       T28, T29, T30, T31, T32, T33, T34, T35> type;
 
 6664 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6665     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6666     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6667     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6668     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6669     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6670     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6671     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6672     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6673     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6674     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6675     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
 
 6676 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6677     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6678     T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6679     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6680   typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6681       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6682       T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
 
 6684 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6685     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6686     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6687     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6688     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6689     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6690     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6691     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6692     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6693     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6694     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6695     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6696     GTEST_TEMPLATE_ T37>
 
 6697 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6698     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6699     T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
 
 6700     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6701   typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6702       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6703       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
 
 6705 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6706     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6707     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6708     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6709     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6710     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6711     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6712     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6713     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6714     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6715     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6716     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6717     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
 
 6718 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6719     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6720     T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
 
 6721     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6722   typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6723       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6724       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
 
 6726 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6727     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6728     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6729     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6730     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6731     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6732     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6733     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6734     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6735     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6736     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6737     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6738     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
 
 6739 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6740     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6741     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
 
 6742     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6743   typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6744       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6745       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
 
 6747 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6748     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6749     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6750     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6751     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6752     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6753     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6754     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6755     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6756     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6757     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6758     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6759     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6760     GTEST_TEMPLATE_ T40>
 
 6761 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6762     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6763     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
 
 6764     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6765   typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6766       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6767       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
 
 6769 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6770     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6771     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6772     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6773     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6774     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6775     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6776     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6777     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6778     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6779     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6780     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6781     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6782     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
 
 6783 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6784     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6785     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
 
 6786     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6787   typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6788       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6789       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 6792 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6793     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6794     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6795     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6796     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6797     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6798     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6799     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6800     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6801     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6802     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6803     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6804     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6805     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
 
 6806 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6807     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6808     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
 
 6809     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6810   typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6811       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6812       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6815 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6816     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6817     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6818     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6819     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6820     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6821     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6822     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6823     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6824     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6825     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6826     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6827     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6828     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6829     GTEST_TEMPLATE_ T43>
 
 6830 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6831     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6832     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 6833     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6834   typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6835       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6836       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6839 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6840     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6841     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6842     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6843     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6844     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6845     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6846     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6847     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6848     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6849     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6850     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6851     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6852     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6853     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
 
 6854 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6855     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6856     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6857     NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6858   typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6859       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6860       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6861       T42, T43, T44> type;
 
 6863 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6864     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6865     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6866     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6867     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6868     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6869     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6870     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6871     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6872     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6873     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6874     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6875     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6876     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6877     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
 
 6878 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6879     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6880     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6881     T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
 
 6882   typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6883       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6884       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6885       T42, T43, T44, T45> type;
 
 6887 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6888     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6889     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6890     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6891     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6892     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6893     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6894     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6895     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6896     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6897     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6898     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6899     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6900     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6901     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6902     GTEST_TEMPLATE_ T46>
 
 6903 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6904     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6905     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6906     T45, T46, NoneT, NoneT, NoneT, NoneT> {
 
 6907   typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6908       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6909       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6910       T42, T43, T44, T45, T46> type;
 
 6912 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6913     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6914     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6915     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6916     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6917     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6918     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6919     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6920     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6921     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6922     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6923     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6924     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6925     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6926     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6927     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
 
 6928 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6929     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6930     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6931     T45, T46, T47, NoneT, NoneT, NoneT> {
 
 6932   typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6933       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6934       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6935       T42, T43, T44, T45, T46, T47> type;
 
 6937 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6938     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6939     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6940     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6941     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6942     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6943     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6944     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6945     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6946     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6947     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6948     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6949     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6950     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6951     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6952     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
 
 6953 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6954     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6955     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6956     T45, T46, T47, T48, NoneT, NoneT> {
 
 6957   typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6958       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6959       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6960       T42, T43, T44, T45, T46, T47, T48> type;
 
 6962 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
 
 6963     GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
 
 6964     GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
 
 6965     GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
 
 6966     GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
 
 6967     GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
 
 6968     GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
 
 6969     GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
 
 6970     GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
 
 6971     GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
 
 6972     GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
 
 6973     GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
 
 6974     GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
 
 6975     GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
 
 6976     GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
 
 6977     GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
 
 6978     GTEST_TEMPLATE_ T49>
 
 6979 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 
 6980     T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 
 6981     T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
 
 6982     T45, T46, T47, T48, T49, NoneT> {
 
 6983   typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 6984       T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
 6985       T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
 6986       T42, T43, T44, T45, T46, T47, T48, T49> type;
 
 6993 template <
typename T>
 
 6995   typedef Types1<T> type;
 
 6998 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 6999     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
 7000     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
 7001     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
 7002     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
 7003     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
 7004     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
 7005     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
 7006     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
 7007     typename T46, 
typename T47, 
typename T48, 
typename T49, 
typename T50>
 
 7008 struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
 7009     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
 7010     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
 7011     T44, T45, T46, T47, T48, T49, T50> > {
 
 7012   typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
 7013       T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
 7014       T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
 7015       T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
 
 7018 #endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 
 7023 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 
 7033 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) 
 7034 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar 
 7036 class ProtocolMessage;
 
 7043 class AssertionResult;                 
 
 7047 class TestPartResult;                  
 
 7050 template <
typename T>
 
 7053 namespace internal {
 
 7087 #ifdef GTEST_ELLIPSIS_NEEDS_POD_ 
 7090 # define GTEST_IS_NULL_LITERAL_(x) false 
 7092 # define GTEST_IS_NULL_LITERAL_(x) \ 
 7093     (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) 
 7094 #endif  // GTEST_ELLIPSIS_NEEDS_POD_ 
 7098     const std::string& gtest_msg, 
const Message& user_msg);
 
 7100 #if GTEST_HAS_EXCEPTIONS 
 7108 class GTEST_API_ GoogleTestFailureException : 
public ::std::runtime_error {
 
 7110   explicit GoogleTestFailureException(
const TestPartResult& failure);
 
 7113 #endif  // GTEST_HAS_EXCEPTIONS 
 7150                                      const char* actual_expression,
 
 7153                                      bool ignoring_case);
 
 7158     const char* expression_text,
 
 7159     const char* actual_predicate_value,
 
 7160     const char* expected_predicate_value);
 
 7191 template <
typename RawType>
 
 7201   static const size_t kBitCount = 8*
sizeof(RawType);
 
 7204   static const size_t kFractionBitCount =
 
 7205     std::numeric_limits<RawType>::digits - 1;
 
 7208   static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
 
 7211   static const Bits kSignBitMask = 
static_cast<Bits>(1) << (kBitCount - 1);
 
 7214   static const Bits kFractionBitMask =
 
 7215     ~static_cast<Bits>(0) >> (kExponentBitCount + 1);
 
 7218   static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
 
 7232   static const size_t kMaxUlps = 4;
 
 7255     return ReinterpretBits(kExponentBitMask);
 
 7259   static RawType Max();
 
 7279     return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
 
 7291     if (is_nan() || rhs.
is_nan()) 
return false;
 
 7293     return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.
u_.
bits_)
 
 7320     if (kSignBitMask & sam) {
 
 7325       return kSignBitMask | sam;
 
 7333     const Bits biased1 = SignAndMagnitudeToBiased(sam1);
 
 7334     const Bits biased2 = SignAndMagnitudeToBiased(sam2);
 
 7335     return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
 
 7361 template <
typename T>
 
 7370 template <
typename T>
 
 7376 template <
typename T>
 
 7400   virtual Test* CreateTest() = 0;
 
 7411 template <
class TestClass>
 
 7417 #if GTEST_OS_WINDOWS 
 7428 #endif  // GTEST_OS_WINDOWS 
 7452     const char* test_case_name,
 
 7454     const char* type_param,
 
 7455     const char* value_param,
 
 7466 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 
 7471   TypedTestCasePState() : registered_(false) {}
 
 7476   bool AddTestName(
const char* file, 
int line, 
const char* case_name,
 
 7477                    const char* test_name) {
 
 7479       fprintf(stderr, 
"%s Test %s must be defined before " 
 7480               "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n",
 
 7485     defined_test_names_.insert(test_name);
 
 7492   const char* VerifyRegisteredTestNames(
 
 7493       const char* file, 
int line, 
const char* registered_tests);
 
 7497   ::std::set<const char*> defined_test_names_;
 
 7502 inline const char* SkipComma(
const char* str) {
 
 7503   const char* comma = strchr(str, 
',');
 
 7504   if (comma == NULL) {
 
 7507   while (
IsSpace(*(++comma))) {}
 
 7513 inline std::string GetPrefixUntilComma(
const char* str) {
 
 7514   const char* comma = strchr(str, 
',');
 
 7515   return comma == NULL ? str : 
std::string(str, comma);
 
 7525 template <GTEST_TEMPLATE_ Fixture, 
class TestSel, 
typename Types>
 
 7526 class TypeParameterizedTest {
 
 7532   static bool Register(
const char* 
prefix, 
const char* case_name,
 
 7533                        const char* test_names, 
int index) {
 
 7534     typedef typename Types::Head Type;
 
 7535     typedef Fixture<Type> FixtureClass;
 
 7536     typedef typename GTEST_BIND_(TestSel, Type) TestClass;
 
 7543         GetPrefixUntilComma(test_names).c_str(),
 
 7544         GetTypeName<Type>().c_str(),
 
 7546         GetTypeId<FixtureClass>(),
 
 7547         TestClass::SetUpTestCase,
 
 7548         TestClass::TearDownTestCase,
 
 7549         new TestFactoryImpl<TestClass>);
 
 7552     return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail>
 
 7553         ::Register(
prefix, case_name, test_names, index + 1);
 
 7558 template <GTEST_TEMPLATE_ Fixture, 
class TestSel>
 
 7559 class TypeParameterizedTest<Fixture, TestSel, Types0> {
 
 7561   static bool Register(
const char* , 
const char* ,
 
 7562                        const char* , 
int ) {
 
 7571 template <GTEST_TEMPLATE_ Fixture, 
typename Tests, 
typename Types>
 
 7572 class TypeParameterizedTestCase {
 
 7574   static bool Register(
const char* 
prefix, 
const char* case_name,
 
 7575                        const char* test_names) {
 
 7576     typedef typename Tests::Head Head;
 
 7579     TypeParameterizedTest<Fixture, Head, Types>::Register(
 
 7580         prefix, case_name, test_names, 0);
 
 7583     return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types>
 
 7584         ::Register(
prefix, case_name, SkipComma(test_names));
 
 7589 template <GTEST_TEMPLATE_ Fixture, 
typename Types>
 
 7590 class TypeParameterizedTestCase<Fixture, Templates0, Types> {
 
 7592   static bool Register(
const char* , 
const char* ,
 
 7598 #endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 
 7611     UnitTest* unit_test, 
int skip_count);
 
 7627   operator bool()
 const { 
return true; }
 
 7655 template <
typename T1, 
typename T2>
 
 7658 template <
typename T>
 
 7665 template <
typename T>
 
 7667 template <
typename T>
 
 7672 #define GTEST_REMOVE_REFERENCE_(T) \ 
 7673     typename ::testing::internal::RemoveReference<T>::type 
 7678 template <
typename T>
 
 7680 template <
typename T>
 
 7686 template <
typename T, 
size_t N>
 
 7691 #if defined(_MSC_VER) && _MSC_VER < 1400 
 7695 template <
typename T, 
size_t N>
 
 7703 #define GTEST_REMOVE_CONST_(T) \ 
 7704     typename ::testing::internal::RemoveConst<T>::type 
 7707 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ 
 7708     GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) 
 7713 template <
typename T>
 
 7715 template <
typename T>
 
 7720 #define GTEST_ADD_REFERENCE_(T) \ 
 7721     typename ::testing::internal::AddReference<T>::type 
 7732 #define GTEST_REFERENCE_TO_CONST_(T) \ 
 7733     GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) 
 7738 template <
typename From, 
typename To>
 
 7747   static From MakeFrom();
 
 7759   static char Helper(To);
 
 7760   static char (&Helper(...))[2];  
 
 7769 # pragma warning(push)          // Saves the current warning state. 
 7770 # pragma warning(disable:4244)  // Temporarily disables warning 4244. 
 7772   static const bool value =
 
 7773       sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
 
 7774 # pragma warning(pop)           // Restores the warning state. 
 7775 #elif defined(__BORLANDC__) 
 7779   static const bool value = __is_convertible(From, To);
 
 7781   static const bool value =
 
 7782       sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
 
 7785 template <
typename From, 
typename To>
 
 7791 template <
typename T>
 
 7794   ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||
 
 7795   ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {
 
 7822                             typename C::iterator*  = NULL,
 
 7823                             typename C::const_iterator*  = NULL) {
 
 7844 template <
typename T, 
typename U>
 
 7845 bool ArrayEq(
const T* lhs, 
size_t size, 
const U* rhs);
 
 7848 template <
typename T, 
typename U>
 
 7849 inline bool ArrayEq(
const T& lhs, 
const U& rhs) { 
return lhs == rhs; }
 
 7852 template <
typename T, 
typename U, 
size_t N>
 
 7853 inline bool ArrayEq(
const T(&lhs)[N], 
const U(&rhs)[N]) {
 
 7860 template <
typename T, 
typename U>
 
 7861 bool ArrayEq(
const T* lhs, 
size_t size, 
const U* rhs) {
 
 7862   for (
size_t i = 0; i != size; i++) {
 
 7871 template <
typename Iter, 
typename Element>
 
 7873   for (Iter it = begin; it != end; ++it) {
 
 7884 template <
typename T, 
typename U>
 
 7885 void CopyArray(
const T* from, 
size_t size, U* to);
 
 7888 template <
typename T, 
typename U>
 
 7892 template <
typename T, 
typename U, 
size_t N>
 
 7900 template <
typename T, 
typename U>
 
 7902   for (
size_t i = 0; i != size; i++) {
 
 7923 template <
typename Element>
 
 7933     Init(
array, count, relation);
 
 7946     if (relation_to_source_ == 
kCopy)
 
 7951   size_t size()
 const { 
return size_; }
 
 7952   const_iterator 
begin()
 const { 
return array_; }
 
 7953   const_iterator 
end()
 const { 
return array_ + size_; }
 
 7955     return size() == rhs.
size() &&
 
 7966       Element* 
const copy = 
new Element[a_size];
 
 7971     relation_to_source_ = relation;
 
 7984 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ 
 7985   ::testing::internal::AssertHelper(result_type, file, line, message) \ 
 7986     = ::testing::Message() 
 7988 #define GTEST_MESSAGE_(message, result_type) \ 
 7989   GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) 
 7991 #define GTEST_FATAL_FAILURE_(message) \ 
 7992   return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) 
 7994 #define GTEST_NONFATAL_FAILURE_(message) \ 
 7995   GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) 
 7997 #define GTEST_SUCCESS_(message) \ 
 7998   GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) 
 8003 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ 
 8004   if (::testing::internal::AlwaysTrue()) { statement; } 
 8006 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ 
 8007   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8008   if (::testing::internal::ConstCharPtr gtest_msg = "") { \ 
 8009     bool gtest_caught_expected = false; \ 
 8011       GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8013     catch (expected_exception const&) { \ 
 8014       gtest_caught_expected = true; \ 
 8018           "Expected: " #statement " throws an exception of type " \ 
 8019           #expected_exception ".\n  Actual: it throws a different type."; \ 
 8020       goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 
 8022     if (!gtest_caught_expected) { \ 
 8024           "Expected: " #statement " throws an exception of type " \ 
 8025           #expected_exception ".\n  Actual: it throws nothing."; \ 
 8026       goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 
 8029     GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ 
 8030       fail(gtest_msg.value) 
 8032 #define GTEST_TEST_NO_THROW_(statement, fail) \ 
 8033   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8034   if (::testing::internal::AlwaysTrue()) { \ 
 8036       GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8039       goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ 
 8042     GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ 
 8043       fail("Expected: " #statement " doesn't throw an exception.\n" \ 
 8044            "  Actual: it throws.") 
 8046 #define GTEST_TEST_ANY_THROW_(statement, fail) \ 
 8047   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8048   if (::testing::internal::AlwaysTrue()) { \ 
 8049     bool gtest_caught_any = false; \ 
 8051       GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8054       gtest_caught_any = true; \ 
 8056     if (!gtest_caught_any) { \ 
 8057       goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ 
 8060     GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ 
 8061       fail("Expected: " #statement " throws an exception.\n" \ 
 8062            "  Actual: it doesn't.") 
 8068 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ 
 8069   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8070   if (const ::testing::AssertionResult gtest_ar_ = \ 
 8071       ::testing::AssertionResult(expression)) \ 
 8074     fail(::testing::internal::GetBoolAssertionFailureMessage(\ 
 8075         gtest_ar_, text, #actual, #expected).c_str()) 
 8077 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ 
 8078   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8079   if (::testing::internal::AlwaysTrue()) { \ 
 8080     ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ 
 8081     GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8082     if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ 
 8083       goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ 
 8086     GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ 
 8087       fail("Expected: " #statement " doesn't generate new fatal " \ 
 8088            "failures in the current thread.\n" \ 
 8089            "  Actual: it does.") 
 8092 #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ 
 8093   test_case_name##_##test_name##_Test 
 8096 #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ 
 8097 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ 
 8099   GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ 
 8101   virtual void TestBody();\ 
 8102   static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ 
 8103   GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 
 8104       GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ 
 8107 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ 
 8109     ::testing::internal::MakeAndRegisterTestInfo(\ 
 8110         #test_case_name, #test_name, NULL, NULL, \ 
 8112         parent_class::SetUpTestCase, \ 
 8113         parent_class::TearDownTestCase, \ 
 8114         new ::testing::internal::TestFactoryImpl<\ 
 8115             GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ 
 8116 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() 
 8118 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 
 8156 #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 
 8157 #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 
 8195 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 
 8196 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 
 8202 namespace internal {
 
 8211 #if GTEST_HAS_DEATH_TEST 
 8236   static bool Create(
const char* statement, 
const RE* regex,
 
 8237                      const char* file, 
int line, DeathTest** 
test);
 
 8239   virtual ~DeathTest() { }
 
 8242   class ReturnSentinel {
 
 8244     explicit ReturnSentinel(DeathTest* 
test) : test_(
test) { }
 
 8245     ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
 
 8247     DeathTest* 
const test_;
 
 8256   enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
 
 8260     TEST_ENCOUNTERED_RETURN_STATEMENT,
 
 8261     TEST_THREW_EXCEPTION,
 
 8266   virtual TestRole AssumeRole() = 0;
 
 8269   virtual int Wait() = 0;
 
 8278   virtual bool Passed(
bool exit_status_ok) = 0;
 
 8281   virtual void Abort(AbortReason reason) = 0;
 
 8285   static const char* LastMessage();
 
 8287   static void set_last_death_test_message(
const std::string& message);
 
 8297 class DeathTestFactory {
 
 8299   virtual ~DeathTestFactory() { }
 
 8300   virtual bool Create(
const char* statement, 
const RE* regex,
 
 8301                       const char* file, 
int line, DeathTest** 
test) = 0;
 
 8305 class DefaultDeathTestFactory : 
public DeathTestFactory {
 
 8307   virtual bool Create(
const char* statement, 
const RE* regex,
 
 8308                       const char* file, 
int line, DeathTest** 
test);
 
 8313 GTEST_API_ bool ExitedUnsuccessfully(
int exit_status);
 
 8317 # if GTEST_HAS_EXCEPTIONS 
 8318 #  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ 
 8320     GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8321   } catch (const ::std::exception& gtest_exception) { \ 
 8324         "\n%s: Caught std::exception-derived exception escaping the " \ 
 8325         "death test statement. Exception message: %s\n", \ 
 8326         ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ 
 8327         gtest_exception.what()); \ 
 8329     death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ 
 8331     death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ 
 8335 #  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ 
 8336   GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) 
 8342 # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ 
 8343   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8344   if (::testing::internal::AlwaysTrue()) { \ 
 8345     const ::testing::internal::RE& gtest_regex = (regex); \ 
 8346     ::testing::internal::DeathTest* gtest_dt; \ 
 8347     if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ 
 8348         __FILE__, __LINE__, >est_dt)) { \ 
 8349       goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 
 8351     if (gtest_dt != NULL) { \ 
 8352       ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ 
 8353           gtest_dt_ptr(gtest_dt); \ 
 8354       switch (gtest_dt->AssumeRole()) { \ 
 8355         case ::testing::internal::DeathTest::OVERSEE_TEST: \ 
 8356           if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ 
 8357             goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 
 8360         case ::testing::internal::DeathTest::EXECUTE_TEST: { \ 
 8361           ::testing::internal::DeathTest::ReturnSentinel \ 
 8362               gtest_sentinel(gtest_dt); \ 
 8363           GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ 
 8364           gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ 
 8372     GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ 
 8373       fail(::testing::internal::DeathTest::LastMessage()) 
 8381 # define GTEST_EXECUTE_STATEMENT_(statement, regex) \ 
 8382   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8383   if (::testing::internal::AlwaysTrue()) { \ 
 8384      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8386     ::testing::Message() 
 8391 class InternalRunDeathTestFlag {
 
 8393   InternalRunDeathTestFlag(
const std::string& a_file,
 
 8397       : file_(a_file), line_(a_line), index_(an_index),
 
 8398         write_fd_(a_write_fd) {}
 
 8400   ~InternalRunDeathTestFlag() {
 
 8406   int line()
 const { 
return line_; }
 
 8407   int index()
 const { 
return index_; }
 
 8408   int write_fd()
 const { 
return write_fd_; }
 
 8422 InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
 
 8424 #else  // GTEST_HAS_DEATH_TEST 
 8458 # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ 
 8459     GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
 8460     if (::testing::internal::AlwaysTrue()) { \ 
 8461       GTEST_LOG_(WARNING) \ 
 8462           << "Death tests are not supported on this platform.\n" \ 
 8463           << "Statement '" #statement "' cannot be verified."; \ 
 8464     } else if (::testing::internal::AlwaysFalse()) { \ 
 8465       ::testing::internal::RE::PartialMatch(".*", (regex)); \ 
 8466       GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 
 8469       ::testing::Message() 
 8471 #endif  // GTEST_HAS_DEATH_TEST 
 8476 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 
 8487 #if GTEST_HAS_DEATH_TEST 
 8489 namespace internal {
 
 8603 # define ASSERT_EXIT(statement, predicate, regex) \ 
 8604     GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) 
 8608 # define EXPECT_EXIT(statement, predicate, regex) \ 
 8609     GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) 
 8614 # define ASSERT_DEATH(statement, regex) \ 
 8615     ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) 
 8619 # define EXPECT_DEATH(statement, regex) \ 
 8620     EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) 
 8627   explicit ExitedWithCode(
int exit_code);
 
 8628   bool operator()(
int exit_status) 
const;
 
 8631   void operator=(
const ExitedWithCode& other);
 
 8633   const int exit_code_;
 
 8636 # if !GTEST_OS_WINDOWS 
 8641   explicit KilledBySignal(
int signum);
 
 8642   bool operator()(
int exit_status) 
const;
 
 8646 # endif  // !GTEST_OS_WINDOWS 
 8693 #  define EXPECT_DEBUG_DEATH(statement, regex) \ 
 8694   GTEST_EXECUTE_STATEMENT_(statement, regex) 
 8696 #  define ASSERT_DEBUG_DEATH(statement, regex) \ 
 8697   GTEST_EXECUTE_STATEMENT_(statement, regex) 
 8701 #  define EXPECT_DEBUG_DEATH(statement, regex) \ 
 8702   EXPECT_DEATH(statement, regex) 
 8704 #  define ASSERT_DEBUG_DEATH(statement, regex) \ 
 8705   ASSERT_DEATH(statement, regex) 
 8707 # endif  // NDEBUG for EXPECT_DEBUG_DEATH 
 8708 #endif  // GTEST_HAS_DEATH_TEST 
 8715 #if GTEST_HAS_DEATH_TEST 
 8716 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ 
 8717     EXPECT_DEATH(statement, regex) 
 8718 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ 
 8719     ASSERT_DEATH(statement, regex) 
 8721 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ 
 8722     GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) 
 8723 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ 
 8724     GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) 
 8729 #endif  // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 
 8770 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 
 8771 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 
 8797 TEST_P(FooTest, DoesBlah) {
 
 8804 TEST_P(FooTest, HasBlahBlah) {
 
 8834                         Values(
"meeny", 
"miny", 
"moe"));
 
 8855 const char* pets[] = {
"cat", 
"dog"};
 
 8900 TEST_F(BaseTest, HasFoo) {
 
 8904 TEST_P(DerivedTest, DoesBlah) {
 
 8912 #if !GTEST_OS_SYMBIAN 
 8952 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 
 8953 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 
 9029 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ 
 9030 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ 
 9037 namespace internal {
 
 9084     if (next_ == 
this) 
return true;
 
 9095 template <
typename T>
 
 9108     assert(&ptr != 
this);
 
 9132   T* 
get()
 const { 
return value_; }
 
 9138   template <
typename U>
 
 9140     return value_ == ptr.
get();
 
 9142   template <
typename U>
 
 9144     return value_ != ptr.
get();
 
 9148   template <
typename U>
 
 9155     if (link_.
depart()) 
delete value_;
 
 9164     value_ = ptr->
get();
 
 9172 template<
typename T> 
inline 
 9174   return ptr == x.
get();
 
 9177 template<
typename T> 
inline 
 9179   return ptr != x.
get();
 
 9185 template <
typename T>
 
 9193 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ 
 9288 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 
 9289 #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 
 9301 namespace internal2 {
 
 9307                                      ::std::ostream* os);
 
 9322 template <
typename T, TypeKind kTypeKind>
 
 9337 template <
typename T>
 
 9344         short_str : (
"\n" + value.DebugString());
 
 9345     *os << (
"<" + pretty_str + 
">");
 
 9349 template <
typename T>
 
 9389 template <
typename Char, 
typename CharTraits, 
typename T>
 
 9391     ::std::basic_ostream<Char, CharTraits>& os, 
const T& x) {
 
 9408 template <
typename T>
 
 9442 namespace internal {
 
 9451 template <
typename T>
 
 9454 template <
typename T>
 
 9459 template <
typename C>
 
 9462                     const C& container, ::std::ostream* os) {
 
 9463   const size_t kMaxCount = 32;  
 
 9466   for (
typename C::const_iterator it = container.begin();
 
 9467        it != container.end(); ++it, ++count) {
 
 9470       if (count == kMaxCount) {  
 
 9493 template <
typename T>
 
 9496                     T* p, ::std::ostream* os) {
 
 9517       *os << reinterpret_cast<const void*>(
 
 9525 template <
typename T>
 
 9528                     const T& value, ::std::ostream* os) {
 
 9543 template <
typename T>
 
 9544 void PrintTo(
const T& value, ::std::ostream* os) {
 
 9581   PrintTo(
static_cast<unsigned char>(c), os);
 
 9586   *os << (x ? 
"true" : 
"false");
 
 9600 inline void PrintTo(
char* s, ::std::ostream* os) {
 
 9601   PrintTo(ImplicitCast_<const char*>(
s), os);
 
 9606 inline void PrintTo(
const signed char* s, ::std::ostream* os) {
 
 9607   PrintTo(ImplicitCast_<const void*>(
s), os);
 
 9609 inline void PrintTo(
signed char* s, ::std::ostream* os) {
 
 9610   PrintTo(ImplicitCast_<const void*>(
s), os);
 
 9612 inline void PrintTo(
const unsigned char* s, ::std::ostream* os) {
 
 9613   PrintTo(ImplicitCast_<const void*>(
s), os);
 
 9615 inline void PrintTo(
unsigned char* s, ::std::ostream* os) {
 
 9616   PrintTo(ImplicitCast_<const void*>(
s), os);
 
 9624 #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) 
 9627 inline void PrintTo(
wchar_t* s, ::std::ostream* os) {
 
 9628   PrintTo(ImplicitCast_<const wchar_t*>(
s), os);
 
 9637 template <
typename T>
 
 9640   for (
size_t i = 1; i != count; i++) {
 
 9647 #if GTEST_HAS_GLOBAL_STRING 
 9652 #endif  // GTEST_HAS_GLOBAL_STRING 
 9660 #if GTEST_HAS_GLOBAL_WSTRING 
 9665 #endif  // GTEST_HAS_GLOBAL_WSTRING 
 9667 #if GTEST_HAS_STD_WSTRING 
 9672 #endif  // GTEST_HAS_STD_WSTRING 
 9674 #if GTEST_HAS_TR1_TUPLE 
 9680 template <
typename T>
 
 9688 inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {
 
 9692 template <
typename T1>
 
 9693 void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {
 
 9697 template <
typename T1, 
typename T2>
 
 9698 void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {
 
 9702 template <
typename T1, 
typename T2, 
typename T3>
 
 9703 void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {
 
 9707 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
 9708 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {
 
 9712 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
 9713 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,
 
 9714              ::std::ostream* os) {
 
 9718 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 9720 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,
 
 9721              ::std::ostream* os) {
 
 9725 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 9726           typename T6, 
typename T7>
 
 9727 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,
 
 9728              ::std::ostream* os) {
 
 9732 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 9733           typename T6, 
typename T7, 
typename T8>
 
 9734 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,
 
 9735              ::std::ostream* os) {
 
 9739 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 9740           typename T6, 
typename T7, 
typename T8, 
typename T9>
 
 9741 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,
 
 9742              ::std::ostream* os) {
 
 9746 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
 9747           typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
 9749     const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,
 
 9750     ::std::ostream* os) {
 
 9753 #endif  // GTEST_HAS_TR1_TUPLE 
 9756 template <
typename T1, 
typename T2>
 
 9757 void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
 
 9769 template <
typename T>
 
 9770 class UniversalPrinter {
 
 9775 # pragma warning(push)          // Saves the current warning state. 
 9776 # pragma warning(disable:4180)  // Temporarily disables warning 4180. 
 9782   static void Print(
const T& value, ::std::ostream* os) {
 
 9795 # pragma warning(pop)           // Restores the warning state. 
 9801 template <
typename T>
 
 9807     const size_t kThreshold = 18;
 
 9808     const size_t kChunkSize = 8;
 
 9813     if (len <= kThreshold) {
 
 9825     const char* begin, 
size_t len, ::std::ostream* os);
 
 9829     const wchar_t* begin, 
size_t len, ::std::ostream* os);
 
 9832 template <
typename T, 
size_t N>
 
 9837   static void Print(
const T (&a)[N], ::std::ostream* os) {
 
 9843 template <
typename T>
 
 9849 # pragma warning(push)          // Saves the current warning state. 
 9850 # pragma warning(disable:4180)  // Temporarily disables warning 4180. 
 9853   static void Print(
const T& value, ::std::ostream* os) {
 
 9856     *os << 
"@" << 
reinterpret_cast<const void*
>(&value) << 
" ";
 
 9863 # pragma warning(pop)           // Restores the warning state. 
 9871 template <
typename T>
 
 9874   static void Print(
const T& value, ::std::ostream* os) {
 
 9878 template <
typename T>
 
 9881   static void Print(
const T& value, ::std::ostream* os) {
 
 9885 template <
typename T, 
size_t N>
 
 9888   static void Print(
const T (&value)[N], ::std::ostream* os) {
 
 9895   static void Print(
const char* str, ::std::ostream* os) {
 
 9906   static void Print(
char* str, ::std::ostream* os) {
 
 9911 #if GTEST_HAS_STD_WSTRING 
 9915   static void Print(
const wchar_t* str, ::std::ostream* os) {
 
 9928   static void Print(
wchar_t* str, ::std::ostream* os) {
 
 9933 template <
typename T>
 
 9942 template <
typename T>
 
 9950 #if GTEST_HAS_TR1_TUPLE 
 9964   template <
typename Tuple>
 
 9969         ::Print(::std::tr1::get<N - 1>(t), os);
 
 9974   template <
typename Tuple>
 
 9977     ::std::stringstream ss;
 
 9979     strings->push_back(ss.str());
 
 9986   template <
typename Tuple>
 
 9989   template <
typename Tuple>
 
 9999   template <
typename Tuple>
 
10002         Print(::std::tr1::get<0>(t), os);
 
10005   template <
typename Tuple>
 
10007     ::std::stringstream ss;
 
10009     strings->push_back(ss.str());
 
10015 template <
typename T>
 
10019       PrintPrefixTo(t, os);
 
10026 template <
typename Tuple>
 
10030       TersePrintPrefixToStrings(value, &result);
 
10033 #endif  // GTEST_HAS_TR1_TUPLE 
10037 template <
typename T>
 
10039   ::std::stringstream ss;
 
10046 #endif  // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 
10048 #if GTEST_HAS_PARAM_TEST 
10051 namespace internal {
 
10060                                           const char* file, 
int line);
 
10067 template <
typename T>
 
10079   virtual void Advance() = 0;
 
10087   virtual const T* Current() 
const = 0;
 
10097 template <
typename T>
 
10107     if (
this != &other)
 
10108       impl_.reset(other.
impl_->Clone());
 
10126     return impl_.get() == other.
impl_.get() || impl_->Equals(*other.
impl_);
 
10129     return !(*
this == other);
 
10140 template <
typename T>
 
10157 template<
typename T>
 
10158 class ParamGenerator {
 
10166     impl_ = other.impl_;
 
10181 template <
typename T, 
typename IncrementT>
 
10185       : begin_(begin), end_(end),
 
10186         step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}
 
10190     return new Iterator(
this, begin_, 0, step_);
 
10193     return new Iterator(
this, end_, end_index_, step_);
 
10201         : base_(base), value_(value), index_(index), step_(step) {}
 
10208       value_ = value_ + step_;
 
10219           << 
"The program attempted to compare iterators " 
10220           << 
"from different generators." << std::endl;
 
10221       const int other_index =
 
10222           CheckedDowncastToActualType<const Iterator>(&other)->index_;
 
10223       return index_ == other_index;
 
10229           base_(other.base_), value_(other.value_), index_(other.index_),
 
10230           step_(other.step_) {}
 
10233     void operator=(
const Iterator& other);
 
10243                                const IncrementT& step) {
 
10245     for (T i = begin; i < end; i = i + step)
 
10266 template <
typename T>
 
10269   template <
typename ForwardIterator>
 
10271       : container_(begin, end) {}
 
10275     return new Iterator(
this, container_.begin());
 
10278     return new Iterator(
this, container_.end());
 
10287              typename ContainerType::const_iterator iterator)
 
10288         : base_(base), iterator_(iterator) {}
 
10309       if (value_.get() == NULL)
 
10310         value_.reset(
new T(*iterator_));
 
10311       return value_.get();
 
10317           << 
"The program attempted to compare iterators " 
10318           << 
"from different generators." << std::endl;
 
10319       return iterator_ ==
 
10320           CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
 
10328           base_(other.base_),
 
10329           iterator_(other.iterator_) {}
 
10351 template <
class TestClass>
 
10356       parameter_(parameter) {}
 
10358     TestClass::SetParam(¶meter_);
 
10359     return new TestClass();
 
10372 template <
class ParamType>
 
10388 template <
class TestCase>
 
10419   virtual const string& GetTestCaseName() 
const = 0;
 
10421   virtual TypeId GetTestCaseTypeId() 
const = 0;
 
10426   virtual void RegisterTests() = 0;
 
10442 template <
class TestCase>
 
10453       : test_case_name_(name) {}
 
10466                       const char* test_base_name,
 
10475                                GeneratorCreationFunc* func,
 
10478     instantiations_.push_back(::std::make_pair(instantiation_name, func));
 
10487     for (
typename TestInfoContainer::iterator test_it = tests_.begin();
 
10488          test_it != tests_.end(); ++test_it) {
 
10490       for (
typename InstantiationContainer::iterator gen_it =
 
10491                instantiations_.begin(); gen_it != instantiations_.end();
 
10493         const string& instantiation_name = gen_it->first;
 
10496         string test_case_name;
 
10497         if ( !instantiation_name.empty() )
 
10498           test_case_name = instantiation_name + 
"/";
 
10499         test_case_name += test_info->test_case_base_name;
 
10504              param_it != generator.end(); ++param_it, ++i) {
 
10506           test_name_stream << test_info->test_base_name << 
"/" << i;
 
10508               test_case_name.c_str(),
 
10512               GetTestCaseTypeId(),
 
10513               TestCase::SetUpTestCase,
 
10514               TestCase::TearDownTestCase,
 
10515               test_info->test_meta_factory->CreateTestFactory(*param_it));
 
10526              const char* a_test_base_name,
 
10528         test_case_base_name(a_test_case_base_name),
 
10529         test_base_name(a_test_base_name),
 
10530         test_meta_factory(a_test_meta_factory) {}
 
10539   typedef ::std::vector<std::pair<string, GeneratorCreationFunc*> >
 
10559     for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 
10560          it != test_case_infos_.end(); ++it) {
 
10567   template <
class TestCase>
 
10569       const char* test_case_name,
 
10573     for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 
10574          it != test_case_infos_.end(); ++it) {
 
10575       if ((*it)->GetTestCaseName() == test_case_name) {
 
10576         if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {
 
10592     if (typed_test_info == NULL) {
 
10594       test_case_infos_.push_back(typed_test_info);
 
10596     return typed_test_info;
 
10599     for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 
10600          it != test_case_infos_.end(); ++it) {
 
10601       (*it)->RegisterTests();
 
10616 #endif  //  GTEST_HAS_PARAM_TEST 
10618 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 
10664 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 
10665 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 
10671 #if GTEST_HAS_PARAM_TEST 
10677 template <
typename ForwardIterator>
 
10678 internal::ParamGenerator<
 
10679   typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
 
10680 ValuesIn(ForwardIterator begin, ForwardIterator end);
 
10682 template <
typename T, 
size_t N>
 
10685 template <
class Container>
 
10686 internal::ParamGenerator<typename Container::value_type> 
ValuesIn(
 
10687     const Container& container);
 
10689 namespace internal {
 
10692 template <
typename T1>
 
10697   template <
typename T>
 
10707 template <
typename T1, 
typename T2>
 
10712   template <
typename T>
 
10714     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_)};
 
10726 template <
typename T1, 
typename T2, 
typename T3>
 
10731   template <
typename T>
 
10733     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10734         static_cast<T
>(v3_)};
 
10747 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
10753   template <
typename T>
 
10755     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10756         static_cast<T
>(v3_), 
static_cast<T
>(v4_)};
 
10770 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
10773   ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
 
10774       v4_(v4), v5_(v5) {}
 
10776   template <
typename T>
 
10778     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10779         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_)};
 
10794 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10799       v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
 
10801   template <
typename T>
 
10803     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10804         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10805         static_cast<T
>(v6_)};
 
10821 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10822     typename T6, 
typename T7>
 
10826       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
 
10828   template <
typename T>
 
10830     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10831         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10832         static_cast<T
>(v6_), 
static_cast<T
>(v7_)};
 
10849 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10850     typename T6, 
typename T7, 
typename T8>
 
10854       T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
10857   template <
typename T>
 
10859     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10860         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10861         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_)};
 
10879 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10880     typename T6, 
typename T7, 
typename T8, 
typename T9>
 
10884       T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
10885       v8_(v8), v9_(v9) {}
 
10887   template <
typename T>
 
10889     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10890         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10891         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
10892         static_cast<T
>(v9_)};
 
10911 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10912     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
10916       T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
10917       v8_(v8), v9_(v9), v10_(v10) {}
 
10919   template <
typename T>
 
10921     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10922         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10923         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
10924         static_cast<T
>(v9_), 
static_cast<T
>(v10_)};
 
10944 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10945     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
10950       T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
 
10951       v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
 
10953   template <
typename T>
 
10955     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10956         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10957         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
10958         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_)};
 
10979 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
10980     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
10981     typename T11, 
typename T12>
 
10985       T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
 
10986       v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
 
10988   template <
typename T>
 
10990     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
10991         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
10992         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
10993         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
10994         static_cast<T
>(v12_)};
 
11016 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11017     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11018     typename T11, 
typename T12, 
typename T13>
 
11022       T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
 
11023       v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
 
11024       v12_(v12), v13_(v13) {}
 
11026   template <
typename T>
 
11028     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11029         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11030         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11031         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11032         static_cast<T
>(v12_), 
static_cast<T
>(v13_)};
 
11055 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11056     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11057     typename T11, 
typename T12, 
typename T13, 
typename T14>
 
11061       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
 
11062       v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
11063       v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
 
11065   template <
typename T>
 
11067     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11068         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11069         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11070         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11071         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_)};
 
11095 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11096     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11097     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15>
 
11101       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
 
11102       v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
11103       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
 
11105   template <
typename T>
 
11107     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11108         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11109         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11110         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11111         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11112         static_cast<T
>(v15_)};
 
11137 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11138     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11139     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11144       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
 
11145       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
 
11146       v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
 
11149   template <
typename T>
 
11151     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11152         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11153         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11154         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11155         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11156         static_cast<T
>(v15_), 
static_cast<T
>(v16_)};
 
11182 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11183     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11184     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11185     typename T16, 
typename T17>
 
11189       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
 
11190       T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
11191       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
11192       v15_(v15), v16_(v16), v17_(v17) {}
 
11194   template <
typename T>
 
11196     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11197         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11198         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11199         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11200         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11201         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_)};
 
11228 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11229     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11230     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11231     typename T16, 
typename T17, 
typename T18>
 
11235       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11236       T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
11237       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
11238       v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
 
11240   template <
typename T>
 
11242     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11243         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11244         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11245         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11246         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11247         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11248         static_cast<T
>(v18_)};
 
11276 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11277     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11278     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11279     typename T16, 
typename T17, 
typename T18, 
typename T19>
 
11283       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11284       T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
 
11285       v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
 
11286       v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
 
11288   template <
typename T>
 
11290     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11291         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11292         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11293         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11294         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11295         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11296         static_cast<T
>(v18_), 
static_cast<T
>(v19_)};
 
11325 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11326     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11327     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11328     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20>
 
11332       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11333       T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
 
11334       v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
 
11335       v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
 
11336       v19_(v19), v20_(v20) {}
 
11338   template <
typename T>
 
11340     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11341         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11342         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11343         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11344         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11345         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11346         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_)};
 
11376 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11377     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11378     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11379     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11384       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11385       T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
 
11386       v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
 
11387       v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
 
11388       v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
 
11390   template <
typename T>
 
11392     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11393         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11394         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11395         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11396         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11397         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11398         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11399         static_cast<T
>(v21_)};
 
11430 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11431     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11432     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11433     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11434     typename T21, 
typename T22>
 
11438       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11439       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
 
11440       v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
11441       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
11442       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
 
11444   template <
typename T>
 
11446     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11447         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11448         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11449         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11450         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11451         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11452         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11453         static_cast<T
>(v21_), 
static_cast<T
>(v22_)};
 
11485 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11486     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11487     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11488     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11489     typename T21, 
typename T22, 
typename T23>
 
11493       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11494       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
 
11495       v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
11496       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
11497       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
11500   template <
typename T>
 
11502     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11503         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11504         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11505         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11506         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11507         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11508         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11509         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_)};
 
11542 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11543     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11544     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11545     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11546     typename T21, 
typename T22, 
typename T23, 
typename T24>
 
11550       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11551       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
 
11552       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
 
11553       v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
 
11554       v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
 
11555       v22_(v22), v23_(v23), v24_(v24) {}
 
11557   template <
typename T>
 
11559     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11560         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11561         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11562         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11563         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11564         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11565         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11566         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11567         static_cast<T
>(v24_)};
 
11601 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11602     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11603     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11604     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11605     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25>
 
11609       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11610       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
 
11611       T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
11612       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
11613       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
11614       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
 
11616   template <
typename T>
 
11618     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11619         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11620         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11621         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11622         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11623         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11624         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11625         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11626         static_cast<T
>(v24_), 
static_cast<T
>(v25_)};
 
11661 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11662     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11663     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11664     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11665     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11670       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11671       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
11672       T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
11673       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
11674       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
11675       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
 
11677   template <
typename T>
 
11679     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11680         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11681         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11682         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11683         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11684         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11685         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11686         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11687         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_)};
 
11723 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11724     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11725     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11726     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11727     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11728     typename T26, 
typename T27>
 
11732       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11733       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
11734       T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
 
11735       v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
 
11736       v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
 
11737       v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
 
11738       v26_(v26), v27_(v27) {}
 
11740   template <
typename T>
 
11742     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11743         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11744         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11745         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11746         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11747         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11748         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11749         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11750         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
11751         static_cast<T
>(v27_)};
 
11788 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11789     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11790     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11791     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11792     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11793     typename T26, 
typename T27, 
typename T28>
 
11797       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11798       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
11799       T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
 
11800       v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
 
11801       v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
 
11802       v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
 
11803       v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
 
11805   template <
typename T>
 
11807     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11808         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11809         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11810         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11811         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11812         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11813         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11814         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11815         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
11816         static_cast<T
>(v27_), 
static_cast<T
>(v28_)};
 
11854 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11855     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11856     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11857     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11858     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11859     typename T26, 
typename T27, 
typename T28, 
typename T29>
 
11863       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11864       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
11865       T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
 
11866       v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
 
11867       v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
 
11868       v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
 
11869       v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
 
11871   template <
typename T>
 
11873     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11874         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11875         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11876         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11877         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11878         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11879         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11880         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11881         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
11882         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_)};
 
11921 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11922     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11923     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11924     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11925     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11926     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30>
 
11930       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
11931       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
11932       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
 
11933       v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
11934       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
11935       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
11936       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
11937       v29_(v29), v30_(v30) {}
 
11939   template <
typename T>
 
11941     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
11942         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
11943         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
11944         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
11945         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
11946         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
11947         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
11948         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
11949         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
11950         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
11951         static_cast<T
>(v30_)};
 
11991 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
11992     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
11993     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
11994     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
11995     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
11996     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12001       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12002       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12003       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
 
12004       v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
12005       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
12006       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
12007       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
12008       v29_(v29), v30_(v30), v31_(v31) {}
 
12010   template <
typename T>
 
12012     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12013         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12014         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12015         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12016         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12017         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12018         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12019         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12020         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12021         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12022         static_cast<T
>(v30_), 
static_cast<T
>(v31_)};
 
12063 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12064     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12065     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12066     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12067     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12068     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12069     typename T31, 
typename T32>
 
12073       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12074       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12075       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
 
12076       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
 
12077       v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
 
12078       v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
 
12079       v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
 
12080       v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
 
12082   template <
typename T>
 
12084     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12085         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12086         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12087         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12088         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12089         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12090         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12091         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12092         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12093         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12094         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_)};
 
12136 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12137     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12138     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12139     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12140     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12141     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12142     typename T31, 
typename T32, 
typename T33>
 
12146       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12147       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12148       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
 
12149       T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
12150       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
12151       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
12152       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
12153       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
12156   template <
typename T>
 
12158     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12159         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12160         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12161         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12162         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12163         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12164         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12165         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12166         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12167         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12168         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12169         static_cast<T
>(v33_)};
 
12212 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12213     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12214     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12215     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12216     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12217     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12218     typename T31, 
typename T32, 
typename T33, 
typename T34>
 
12222       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12223       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12224       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12225       T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
12226       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
12227       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
12228       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
12229       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
12230       v33_(v33), v34_(v34) {}
 
12232   template <
typename T>
 
12234     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12235         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12236         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12237         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12238         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12239         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12240         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12241         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12242         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12243         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12244         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12245         static_cast<T
>(v33_), 
static_cast<T
>(v34_)};
 
12289 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12290     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12291     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12292     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12293     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12294     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12295     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35>
 
12299       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12300       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12301       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12302       T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
 
12303       v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
 
12304       v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
 
12305       v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
 
12306       v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
 
12307       v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
 
12309   template <
typename T>
 
12311     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12312         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12313         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12314         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12315         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12316         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12317         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12318         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12319         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12320         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12321         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12322         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_)};
 
12367 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12368     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12369     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12370     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12371     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12372     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12373     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12378       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12379       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12380       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12381       T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
 
12382       v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
 
12383       v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
 
12384       v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
 
12385       v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
 
12386       v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
 
12388   template <
typename T>
 
12390     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12391         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12392         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12393         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12394         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12395         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12396         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12397         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12398         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12399         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12400         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12401         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12402         static_cast<T
>(v36_)};
 
12448 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12449     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12450     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12451     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12452     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12453     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12454     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12455     typename T36, 
typename T37>
 
12459       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12460       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12461       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12462       T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
 
12463       v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
 
12464       v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
 
12465       v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
 
12466       v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
 
12467       v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
 
12468       v36_(v36), v37_(v37) {}
 
12470   template <
typename T>
 
12472     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12473         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12474         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12475         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12476         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12477         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12478         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12479         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12480         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12481         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12482         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12483         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12484         static_cast<T
>(v36_), 
static_cast<T
>(v37_)};
 
12531 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12532     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12533     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12534     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12535     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12536     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12537     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12538     typename T36, 
typename T37, 
typename T38>
 
12542       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12543       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12544       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12545       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
 
12546       v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
12547       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
12548       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
12549       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
12550       v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
 
12551       v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
 
12553   template <
typename T>
 
12555     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12556         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12557         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12558         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12559         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12560         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12561         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12562         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12563         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12564         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12565         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12566         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12567         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_)};
 
12615 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12616     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12617     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12618     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12619     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12620     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12621     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12622     typename T36, 
typename T37, 
typename T38, 
typename T39>
 
12626       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12627       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12628       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12629       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
 
12630       v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
12631       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
12632       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
12633       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
12634       v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
 
12635       v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
 
12637   template <
typename T>
 
12639     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12640         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12641         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12642         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12643         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12644         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12645         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12646         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12647         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12648         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12649         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12650         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12651         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
12652         static_cast<T
>(v39_)};
 
12701 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12702     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12703     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12704     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12705     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12706     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12707     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12708     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40>
 
12712       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12713       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12714       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12715       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
 
12716       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
 
12717       v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
 
12718       v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
 
12719       v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
 
12720       v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
 
12721       v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
 
12724   template <
typename T>
 
12726     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12727         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12728         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12729         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12730         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12731         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12732         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12733         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12734         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12735         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12736         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12737         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12738         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
12739         static_cast<T
>(v39_), 
static_cast<T
>(v40_)};
 
12789 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12790     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12791     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12792     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12793     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12794     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12795     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12796     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
12801       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12802       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12803       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12804       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
 
12805       T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
12806       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
12807       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
12808       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
12809       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
12810       v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
 
12811       v39_(v39), v40_(v40), v41_(v41) {}
 
12813   template <
typename T>
 
12815     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12816         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12817         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12818         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12819         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12820         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12821         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12822         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12823         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12824         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12825         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12826         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12827         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
12828         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_)};
 
12879 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12880     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12881     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12882     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12883     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12884     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12885     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12886     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
12887     typename T41, 
typename T42>
 
12891       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12892       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12893       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12894       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
12895       T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
12896       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
12897       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
12898       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
12899       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
12900       v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
 
12901       v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
 
12903   template <
typename T>
 
12905     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12906         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12907         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
12908         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
12909         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
12910         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
12911         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
12912         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
12913         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
12914         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
12915         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
12916         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
12917         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
12918         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
12919         static_cast<T
>(v42_)};
 
12971 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
12972     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
12973     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
12974     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
12975     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
12976     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
12977     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
12978     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
12979     typename T41, 
typename T42, 
typename T43>
 
12983       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
12984       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
12985       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
12986       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
12987       T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
 
12988       v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
 
12989       v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
 
12990       v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
 
12991       v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
 
12992       v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
 
12993       v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
 
12995   template <
typename T>
 
12997     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
12998         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
12999         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13000         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13001         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13002         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13003         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13004         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13005         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13006         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13007         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13008         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13009         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13010         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13011         static_cast<T
>(v42_), 
static_cast<T
>(v43_)};
 
13064 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13065     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13066     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13067     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13068     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13069     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13070     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13071     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13072     typename T41, 
typename T42, 
typename T43, 
typename T44>
 
13076       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13077       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13078       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13079       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13080       T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
 
13081       v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
 
13082       v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
 
13083       v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
 
13084       v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
 
13085       v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
 
13086       v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
 
13087       v43_(v43), v44_(v44) {}
 
13089   template <
typename T>
 
13091     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13092         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13093         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13094         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13095         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13096         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13097         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13098         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13099         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13100         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13101         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13102         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13103         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13104         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13105         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_)};
 
13159 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13160     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13161     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13162     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13163     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13164     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13165     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13166     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13167     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45>
 
13171       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13172       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13173       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13174       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13175       T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
 
13176       v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
 
13177       v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
 
13178       v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
 
13179       v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
 
13180       v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
 
13181       v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
 
13182       v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
 
13184   template <
typename T>
 
13186     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13187         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13188         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13189         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13190         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13191         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13192         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13193         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13194         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13195         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13196         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13197         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13198         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13199         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13200         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13201         static_cast<T
>(v45_)};
 
13256 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13257     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13258     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13259     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13260     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13261     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13262     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13263     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13264     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
13269       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13270       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13271       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13272       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13273       T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
 
13274       v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
13275       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
13276       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
13277       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
13278       v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
 
13279       v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
 
13280       v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
 
13282   template <
typename T>
 
13284     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13285         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13286         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13287         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13288         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13289         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13290         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13291         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13292         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13293         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13294         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13295         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13296         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13297         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13298         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13299         static_cast<T
>(v45_), 
static_cast<T
>(v46_)};
 
13355 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13356     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13357     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13358     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13359     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13360     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13361     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13362     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13363     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
13364     typename T46, 
typename T47>
 
13368       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13369       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13370       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13371       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13372       T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
 
13373       v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
 
13374       v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
 
13375       v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
 
13376       v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
 
13377       v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
 
13378       v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
 
13379       v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
 
13382   template <
typename T>
 
13384     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13385         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13386         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13387         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13388         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13389         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13390         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13391         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13392         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13393         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13394         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13395         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13396         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13397         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13398         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13399         static_cast<T
>(v45_), 
static_cast<T
>(v46_), 
static_cast<T
>(v47_)};
 
13456 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13457     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13458     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13459     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13460     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13461     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13462     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13463     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13464     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
13465     typename T46, 
typename T47, 
typename T48>
 
13469       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13470       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13471       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13472       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13473       T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
 
13474       v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
 
13475       v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
 
13476       v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
 
13477       v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
 
13478       v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
 
13479       v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
 
13480       v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
 
13481       v46_(v46), v47_(v47), v48_(v48) {}
 
13483   template <
typename T>
 
13485     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13486         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13487         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13488         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13489         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13490         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13491         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13492         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13493         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13494         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13495         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13496         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13497         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13498         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13499         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13500         static_cast<T
>(v45_), 
static_cast<T
>(v46_), 
static_cast<T
>(v47_),
 
13501         static_cast<T
>(v48_)};
 
13559 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13560     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13561     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13562     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13563     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13564     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13565     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13566     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13567     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
13568     typename T46, 
typename T47, 
typename T48, 
typename T49>
 
13572       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13573       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13574       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13575       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13576       T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
 
13577       T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
13578       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
13579       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
13580       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
13581       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
13582       v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
 
13583       v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
 
13584       v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
 
13586   template <
typename T>
 
13588     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13589         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13590         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13591         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13592         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13593         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13594         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13595         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13596         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13597         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13598         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13599         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13600         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13601         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13602         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13603         static_cast<T
>(v45_), 
static_cast<T
>(v46_), 
static_cast<T
>(v47_),
 
13604         static_cast<T
>(v48_), 
static_cast<T
>(v49_)};
 
13663 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
13664     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
13665     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
13666     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
13667     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
13668     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
13669     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
13670     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
13671     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
13672     typename T46, 
typename T47, 
typename T48, 
typename T49, 
typename T50>
 
13676       T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
13677       T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
13678       T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
13679       T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
13680       T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
 
13681       T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
 
13682       v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
 
13683       v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
 
13684       v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
 
13685       v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
 
13686       v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
 
13687       v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
 
13688       v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
 
13690   template <
typename T>
 
13692     const T 
array[] = {
static_cast<T
>(v1_), 
static_cast<T
>(v2_),
 
13693         static_cast<T
>(v3_), 
static_cast<T
>(v4_), 
static_cast<T
>(v5_),
 
13694         static_cast<T
>(v6_), 
static_cast<T
>(v7_), 
static_cast<T
>(v8_),
 
13695         static_cast<T
>(v9_), 
static_cast<T
>(v10_), 
static_cast<T
>(v11_),
 
13696         static_cast<T
>(v12_), 
static_cast<T
>(v13_), 
static_cast<T
>(v14_),
 
13697         static_cast<T
>(v15_), 
static_cast<T
>(v16_), 
static_cast<T
>(v17_),
 
13698         static_cast<T
>(v18_), 
static_cast<T
>(v19_), 
static_cast<T
>(v20_),
 
13699         static_cast<T
>(v21_), 
static_cast<T
>(v22_), 
static_cast<T
>(v23_),
 
13700         static_cast<T
>(v24_), 
static_cast<T
>(v25_), 
static_cast<T
>(v26_),
 
13701         static_cast<T
>(v27_), 
static_cast<T
>(v28_), 
static_cast<T
>(v29_),
 
13702         static_cast<T
>(v30_), 
static_cast<T
>(v31_), 
static_cast<T
>(v32_),
 
13703         static_cast<T
>(v33_), 
static_cast<T
>(v34_), 
static_cast<T
>(v35_),
 
13704         static_cast<T
>(v36_), 
static_cast<T
>(v37_), 
static_cast<T
>(v38_),
 
13705         static_cast<T
>(v39_), 
static_cast<T
>(v40_), 
static_cast<T
>(v41_),
 
13706         static_cast<T
>(v42_), 
static_cast<T
>(v43_), 
static_cast<T
>(v44_),
 
13707         static_cast<T
>(v45_), 
static_cast<T
>(v46_), 
static_cast<T
>(v47_),
 
13708         static_cast<T
>(v48_), 
static_cast<T
>(v49_), 
static_cast<T
>(v50_)};
 
13768 # if GTEST_HAS_COMBINE 
13774 template <
typename T1, 
typename T2>
 
13775 class CartesianProductGenerator2
 
13778   typedef ::std::tr1::tuple<T1, T2> ParamType;
 
13782       : g1_(g1), g2_(g2) {}
 
13783   virtual ~CartesianProductGenerator2() {}
 
13785   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
13786     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
 
13788   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
13789     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
 
13793   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
13795     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
13796       const ParamGenerator<T1>& g1,
 
13797       const typename ParamGenerator<T1>::iterator& current1,
 
13798       const ParamGenerator<T2>& g2,
 
13799       const typename ParamGenerator<T2>::iterator& current2)
 
13801           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
13802           begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {
 
13803       ComputeCurrentValue();
 
13805     virtual ~Iterator() {}
 
13807     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
13812     virtual void Advance() {
 
13815       if (current2_ == end2_) {
 
13816         current2_ = begin2_;
 
13819       ComputeCurrentValue();
 
13821     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
13822       return new Iterator(*
this);
 
13824     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
13825     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
13828       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
13829           << 
"The program attempted to compare iterators " 
13830           << 
"from different generators." << std::endl;
 
13831       const Iterator* typed_other =
 
13832           CheckedDowncastToActualType<const Iterator>(&other);
 
13836       return (AtEnd() && typed_other->AtEnd()) ||
 
13838           current1_ == typed_other->current1_ &&
 
13839           current2_ == typed_other->current2_);
 
13843     Iterator(
const Iterator& other)
 
13844         : base_(other.base_),
 
13845         begin1_(other.begin1_),
 
13846         end1_(other.end1_),
 
13847         current1_(other.current1_),
 
13848         begin2_(other.begin2_),
 
13849         end2_(other.end2_),
 
13850         current2_(other.current2_) {
 
13851       ComputeCurrentValue();
 
13854     void ComputeCurrentValue() {
 
13856         current_value_ = ParamType(*current1_, *current2_);
 
13858     bool AtEnd()
 const {
 
13862           current1_ == end1_ ||
 
13863           current2_ == end2_;
 
13867     void operator=(
const Iterator& other);
 
13869     const ParamGeneratorInterface<ParamType>* 
const base_;
 
13872     const typename ParamGenerator<T1>::iterator begin1_;
 
13873     const typename ParamGenerator<T1>::iterator end1_;
 
13874     typename ParamGenerator<T1>::iterator current1_;
 
13875     const typename ParamGenerator<T2>::iterator begin2_;
 
13876     const typename ParamGenerator<T2>::iterator end2_;
 
13877     typename ParamGenerator<T2>::iterator current2_;
 
13878     ParamType current_value_;
 
13882   void operator=(
const CartesianProductGenerator2& other);
 
13884   const ParamGenerator<T1> g1_;
 
13885   const ParamGenerator<T2> g2_;
 
13889 template <
typename T1, 
typename T2, 
typename T3>
 
13890 class CartesianProductGenerator3
 
13891     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
 
13893   typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
 
13895   CartesianProductGenerator3(
const ParamGenerator<T1>& g1,
 
13896       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3)
 
13897       : g1_(g1), g2_(g2), g3_(g3) {}
 
13898   virtual ~CartesianProductGenerator3() {}
 
13900   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
13901     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
13904   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
13905     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
 
13909   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
13911     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
13912       const ParamGenerator<T1>& g1,
 
13913       const typename ParamGenerator<T1>::iterator& current1,
 
13914       const ParamGenerator<T2>& g2,
 
13915       const typename ParamGenerator<T2>::iterator& current2,
 
13916       const ParamGenerator<T3>& g3,
 
13917       const typename ParamGenerator<T3>::iterator& current3)
 
13919           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
13920           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
13921           begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    {
 
13922       ComputeCurrentValue();
 
13924     virtual ~Iterator() {}
 
13926     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
13931     virtual void Advance() {
 
13934       if (current3_ == end3_) {
 
13935         current3_ = begin3_;
 
13938       if (current2_ == end2_) {
 
13939         current2_ = begin2_;
 
13942       ComputeCurrentValue();
 
13944     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
13945       return new Iterator(*
this);
 
13947     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
13948     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
13951       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
13952           << 
"The program attempted to compare iterators " 
13953           << 
"from different generators." << std::endl;
 
13954       const Iterator* typed_other =
 
13955           CheckedDowncastToActualType<const Iterator>(&other);
 
13959       return (AtEnd() && typed_other->AtEnd()) ||
 
13961           current1_ == typed_other->current1_ &&
 
13962           current2_ == typed_other->current2_ &&
 
13963           current3_ == typed_other->current3_);
 
13967     Iterator(
const Iterator& other)
 
13968         : base_(other.base_),
 
13969         begin1_(other.begin1_),
 
13970         end1_(other.end1_),
 
13971         current1_(other.current1_),
 
13972         begin2_(other.begin2_),
 
13973         end2_(other.end2_),
 
13974         current2_(other.current2_),
 
13975         begin3_(other.begin3_),
 
13976         end3_(other.end3_),
 
13977         current3_(other.current3_) {
 
13978       ComputeCurrentValue();
 
13981     void ComputeCurrentValue() {
 
13983         current_value_ = ParamType(*current1_, *current2_, *current3_);
 
13985     bool AtEnd()
 const {
 
13989           current1_ == end1_ ||
 
13990           current2_ == end2_ ||
 
13991           current3_ == end3_;
 
13995     void operator=(
const Iterator& other);
 
13997     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14000     const typename ParamGenerator<T1>::iterator begin1_;
 
14001     const typename ParamGenerator<T1>::iterator end1_;
 
14002     typename ParamGenerator<T1>::iterator current1_;
 
14003     const typename ParamGenerator<T2>::iterator begin2_;
 
14004     const typename ParamGenerator<T2>::iterator end2_;
 
14005     typename ParamGenerator<T2>::iterator current2_;
 
14006     const typename ParamGenerator<T3>::iterator begin3_;
 
14007     const typename ParamGenerator<T3>::iterator end3_;
 
14008     typename ParamGenerator<T3>::iterator current3_;
 
14009     ParamType current_value_;
 
14013   void operator=(
const CartesianProductGenerator3& other);
 
14015   const ParamGenerator<T1> g1_;
 
14016   const ParamGenerator<T2> g2_;
 
14017   const ParamGenerator<T3> g3_;
 
14021 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
14022 class CartesianProductGenerator4
 
14023     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
 
14025   typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
 
14027   CartesianProductGenerator4(
const ParamGenerator<T1>& g1,
 
14028       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14029       const ParamGenerator<T4>& g4)
 
14030       : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
 
14031   virtual ~CartesianProductGenerator4() {}
 
14033   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14034     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14035         g3_.begin(), g4_, g4_.begin());
 
14037   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14038     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14043   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14045     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14046       const ParamGenerator<T1>& g1,
 
14047       const typename ParamGenerator<T1>::iterator& current1,
 
14048       const ParamGenerator<T2>& g2,
 
14049       const typename ParamGenerator<T2>::iterator& current2,
 
14050       const ParamGenerator<T3>& g3,
 
14051       const typename ParamGenerator<T3>::iterator& current3,
 
14052       const ParamGenerator<T4>& g4,
 
14053       const typename ParamGenerator<T4>::iterator& current4)
 
14055           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
14056           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
14057           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
14058           begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    {
 
14059       ComputeCurrentValue();
 
14061     virtual ~Iterator() {}
 
14063     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
14068     virtual void Advance() {
 
14071       if (current4_ == end4_) {
 
14072         current4_ = begin4_;
 
14075       if (current3_ == end3_) {
 
14076         current3_ = begin3_;
 
14079       if (current2_ == end2_) {
 
14080         current2_ = begin2_;
 
14083       ComputeCurrentValue();
 
14085     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
14086       return new Iterator(*
this);
 
14088     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
14089     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
14092       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
14093           << 
"The program attempted to compare iterators " 
14094           << 
"from different generators." << std::endl;
 
14095       const Iterator* typed_other =
 
14096           CheckedDowncastToActualType<const Iterator>(&other);
 
14100       return (AtEnd() && typed_other->AtEnd()) ||
 
14102           current1_ == typed_other->current1_ &&
 
14103           current2_ == typed_other->current2_ &&
 
14104           current3_ == typed_other->current3_ &&
 
14105           current4_ == typed_other->current4_);
 
14109     Iterator(
const Iterator& other)
 
14110         : base_(other.base_),
 
14111         begin1_(other.begin1_),
 
14112         end1_(other.end1_),
 
14113         current1_(other.current1_),
 
14114         begin2_(other.begin2_),
 
14115         end2_(other.end2_),
 
14116         current2_(other.current2_),
 
14117         begin3_(other.begin3_),
 
14118         end3_(other.end3_),
 
14119         current3_(other.current3_),
 
14120         begin4_(other.begin4_),
 
14121         end4_(other.end4_),
 
14122         current4_(other.current4_) {
 
14123       ComputeCurrentValue();
 
14126     void ComputeCurrentValue() {
 
14128         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
14131     bool AtEnd()
 const {
 
14135           current1_ == end1_ ||
 
14136           current2_ == end2_ ||
 
14137           current3_ == end3_ ||
 
14138           current4_ == end4_;
 
14142     void operator=(
const Iterator& other);
 
14144     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14147     const typename ParamGenerator<T1>::iterator begin1_;
 
14148     const typename ParamGenerator<T1>::iterator end1_;
 
14149     typename ParamGenerator<T1>::iterator current1_;
 
14150     const typename ParamGenerator<T2>::iterator begin2_;
 
14151     const typename ParamGenerator<T2>::iterator end2_;
 
14152     typename ParamGenerator<T2>::iterator current2_;
 
14153     const typename ParamGenerator<T3>::iterator begin3_;
 
14154     const typename ParamGenerator<T3>::iterator end3_;
 
14155     typename ParamGenerator<T3>::iterator current3_;
 
14156     const typename ParamGenerator<T4>::iterator begin4_;
 
14157     const typename ParamGenerator<T4>::iterator end4_;
 
14158     typename ParamGenerator<T4>::iterator current4_;
 
14159     ParamType current_value_;
 
14163   void operator=(
const CartesianProductGenerator4& other);
 
14165   const ParamGenerator<T1> g1_;
 
14166   const ParamGenerator<T2> g2_;
 
14167   const ParamGenerator<T3> g3_;
 
14168   const ParamGenerator<T4> g4_;
 
14172 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
14173 class CartesianProductGenerator5
 
14174     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
 
14176   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
 
14178   CartesianProductGenerator5(
const ParamGenerator<T1>& g1,
 
14179       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14180       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5)
 
14181       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
 
14182   virtual ~CartesianProductGenerator5() {}
 
14184   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14185     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14186         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
 
14188   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14189     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14190         g4_, g4_.end(), g5_, g5_.end());
 
14194   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14196     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14197       const ParamGenerator<T1>& g1,
 
14198       const typename ParamGenerator<T1>::iterator& current1,
 
14199       const ParamGenerator<T2>& g2,
 
14200       const typename ParamGenerator<T2>::iterator& current2,
 
14201       const ParamGenerator<T3>& g3,
 
14202       const typename ParamGenerator<T3>::iterator& current3,
 
14203       const ParamGenerator<T4>& g4,
 
14204       const typename ParamGenerator<T4>::iterator& current4,
 
14205       const ParamGenerator<T5>& g5,
 
14206       const typename ParamGenerator<T5>::iterator& current5)
 
14208           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
14209           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
14210           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
14211           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
14212           begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    {
 
14213       ComputeCurrentValue();
 
14215     virtual ~Iterator() {}
 
14217     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
14222     virtual void Advance() {
 
14225       if (current5_ == end5_) {
 
14226         current5_ = begin5_;
 
14229       if (current4_ == end4_) {
 
14230         current4_ = begin4_;
 
14233       if (current3_ == end3_) {
 
14234         current3_ = begin3_;
 
14237       if (current2_ == end2_) {
 
14238         current2_ = begin2_;
 
14241       ComputeCurrentValue();
 
14243     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
14244       return new Iterator(*
this);
 
14246     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
14247     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
14250       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
14251           << 
"The program attempted to compare iterators " 
14252           << 
"from different generators." << std::endl;
 
14253       const Iterator* typed_other =
 
14254           CheckedDowncastToActualType<const Iterator>(&other);
 
14258       return (AtEnd() && typed_other->AtEnd()) ||
 
14260           current1_ == typed_other->current1_ &&
 
14261           current2_ == typed_other->current2_ &&
 
14262           current3_ == typed_other->current3_ &&
 
14263           current4_ == typed_other->current4_ &&
 
14264           current5_ == typed_other->current5_);
 
14268     Iterator(
const Iterator& other)
 
14269         : base_(other.base_),
 
14270         begin1_(other.begin1_),
 
14271         end1_(other.end1_),
 
14272         current1_(other.current1_),
 
14273         begin2_(other.begin2_),
 
14274         end2_(other.end2_),
 
14275         current2_(other.current2_),
 
14276         begin3_(other.begin3_),
 
14277         end3_(other.end3_),
 
14278         current3_(other.current3_),
 
14279         begin4_(other.begin4_),
 
14280         end4_(other.end4_),
 
14281         current4_(other.current4_),
 
14282         begin5_(other.begin5_),
 
14283         end5_(other.end5_),
 
14284         current5_(other.current5_) {
 
14285       ComputeCurrentValue();
 
14288     void ComputeCurrentValue() {
 
14290         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
14291             *current4_, *current5_);
 
14293     bool AtEnd()
 const {
 
14297           current1_ == end1_ ||
 
14298           current2_ == end2_ ||
 
14299           current3_ == end3_ ||
 
14300           current4_ == end4_ ||
 
14301           current5_ == end5_;
 
14305     void operator=(
const Iterator& other);
 
14307     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14310     const typename ParamGenerator<T1>::iterator begin1_;
 
14311     const typename ParamGenerator<T1>::iterator end1_;
 
14312     typename ParamGenerator<T1>::iterator current1_;
 
14313     const typename ParamGenerator<T2>::iterator begin2_;
 
14314     const typename ParamGenerator<T2>::iterator end2_;
 
14315     typename ParamGenerator<T2>::iterator current2_;
 
14316     const typename ParamGenerator<T3>::iterator begin3_;
 
14317     const typename ParamGenerator<T3>::iterator end3_;
 
14318     typename ParamGenerator<T3>::iterator current3_;
 
14319     const typename ParamGenerator<T4>::iterator begin4_;
 
14320     const typename ParamGenerator<T4>::iterator end4_;
 
14321     typename ParamGenerator<T4>::iterator current4_;
 
14322     const typename ParamGenerator<T5>::iterator begin5_;
 
14323     const typename ParamGenerator<T5>::iterator end5_;
 
14324     typename ParamGenerator<T5>::iterator current5_;
 
14325     ParamType current_value_;
 
14329   void operator=(
const CartesianProductGenerator5& other);
 
14331   const ParamGenerator<T1> g1_;
 
14332   const ParamGenerator<T2> g2_;
 
14333   const ParamGenerator<T3> g3_;
 
14334   const ParamGenerator<T4> g4_;
 
14335   const ParamGenerator<T5> g5_;
 
14339 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
14341 class CartesianProductGenerator6
 
14342     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
 
14345   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
 
14347   CartesianProductGenerator6(
const ParamGenerator<T1>& g1,
 
14348       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14349       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5,
 
14350       const ParamGenerator<T6>& g6)
 
14351       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
 
14352   virtual ~CartesianProductGenerator6() {}
 
14354   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14355     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14356         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
 
14358   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14359     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14360         g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
 
14364   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14366     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14367       const ParamGenerator<T1>& g1,
 
14368       const typename ParamGenerator<T1>::iterator& current1,
 
14369       const ParamGenerator<T2>& g2,
 
14370       const typename ParamGenerator<T2>::iterator& current2,
 
14371       const ParamGenerator<T3>& g3,
 
14372       const typename ParamGenerator<T3>::iterator& current3,
 
14373       const ParamGenerator<T4>& g4,
 
14374       const typename ParamGenerator<T4>::iterator& current4,
 
14375       const ParamGenerator<T5>& g5,
 
14376       const typename ParamGenerator<T5>::iterator& current5,
 
14377       const ParamGenerator<T6>& g6,
 
14378       const typename ParamGenerator<T6>::iterator& current6)
 
14380           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
14381           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
14382           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
14383           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
14384           begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
 
14385           begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    {
 
14386       ComputeCurrentValue();
 
14388     virtual ~Iterator() {}
 
14390     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
14395     virtual void Advance() {
 
14398       if (current6_ == end6_) {
 
14399         current6_ = begin6_;
 
14402       if (current5_ == end5_) {
 
14403         current5_ = begin5_;
 
14406       if (current4_ == end4_) {
 
14407         current4_ = begin4_;
 
14410       if (current3_ == end3_) {
 
14411         current3_ = begin3_;
 
14414       if (current2_ == end2_) {
 
14415         current2_ = begin2_;
 
14418       ComputeCurrentValue();
 
14420     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
14421       return new Iterator(*
this);
 
14423     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
14424     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
14427       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
14428           << 
"The program attempted to compare iterators " 
14429           << 
"from different generators." << std::endl;
 
14430       const Iterator* typed_other =
 
14431           CheckedDowncastToActualType<const Iterator>(&other);
 
14435       return (AtEnd() && typed_other->AtEnd()) ||
 
14437           current1_ == typed_other->current1_ &&
 
14438           current2_ == typed_other->current2_ &&
 
14439           current3_ == typed_other->current3_ &&
 
14440           current4_ == typed_other->current4_ &&
 
14441           current5_ == typed_other->current5_ &&
 
14442           current6_ == typed_other->current6_);
 
14446     Iterator(
const Iterator& other)
 
14447         : base_(other.base_),
 
14448         begin1_(other.begin1_),
 
14449         end1_(other.end1_),
 
14450         current1_(other.current1_),
 
14451         begin2_(other.begin2_),
 
14452         end2_(other.end2_),
 
14453         current2_(other.current2_),
 
14454         begin3_(other.begin3_),
 
14455         end3_(other.end3_),
 
14456         current3_(other.current3_),
 
14457         begin4_(other.begin4_),
 
14458         end4_(other.end4_),
 
14459         current4_(other.current4_),
 
14460         begin5_(other.begin5_),
 
14461         end5_(other.end5_),
 
14462         current5_(other.current5_),
 
14463         begin6_(other.begin6_),
 
14464         end6_(other.end6_),
 
14465         current6_(other.current6_) {
 
14466       ComputeCurrentValue();
 
14469     void ComputeCurrentValue() {
 
14471         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
14472             *current4_, *current5_, *current6_);
 
14474     bool AtEnd()
 const {
 
14478           current1_ == end1_ ||
 
14479           current2_ == end2_ ||
 
14480           current3_ == end3_ ||
 
14481           current4_ == end4_ ||
 
14482           current5_ == end5_ ||
 
14483           current6_ == end6_;
 
14487     void operator=(
const Iterator& other);
 
14489     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14492     const typename ParamGenerator<T1>::iterator begin1_;
 
14493     const typename ParamGenerator<T1>::iterator end1_;
 
14494     typename ParamGenerator<T1>::iterator current1_;
 
14495     const typename ParamGenerator<T2>::iterator begin2_;
 
14496     const typename ParamGenerator<T2>::iterator end2_;
 
14497     typename ParamGenerator<T2>::iterator current2_;
 
14498     const typename ParamGenerator<T3>::iterator begin3_;
 
14499     const typename ParamGenerator<T3>::iterator end3_;
 
14500     typename ParamGenerator<T3>::iterator current3_;
 
14501     const typename ParamGenerator<T4>::iterator begin4_;
 
14502     const typename ParamGenerator<T4>::iterator end4_;
 
14503     typename ParamGenerator<T4>::iterator current4_;
 
14504     const typename ParamGenerator<T5>::iterator begin5_;
 
14505     const typename ParamGenerator<T5>::iterator end5_;
 
14506     typename ParamGenerator<T5>::iterator current5_;
 
14507     const typename ParamGenerator<T6>::iterator begin6_;
 
14508     const typename ParamGenerator<T6>::iterator end6_;
 
14509     typename ParamGenerator<T6>::iterator current6_;
 
14510     ParamType current_value_;
 
14514   void operator=(
const CartesianProductGenerator6& other);
 
14516   const ParamGenerator<T1> g1_;
 
14517   const ParamGenerator<T2> g2_;
 
14518   const ParamGenerator<T3> g3_;
 
14519   const ParamGenerator<T4> g4_;
 
14520   const ParamGenerator<T5> g5_;
 
14521   const ParamGenerator<T6> g6_;
 
14525 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
14526     typename T6, 
typename T7>
 
14527 class CartesianProductGenerator7
 
14528     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
 
14531   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
 
14533   CartesianProductGenerator7(
const ParamGenerator<T1>& g1,
 
14534       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14535       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5,
 
14536       const ParamGenerator<T6>& g6, 
const ParamGenerator<T7>& g7)
 
14537       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
 
14538   virtual ~CartesianProductGenerator7() {}
 
14540   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14541     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14542         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
 
14545   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14546     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14547         g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
 
14551   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14553     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14554       const ParamGenerator<T1>& g1,
 
14555       const typename ParamGenerator<T1>::iterator& current1,
 
14556       const ParamGenerator<T2>& g2,
 
14557       const typename ParamGenerator<T2>::iterator& current2,
 
14558       const ParamGenerator<T3>& g3,
 
14559       const typename ParamGenerator<T3>::iterator& current3,
 
14560       const ParamGenerator<T4>& g4,
 
14561       const typename ParamGenerator<T4>::iterator& current4,
 
14562       const ParamGenerator<T5>& g5,
 
14563       const typename ParamGenerator<T5>::iterator& current5,
 
14564       const ParamGenerator<T6>& g6,
 
14565       const typename ParamGenerator<T6>::iterator& current6,
 
14566       const ParamGenerator<T7>& g7,
 
14567       const typename ParamGenerator<T7>::iterator& current7)
 
14569           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
14570           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
14571           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
14572           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
14573           begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
 
14574           begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
 
14575           begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    {
 
14576       ComputeCurrentValue();
 
14578     virtual ~Iterator() {}
 
14580     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
14585     virtual void Advance() {
 
14588       if (current7_ == end7_) {
 
14589         current7_ = begin7_;
 
14592       if (current6_ == end6_) {
 
14593         current6_ = begin6_;
 
14596       if (current5_ == end5_) {
 
14597         current5_ = begin5_;
 
14600       if (current4_ == end4_) {
 
14601         current4_ = begin4_;
 
14604       if (current3_ == end3_) {
 
14605         current3_ = begin3_;
 
14608       if (current2_ == end2_) {
 
14609         current2_ = begin2_;
 
14612       ComputeCurrentValue();
 
14614     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
14615       return new Iterator(*
this);
 
14617     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
14618     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
14621       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
14622           << 
"The program attempted to compare iterators " 
14623           << 
"from different generators." << std::endl;
 
14624       const Iterator* typed_other =
 
14625           CheckedDowncastToActualType<const Iterator>(&other);
 
14629       return (AtEnd() && typed_other->AtEnd()) ||
 
14631           current1_ == typed_other->current1_ &&
 
14632           current2_ == typed_other->current2_ &&
 
14633           current3_ == typed_other->current3_ &&
 
14634           current4_ == typed_other->current4_ &&
 
14635           current5_ == typed_other->current5_ &&
 
14636           current6_ == typed_other->current6_ &&
 
14637           current7_ == typed_other->current7_);
 
14641     Iterator(
const Iterator& other)
 
14642         : base_(other.base_),
 
14643         begin1_(other.begin1_),
 
14644         end1_(other.end1_),
 
14645         current1_(other.current1_),
 
14646         begin2_(other.begin2_),
 
14647         end2_(other.end2_),
 
14648         current2_(other.current2_),
 
14649         begin3_(other.begin3_),
 
14650         end3_(other.end3_),
 
14651         current3_(other.current3_),
 
14652         begin4_(other.begin4_),
 
14653         end4_(other.end4_),
 
14654         current4_(other.current4_),
 
14655         begin5_(other.begin5_),
 
14656         end5_(other.end5_),
 
14657         current5_(other.current5_),
 
14658         begin6_(other.begin6_),
 
14659         end6_(other.end6_),
 
14660         current6_(other.current6_),
 
14661         begin7_(other.begin7_),
 
14662         end7_(other.end7_),
 
14663         current7_(other.current7_) {
 
14664       ComputeCurrentValue();
 
14667     void ComputeCurrentValue() {
 
14669         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
14670             *current4_, *current5_, *current6_, *current7_);
 
14672     bool AtEnd()
 const {
 
14676           current1_ == end1_ ||
 
14677           current2_ == end2_ ||
 
14678           current3_ == end3_ ||
 
14679           current4_ == end4_ ||
 
14680           current5_ == end5_ ||
 
14681           current6_ == end6_ ||
 
14682           current7_ == end7_;
 
14686     void operator=(
const Iterator& other);
 
14688     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14691     const typename ParamGenerator<T1>::iterator begin1_;
 
14692     const typename ParamGenerator<T1>::iterator end1_;
 
14693     typename ParamGenerator<T1>::iterator current1_;
 
14694     const typename ParamGenerator<T2>::iterator begin2_;
 
14695     const typename ParamGenerator<T2>::iterator end2_;
 
14696     typename ParamGenerator<T2>::iterator current2_;
 
14697     const typename ParamGenerator<T3>::iterator begin3_;
 
14698     const typename ParamGenerator<T3>::iterator end3_;
 
14699     typename ParamGenerator<T3>::iterator current3_;
 
14700     const typename ParamGenerator<T4>::iterator begin4_;
 
14701     const typename ParamGenerator<T4>::iterator end4_;
 
14702     typename ParamGenerator<T4>::iterator current4_;
 
14703     const typename ParamGenerator<T5>::iterator begin5_;
 
14704     const typename ParamGenerator<T5>::iterator end5_;
 
14705     typename ParamGenerator<T5>::iterator current5_;
 
14706     const typename ParamGenerator<T6>::iterator begin6_;
 
14707     const typename ParamGenerator<T6>::iterator end6_;
 
14708     typename ParamGenerator<T6>::iterator current6_;
 
14709     const typename ParamGenerator<T7>::iterator begin7_;
 
14710     const typename ParamGenerator<T7>::iterator end7_;
 
14711     typename ParamGenerator<T7>::iterator current7_;
 
14712     ParamType current_value_;
 
14716   void operator=(
const CartesianProductGenerator7& other);
 
14718   const ParamGenerator<T1> g1_;
 
14719   const ParamGenerator<T2> g2_;
 
14720   const ParamGenerator<T3> g3_;
 
14721   const ParamGenerator<T4> g4_;
 
14722   const ParamGenerator<T5> g5_;
 
14723   const ParamGenerator<T6> g6_;
 
14724   const ParamGenerator<T7> g7_;
 
14728 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
14729     typename T6, 
typename T7, 
typename T8>
 
14730 class CartesianProductGenerator8
 
14731     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
 
14734   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
 
14736   CartesianProductGenerator8(
const ParamGenerator<T1>& g1,
 
14737       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14738       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5,
 
14739       const ParamGenerator<T6>& g6, 
const ParamGenerator<T7>& g7,
 
14740       const ParamGenerator<T8>& g8)
 
14741       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
 
14743   virtual ~CartesianProductGenerator8() {}
 
14745   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14746     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14747         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
 
14748         g7_.begin(), g8_, g8_.begin());
 
14750   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14751     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14752         g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
 
14757   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14759     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14760       const ParamGenerator<T1>& g1,
 
14761       const typename ParamGenerator<T1>::iterator& current1,
 
14762       const ParamGenerator<T2>& g2,
 
14763       const typename ParamGenerator<T2>::iterator& current2,
 
14764       const ParamGenerator<T3>& g3,
 
14765       const typename ParamGenerator<T3>::iterator& current3,
 
14766       const ParamGenerator<T4>& g4,
 
14767       const typename ParamGenerator<T4>::iterator& current4,
 
14768       const ParamGenerator<T5>& g5,
 
14769       const typename ParamGenerator<T5>::iterator& current5,
 
14770       const ParamGenerator<T6>& g6,
 
14771       const typename ParamGenerator<T6>::iterator& current6,
 
14772       const ParamGenerator<T7>& g7,
 
14773       const typename ParamGenerator<T7>::iterator& current7,
 
14774       const ParamGenerator<T8>& g8,
 
14775       const typename ParamGenerator<T8>::iterator& current8)
 
14777           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
14778           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
14779           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
14780           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
14781           begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
 
14782           begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
 
14783           begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
 
14784           begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    {
 
14785       ComputeCurrentValue();
 
14787     virtual ~Iterator() {}
 
14789     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
14794     virtual void Advance() {
 
14797       if (current8_ == end8_) {
 
14798         current8_ = begin8_;
 
14801       if (current7_ == end7_) {
 
14802         current7_ = begin7_;
 
14805       if (current6_ == end6_) {
 
14806         current6_ = begin6_;
 
14809       if (current5_ == end5_) {
 
14810         current5_ = begin5_;
 
14813       if (current4_ == end4_) {
 
14814         current4_ = begin4_;
 
14817       if (current3_ == end3_) {
 
14818         current3_ = begin3_;
 
14821       if (current2_ == end2_) {
 
14822         current2_ = begin2_;
 
14825       ComputeCurrentValue();
 
14827     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
14828       return new Iterator(*
this);
 
14830     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
14831     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
14834       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
14835           << 
"The program attempted to compare iterators " 
14836           << 
"from different generators." << std::endl;
 
14837       const Iterator* typed_other =
 
14838           CheckedDowncastToActualType<const Iterator>(&other);
 
14842       return (AtEnd() && typed_other->AtEnd()) ||
 
14844           current1_ == typed_other->current1_ &&
 
14845           current2_ == typed_other->current2_ &&
 
14846           current3_ == typed_other->current3_ &&
 
14847           current4_ == typed_other->current4_ &&
 
14848           current5_ == typed_other->current5_ &&
 
14849           current6_ == typed_other->current6_ &&
 
14850           current7_ == typed_other->current7_ &&
 
14851           current8_ == typed_other->current8_);
 
14855     Iterator(
const Iterator& other)
 
14856         : base_(other.base_),
 
14857         begin1_(other.begin1_),
 
14858         end1_(other.end1_),
 
14859         current1_(other.current1_),
 
14860         begin2_(other.begin2_),
 
14861         end2_(other.end2_),
 
14862         current2_(other.current2_),
 
14863         begin3_(other.begin3_),
 
14864         end3_(other.end3_),
 
14865         current3_(other.current3_),
 
14866         begin4_(other.begin4_),
 
14867         end4_(other.end4_),
 
14868         current4_(other.current4_),
 
14869         begin5_(other.begin5_),
 
14870         end5_(other.end5_),
 
14871         current5_(other.current5_),
 
14872         begin6_(other.begin6_),
 
14873         end6_(other.end6_),
 
14874         current6_(other.current6_),
 
14875         begin7_(other.begin7_),
 
14876         end7_(other.end7_),
 
14877         current7_(other.current7_),
 
14878         begin8_(other.begin8_),
 
14879         end8_(other.end8_),
 
14880         current8_(other.current8_) {
 
14881       ComputeCurrentValue();
 
14884     void ComputeCurrentValue() {
 
14886         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
14887             *current4_, *current5_, *current6_, *current7_, *current8_);
 
14889     bool AtEnd()
 const {
 
14893           current1_ == end1_ ||
 
14894           current2_ == end2_ ||
 
14895           current3_ == end3_ ||
 
14896           current4_ == end4_ ||
 
14897           current5_ == end5_ ||
 
14898           current6_ == end6_ ||
 
14899           current7_ == end7_ ||
 
14900           current8_ == end8_;
 
14904     void operator=(
const Iterator& other);
 
14906     const ParamGeneratorInterface<ParamType>* 
const base_;
 
14909     const typename ParamGenerator<T1>::iterator begin1_;
 
14910     const typename ParamGenerator<T1>::iterator end1_;
 
14911     typename ParamGenerator<T1>::iterator current1_;
 
14912     const typename ParamGenerator<T2>::iterator begin2_;
 
14913     const typename ParamGenerator<T2>::iterator end2_;
 
14914     typename ParamGenerator<T2>::iterator current2_;
 
14915     const typename ParamGenerator<T3>::iterator begin3_;
 
14916     const typename ParamGenerator<T3>::iterator end3_;
 
14917     typename ParamGenerator<T3>::iterator current3_;
 
14918     const typename ParamGenerator<T4>::iterator begin4_;
 
14919     const typename ParamGenerator<T4>::iterator end4_;
 
14920     typename ParamGenerator<T4>::iterator current4_;
 
14921     const typename ParamGenerator<T5>::iterator begin5_;
 
14922     const typename ParamGenerator<T5>::iterator end5_;
 
14923     typename ParamGenerator<T5>::iterator current5_;
 
14924     const typename ParamGenerator<T6>::iterator begin6_;
 
14925     const typename ParamGenerator<T6>::iterator end6_;
 
14926     typename ParamGenerator<T6>::iterator current6_;
 
14927     const typename ParamGenerator<T7>::iterator begin7_;
 
14928     const typename ParamGenerator<T7>::iterator end7_;
 
14929     typename ParamGenerator<T7>::iterator current7_;
 
14930     const typename ParamGenerator<T8>::iterator begin8_;
 
14931     const typename ParamGenerator<T8>::iterator end8_;
 
14932     typename ParamGenerator<T8>::iterator current8_;
 
14933     ParamType current_value_;
 
14937   void operator=(
const CartesianProductGenerator8& other);
 
14939   const ParamGenerator<T1> g1_;
 
14940   const ParamGenerator<T2> g2_;
 
14941   const ParamGenerator<T3> g3_;
 
14942   const ParamGenerator<T4> g4_;
 
14943   const ParamGenerator<T5> g5_;
 
14944   const ParamGenerator<T6> g6_;
 
14945   const ParamGenerator<T7> g7_;
 
14946   const ParamGenerator<T8> g8_;
 
14950 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
14951     typename T6, 
typename T7, 
typename T8, 
typename T9>
 
14952 class CartesianProductGenerator9
 
14953     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
 
14956   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
 
14958   CartesianProductGenerator9(
const ParamGenerator<T1>& g1,
 
14959       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
14960       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5,
 
14961       const ParamGenerator<T6>& g6, 
const ParamGenerator<T7>& g7,
 
14962       const ParamGenerator<T8>& g8, 
const ParamGenerator<T9>& g9)
 
14963       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
 
14965   virtual ~CartesianProductGenerator9() {}
 
14967   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
14968     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
14969         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
 
14970         g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
 
14972   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
14973     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
14974         g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
 
14975         g8_.end(), g9_, g9_.end());
 
14979   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
14981     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
14982       const ParamGenerator<T1>& g1,
 
14983       const typename ParamGenerator<T1>::iterator& current1,
 
14984       const ParamGenerator<T2>& g2,
 
14985       const typename ParamGenerator<T2>::iterator& current2,
 
14986       const ParamGenerator<T3>& g3,
 
14987       const typename ParamGenerator<T3>::iterator& current3,
 
14988       const ParamGenerator<T4>& g4,
 
14989       const typename ParamGenerator<T4>::iterator& current4,
 
14990       const ParamGenerator<T5>& g5,
 
14991       const typename ParamGenerator<T5>::iterator& current5,
 
14992       const ParamGenerator<T6>& g6,
 
14993       const typename ParamGenerator<T6>::iterator& current6,
 
14994       const ParamGenerator<T7>& g7,
 
14995       const typename ParamGenerator<T7>::iterator& current7,
 
14996       const ParamGenerator<T8>& g8,
 
14997       const typename ParamGenerator<T8>::iterator& current8,
 
14998       const ParamGenerator<T9>& g9,
 
14999       const typename ParamGenerator<T9>::iterator& current9)
 
15001           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
15002           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
15003           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
15004           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
15005           begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
 
15006           begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
 
15007           begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
 
15008           begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
 
15009           begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    {
 
15010       ComputeCurrentValue();
 
15012     virtual ~Iterator() {}
 
15014     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
15019     virtual void Advance() {
 
15022       if (current9_ == end9_) {
 
15023         current9_ = begin9_;
 
15026       if (current8_ == end8_) {
 
15027         current8_ = begin8_;
 
15030       if (current7_ == end7_) {
 
15031         current7_ = begin7_;
 
15034       if (current6_ == end6_) {
 
15035         current6_ = begin6_;
 
15038       if (current5_ == end5_) {
 
15039         current5_ = begin5_;
 
15042       if (current4_ == end4_) {
 
15043         current4_ = begin4_;
 
15046       if (current3_ == end3_) {
 
15047         current3_ = begin3_;
 
15050       if (current2_ == end2_) {
 
15051         current2_ = begin2_;
 
15054       ComputeCurrentValue();
 
15056     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
15057       return new Iterator(*
this);
 
15059     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
15060     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
15063       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
15064           << 
"The program attempted to compare iterators " 
15065           << 
"from different generators." << std::endl;
 
15066       const Iterator* typed_other =
 
15067           CheckedDowncastToActualType<const Iterator>(&other);
 
15071       return (AtEnd() && typed_other->AtEnd()) ||
 
15073           current1_ == typed_other->current1_ &&
 
15074           current2_ == typed_other->current2_ &&
 
15075           current3_ == typed_other->current3_ &&
 
15076           current4_ == typed_other->current4_ &&
 
15077           current5_ == typed_other->current5_ &&
 
15078           current6_ == typed_other->current6_ &&
 
15079           current7_ == typed_other->current7_ &&
 
15080           current8_ == typed_other->current8_ &&
 
15081           current9_ == typed_other->current9_);
 
15085     Iterator(
const Iterator& other)
 
15086         : base_(other.base_),
 
15087         begin1_(other.begin1_),
 
15088         end1_(other.end1_),
 
15089         current1_(other.current1_),
 
15090         begin2_(other.begin2_),
 
15091         end2_(other.end2_),
 
15092         current2_(other.current2_),
 
15093         begin3_(other.begin3_),
 
15094         end3_(other.end3_),
 
15095         current3_(other.current3_),
 
15096         begin4_(other.begin4_),
 
15097         end4_(other.end4_),
 
15098         current4_(other.current4_),
 
15099         begin5_(other.begin5_),
 
15100         end5_(other.end5_),
 
15101         current5_(other.current5_),
 
15102         begin6_(other.begin6_),
 
15103         end6_(other.end6_),
 
15104         current6_(other.current6_),
 
15105         begin7_(other.begin7_),
 
15106         end7_(other.end7_),
 
15107         current7_(other.current7_),
 
15108         begin8_(other.begin8_),
 
15109         end8_(other.end8_),
 
15110         current8_(other.current8_),
 
15111         begin9_(other.begin9_),
 
15112         end9_(other.end9_),
 
15113         current9_(other.current9_) {
 
15114       ComputeCurrentValue();
 
15117     void ComputeCurrentValue() {
 
15119         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
15120             *current4_, *current5_, *current6_, *current7_, *current8_,
 
15123     bool AtEnd()
 const {
 
15127           current1_ == end1_ ||
 
15128           current2_ == end2_ ||
 
15129           current3_ == end3_ ||
 
15130           current4_ == end4_ ||
 
15131           current5_ == end5_ ||
 
15132           current6_ == end6_ ||
 
15133           current7_ == end7_ ||
 
15134           current8_ == end8_ ||
 
15135           current9_ == end9_;
 
15139     void operator=(
const Iterator& other);
 
15141     const ParamGeneratorInterface<ParamType>* 
const base_;
 
15144     const typename ParamGenerator<T1>::iterator begin1_;
 
15145     const typename ParamGenerator<T1>::iterator end1_;
 
15146     typename ParamGenerator<T1>::iterator current1_;
 
15147     const typename ParamGenerator<T2>::iterator begin2_;
 
15148     const typename ParamGenerator<T2>::iterator end2_;
 
15149     typename ParamGenerator<T2>::iterator current2_;
 
15150     const typename ParamGenerator<T3>::iterator begin3_;
 
15151     const typename ParamGenerator<T3>::iterator end3_;
 
15152     typename ParamGenerator<T3>::iterator current3_;
 
15153     const typename ParamGenerator<T4>::iterator begin4_;
 
15154     const typename ParamGenerator<T4>::iterator end4_;
 
15155     typename ParamGenerator<T4>::iterator current4_;
 
15156     const typename ParamGenerator<T5>::iterator begin5_;
 
15157     const typename ParamGenerator<T5>::iterator end5_;
 
15158     typename ParamGenerator<T5>::iterator current5_;
 
15159     const typename ParamGenerator<T6>::iterator begin6_;
 
15160     const typename ParamGenerator<T6>::iterator end6_;
 
15161     typename ParamGenerator<T6>::iterator current6_;
 
15162     const typename ParamGenerator<T7>::iterator begin7_;
 
15163     const typename ParamGenerator<T7>::iterator end7_;
 
15164     typename ParamGenerator<T7>::iterator current7_;
 
15165     const typename ParamGenerator<T8>::iterator begin8_;
 
15166     const typename ParamGenerator<T8>::iterator end8_;
 
15167     typename ParamGenerator<T8>::iterator current8_;
 
15168     const typename ParamGenerator<T9>::iterator begin9_;
 
15169     const typename ParamGenerator<T9>::iterator end9_;
 
15170     typename ParamGenerator<T9>::iterator current9_;
 
15171     ParamType current_value_;
 
15175   void operator=(
const CartesianProductGenerator9& other);
 
15177   const ParamGenerator<T1> g1_;
 
15178   const ParamGenerator<T2> g2_;
 
15179   const ParamGenerator<T3> g3_;
 
15180   const ParamGenerator<T4> g4_;
 
15181   const ParamGenerator<T5> g5_;
 
15182   const ParamGenerator<T6> g6_;
 
15183   const ParamGenerator<T7> g7_;
 
15184   const ParamGenerator<T8> g8_;
 
15185   const ParamGenerator<T9> g9_;
 
15189 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15190     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
15191 class CartesianProductGenerator10
 
15192     : 
public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
 
15193         T7, T8, T9, T10> > {
 
15195   typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
 
15197   CartesianProductGenerator10(
const ParamGenerator<T1>& g1,
 
15198       const ParamGenerator<T2>& g2, 
const ParamGenerator<T3>& g3,
 
15199       const ParamGenerator<T4>& g4, 
const ParamGenerator<T5>& g5,
 
15200       const ParamGenerator<T6>& g6, 
const ParamGenerator<T7>& g7,
 
15201       const ParamGenerator<T8>& g8, 
const ParamGenerator<T9>& g9,
 
15202       const ParamGenerator<T10>& g10)
 
15203       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
 
15204           g9_(g9), g10_(g10) {}
 
15205   virtual ~CartesianProductGenerator10() {}
 
15207   virtual ParamIteratorInterface<ParamType>* Begin()
 const {
 
15208     return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
 
15209         g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
 
15210         g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
 
15212   virtual ParamIteratorInterface<ParamType>* End()
 const {
 
15213     return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
 
15214         g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
 
15215         g8_.end(), g9_, g9_.end(), g10_, g10_.end());
 
15219   class Iterator : 
public ParamIteratorInterface<ParamType> {
 
15221     Iterator(
const ParamGeneratorInterface<ParamType>* base,
 
15222       const ParamGenerator<T1>& g1,
 
15223       const typename ParamGenerator<T1>::iterator& current1,
 
15224       const ParamGenerator<T2>& g2,
 
15225       const typename ParamGenerator<T2>::iterator& current2,
 
15226       const ParamGenerator<T3>& g3,
 
15227       const typename ParamGenerator<T3>::iterator& current3,
 
15228       const ParamGenerator<T4>& g4,
 
15229       const typename ParamGenerator<T4>::iterator& current4,
 
15230       const ParamGenerator<T5>& g5,
 
15231       const typename ParamGenerator<T5>::iterator& current5,
 
15232       const ParamGenerator<T6>& g6,
 
15233       const typename ParamGenerator<T6>::iterator& current6,
 
15234       const ParamGenerator<T7>& g7,
 
15235       const typename ParamGenerator<T7>::iterator& current7,
 
15236       const ParamGenerator<T8>& g8,
 
15237       const typename ParamGenerator<T8>::iterator& current8,
 
15238       const ParamGenerator<T9>& g9,
 
15239       const typename ParamGenerator<T9>::iterator& current9,
 
15240       const ParamGenerator<T10>& g10,
 
15241       const typename ParamGenerator<T10>::iterator& current10)
 
15243           begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
 
15244           begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
 
15245           begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
 
15246           begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
 
15247           begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
 
15248           begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
 
15249           begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
 
15250           begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
 
15251           begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
 
15252           begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    {
 
15253       ComputeCurrentValue();
 
15255     virtual ~Iterator() {}
 
15257     virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
 const {
 
15262     virtual void Advance() {
 
15265       if (current10_ == end10_) {
 
15266         current10_ = begin10_;
 
15269       if (current9_ == end9_) {
 
15270         current9_ = begin9_;
 
15273       if (current8_ == end8_) {
 
15274         current8_ = begin8_;
 
15277       if (current7_ == end7_) {
 
15278         current7_ = begin7_;
 
15281       if (current6_ == end6_) {
 
15282         current6_ = begin6_;
 
15285       if (current5_ == end5_) {
 
15286         current5_ = begin5_;
 
15289       if (current4_ == end4_) {
 
15290         current4_ = begin4_;
 
15293       if (current3_ == end3_) {
 
15294         current3_ = begin3_;
 
15297       if (current2_ == end2_) {
 
15298         current2_ = begin2_;
 
15301       ComputeCurrentValue();
 
15303     virtual ParamIteratorInterface<ParamType>* Clone()
 const {
 
15304       return new Iterator(*
this);
 
15306     virtual const ParamType* Current()
 const { 
return ¤t_value_; }
 
15307     virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
 const {
 
15310       GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 
15311           << 
"The program attempted to compare iterators " 
15312           << 
"from different generators." << std::endl;
 
15313       const Iterator* typed_other =
 
15314           CheckedDowncastToActualType<const Iterator>(&other);
 
15318       return (AtEnd() && typed_other->AtEnd()) ||
 
15320           current1_ == typed_other->current1_ &&
 
15321           current2_ == typed_other->current2_ &&
 
15322           current3_ == typed_other->current3_ &&
 
15323           current4_ == typed_other->current4_ &&
 
15324           current5_ == typed_other->current5_ &&
 
15325           current6_ == typed_other->current6_ &&
 
15326           current7_ == typed_other->current7_ &&
 
15327           current8_ == typed_other->current8_ &&
 
15328           current9_ == typed_other->current9_ &&
 
15329           current10_ == typed_other->current10_);
 
15333     Iterator(
const Iterator& other)
 
15334         : base_(other.base_),
 
15335         begin1_(other.begin1_),
 
15336         end1_(other.end1_),
 
15337         current1_(other.current1_),
 
15338         begin2_(other.begin2_),
 
15339         end2_(other.end2_),
 
15340         current2_(other.current2_),
 
15341         begin3_(other.begin3_),
 
15342         end3_(other.end3_),
 
15343         current3_(other.current3_),
 
15344         begin4_(other.begin4_),
 
15345         end4_(other.end4_),
 
15346         current4_(other.current4_),
 
15347         begin5_(other.begin5_),
 
15348         end5_(other.end5_),
 
15349         current5_(other.current5_),
 
15350         begin6_(other.begin6_),
 
15351         end6_(other.end6_),
 
15352         current6_(other.current6_),
 
15353         begin7_(other.begin7_),
 
15354         end7_(other.end7_),
 
15355         current7_(other.current7_),
 
15356         begin8_(other.begin8_),
 
15357         end8_(other.end8_),
 
15358         current8_(other.current8_),
 
15359         begin9_(other.begin9_),
 
15360         end9_(other.end9_),
 
15361         current9_(other.current9_),
 
15362         begin10_(other.begin10_),
 
15363         end10_(other.end10_),
 
15364         current10_(other.current10_) {
 
15365       ComputeCurrentValue();
 
15368     void ComputeCurrentValue() {
 
15370         current_value_ = ParamType(*current1_, *current2_, *current3_,
 
15371             *current4_, *current5_, *current6_, *current7_, *current8_,
 
15372             *current9_, *current10_);
 
15374     bool AtEnd()
 const {
 
15378           current1_ == end1_ ||
 
15379           current2_ == end2_ ||
 
15380           current3_ == end3_ ||
 
15381           current4_ == end4_ ||
 
15382           current5_ == end5_ ||
 
15383           current6_ == end6_ ||
 
15384           current7_ == end7_ ||
 
15385           current8_ == end8_ ||
 
15386           current9_ == end9_ ||
 
15387           current10_ == end10_;
 
15391     void operator=(
const Iterator& other);
 
15393     const ParamGeneratorInterface<ParamType>* 
const base_;
 
15396     const typename ParamGenerator<T1>::iterator begin1_;
 
15397     const typename ParamGenerator<T1>::iterator end1_;
 
15398     typename ParamGenerator<T1>::iterator current1_;
 
15399     const typename ParamGenerator<T2>::iterator begin2_;
 
15400     const typename ParamGenerator<T2>::iterator end2_;
 
15401     typename ParamGenerator<T2>::iterator current2_;
 
15402     const typename ParamGenerator<T3>::iterator begin3_;
 
15403     const typename ParamGenerator<T3>::iterator end3_;
 
15404     typename ParamGenerator<T3>::iterator current3_;
 
15405     const typename ParamGenerator<T4>::iterator begin4_;
 
15406     const typename ParamGenerator<T4>::iterator end4_;
 
15407     typename ParamGenerator<T4>::iterator current4_;
 
15408     const typename ParamGenerator<T5>::iterator begin5_;
 
15409     const typename ParamGenerator<T5>::iterator end5_;
 
15410     typename ParamGenerator<T5>::iterator current5_;
 
15411     const typename ParamGenerator<T6>::iterator begin6_;
 
15412     const typename ParamGenerator<T6>::iterator end6_;
 
15413     typename ParamGenerator<T6>::iterator current6_;
 
15414     const typename ParamGenerator<T7>::iterator begin7_;
 
15415     const typename ParamGenerator<T7>::iterator end7_;
 
15416     typename ParamGenerator<T7>::iterator current7_;
 
15417     const typename ParamGenerator<T8>::iterator begin8_;
 
15418     const typename ParamGenerator<T8>::iterator end8_;
 
15419     typename ParamGenerator<T8>::iterator current8_;
 
15420     const typename ParamGenerator<T9>::iterator begin9_;
 
15421     const typename ParamGenerator<T9>::iterator end9_;
 
15422     typename ParamGenerator<T9>::iterator current9_;
 
15423     const typename ParamGenerator<T10>::iterator begin10_;
 
15424     const typename ParamGenerator<T10>::iterator end10_;
 
15425     typename ParamGenerator<T10>::iterator current10_;
 
15426     ParamType current_value_;
 
15430   void operator=(
const CartesianProductGenerator10& other);
 
15432   const ParamGenerator<T1> g1_;
 
15433   const ParamGenerator<T2> g2_;
 
15434   const ParamGenerator<T3> g3_;
 
15435   const ParamGenerator<T4> g4_;
 
15436   const ParamGenerator<T5> g5_;
 
15437   const ParamGenerator<T6> g6_;
 
15438   const ParamGenerator<T7> g7_;
 
15439   const ParamGenerator<T8> g8_;
 
15440   const ParamGenerator<T9> g9_;
 
15441   const ParamGenerator<T10> g10_;
 
15451 template <
class Generator1, 
class Generator2>
 
15452 class CartesianProductHolder2 {
 
15454 CartesianProductHolder2(
const Generator1& g1, 
const Generator2& g2)
 
15455       : g1_(g1), g2_(g2) {}
 
15456   template <
typename T1, 
typename T2>
 
15457   operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() 
const {
 
15458     return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
 
15459         new CartesianProductGenerator2<T1, T2>(
 
15460         static_cast<ParamGenerator<T1> 
>(g1_),
 
15461         static_cast<ParamGenerator<T2> 
>(g2_)));
 
15466   void operator=(
const CartesianProductHolder2& other);
 
15468   const Generator1 g1_;
 
15469   const Generator2 g2_;
 
15472 template <
class Generator1, 
class Generator2, 
class Generator3>
 
15473 class CartesianProductHolder3 {
 
15475 CartesianProductHolder3(
const Generator1& g1, 
const Generator2& g2,
 
15476     const Generator3& g3)
 
15477       : g1_(g1), g2_(g2), g3_(g3) {}
 
15478   template <
typename T1, 
typename T2, 
typename T3>
 
15479   operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() 
const {
 
15480     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
 
15481         new CartesianProductGenerator3<T1, T2, T3>(
 
15482         static_cast<ParamGenerator<T1> 
>(g1_),
 
15483         static_cast<ParamGenerator<T2> 
>(g2_),
 
15484         static_cast<ParamGenerator<T3> 
>(g3_)));
 
15489   void operator=(
const CartesianProductHolder3& other);
 
15491   const Generator1 g1_;
 
15492   const Generator2 g2_;
 
15493   const Generator3 g3_;
 
15496 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15498 class CartesianProductHolder4 {
 
15500 CartesianProductHolder4(
const Generator1& g1, 
const Generator2& g2,
 
15501     const Generator3& g3, 
const Generator4& g4)
 
15502       : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
 
15503   template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
15504   operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() 
const {
 
15505     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
 
15506         new CartesianProductGenerator4<T1, T2, T3, T4>(
 
15507         static_cast<ParamGenerator<T1> 
>(g1_),
 
15508         static_cast<ParamGenerator<T2> 
>(g2_),
 
15509         static_cast<ParamGenerator<T3> 
>(g3_),
 
15510         static_cast<ParamGenerator<T4> 
>(g4_)));
 
15515   void operator=(
const CartesianProductHolder4& other);
 
15517   const Generator1 g1_;
 
15518   const Generator2 g2_;
 
15519   const Generator3 g3_;
 
15520   const Generator4 g4_;
 
15523 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15524     class Generator4, 
class Generator5>
 
15525 class CartesianProductHolder5 {
 
15527 CartesianProductHolder5(
const Generator1& g1, 
const Generator2& g2,
 
15528     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5)
 
15529       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
 
15530   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
15531   operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() 
const {
 
15532     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
 
15533         new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
 
15534         static_cast<ParamGenerator<T1> 
>(g1_),
 
15535         static_cast<ParamGenerator<T2> 
>(g2_),
 
15536         static_cast<ParamGenerator<T3> 
>(g3_),
 
15537         static_cast<ParamGenerator<T4> 
>(g4_),
 
15538         static_cast<ParamGenerator<T5> 
>(g5_)));
 
15543   void operator=(
const CartesianProductHolder5& other);
 
15545   const Generator1 g1_;
 
15546   const Generator2 g2_;
 
15547   const Generator3 g3_;
 
15548   const Generator4 g4_;
 
15549   const Generator5 g5_;
 
15552 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15553     class Generator4, 
class Generator5, 
class Generator6>
 
15554 class CartesianProductHolder6 {
 
15556 CartesianProductHolder6(
const Generator1& g1, 
const Generator2& g2,
 
15557     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5,
 
15558     const Generator6& g6)
 
15559       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
 
15560   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15562   operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() 
const {
 
15563     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
 
15564         new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
 
15565         static_cast<ParamGenerator<T1> 
>(g1_),
 
15566         static_cast<ParamGenerator<T2> 
>(g2_),
 
15567         static_cast<ParamGenerator<T3> 
>(g3_),
 
15568         static_cast<ParamGenerator<T4> 
>(g4_),
 
15569         static_cast<ParamGenerator<T5> 
>(g5_),
 
15570         static_cast<ParamGenerator<T6> 
>(g6_)));
 
15575   void operator=(
const CartesianProductHolder6& other);
 
15577   const Generator1 g1_;
 
15578   const Generator2 g2_;
 
15579   const Generator3 g3_;
 
15580   const Generator4 g4_;
 
15581   const Generator5 g5_;
 
15582   const Generator6 g6_;
 
15585 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15586     class Generator4, 
class Generator5, 
class Generator6, 
class Generator7>
 
15587 class CartesianProductHolder7 {
 
15589 CartesianProductHolder7(
const Generator1& g1, 
const Generator2& g2,
 
15590     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5,
 
15591     const Generator6& g6, 
const Generator7& g7)
 
15592       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
 
15593   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15594       typename T6, 
typename T7>
 
15597     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
 
15598         new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
 
15599         static_cast<ParamGenerator<T1> 
>(g1_),
 
15600         static_cast<ParamGenerator<T2> 
>(g2_),
 
15601         static_cast<ParamGenerator<T3> 
>(g3_),
 
15602         static_cast<ParamGenerator<T4> 
>(g4_),
 
15603         static_cast<ParamGenerator<T5> 
>(g5_),
 
15604         static_cast<ParamGenerator<T6> 
>(g6_),
 
15605         static_cast<ParamGenerator<T7> 
>(g7_)));
 
15610   void operator=(
const CartesianProductHolder7& other);
 
15612   const Generator1 g1_;
 
15613   const Generator2 g2_;
 
15614   const Generator3 g3_;
 
15615   const Generator4 g4_;
 
15616   const Generator5 g5_;
 
15617   const Generator6 g6_;
 
15618   const Generator7 g7_;
 
15621 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15622     class Generator4, 
class Generator5, 
class Generator6, 
class Generator7,
 
15624 class CartesianProductHolder8 {
 
15626 CartesianProductHolder8(
const Generator1& g1, 
const Generator2& g2,
 
15627     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5,
 
15628     const Generator6& g6, 
const Generator7& g7, 
const Generator8& g8)
 
15629       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
 
15631   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15632       typename T6, 
typename T7, 
typename T8>
 
15635     return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
 
15636         new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
 
15637         static_cast<ParamGenerator<T1> 
>(g1_),
 
15638         static_cast<ParamGenerator<T2> 
>(g2_),
 
15639         static_cast<ParamGenerator<T3> 
>(g3_),
 
15640         static_cast<ParamGenerator<T4> 
>(g4_),
 
15641         static_cast<ParamGenerator<T5> 
>(g5_),
 
15642         static_cast<ParamGenerator<T6> 
>(g6_),
 
15643         static_cast<ParamGenerator<T7> 
>(g7_),
 
15644         static_cast<ParamGenerator<T8> 
>(g8_)));
 
15649   void operator=(
const CartesianProductHolder8& other);
 
15651   const Generator1 g1_;
 
15652   const Generator2 g2_;
 
15653   const Generator3 g3_;
 
15654   const Generator4 g4_;
 
15655   const Generator5 g5_;
 
15656   const Generator6 g6_;
 
15657   const Generator7 g7_;
 
15658   const Generator8 g8_;
 
15661 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15662     class Generator4, 
class Generator5, 
class Generator6, 
class Generator7,
 
15663     class Generator8, 
class Generator9>
 
15664 class CartesianProductHolder9 {
 
15666 CartesianProductHolder9(
const Generator1& g1, 
const Generator2& g2,
 
15667     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5,
 
15668     const Generator6& g6, 
const Generator7& g7, 
const Generator8& g8,
 
15669     const Generator9& g9)
 
15670       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
 
15672   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15673       typename T6, 
typename T7, 
typename T8, 
typename T9>
 
15678         new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
 
15679         static_cast<ParamGenerator<T1> 
>(g1_),
 
15680         static_cast<ParamGenerator<T2> 
>(g2_),
 
15681         static_cast<ParamGenerator<T3> 
>(g3_),
 
15682         static_cast<ParamGenerator<T4> 
>(g4_),
 
15683         static_cast<ParamGenerator<T5> 
>(g5_),
 
15684         static_cast<ParamGenerator<T6> 
>(g6_),
 
15685         static_cast<ParamGenerator<T7> 
>(g7_),
 
15686         static_cast<ParamGenerator<T8> 
>(g8_),
 
15687         static_cast<ParamGenerator<T9> 
>(g9_)));
 
15692   void operator=(
const CartesianProductHolder9& other);
 
15694   const Generator1 g1_;
 
15695   const Generator2 g2_;
 
15696   const Generator3 g3_;
 
15697   const Generator4 g4_;
 
15698   const Generator5 g5_;
 
15699   const Generator6 g6_;
 
15700   const Generator7 g7_;
 
15701   const Generator8 g8_;
 
15702   const Generator9 g9_;
 
15705 template <
class Generator1, 
class Generator2, 
class Generator3,
 
15706     class Generator4, 
class Generator5, 
class Generator6, 
class Generator7,
 
15707     class Generator8, 
class Generator9, 
class Generator10>
 
15708 class CartesianProductHolder10 {
 
15710 CartesianProductHolder10(
const Generator1& g1, 
const Generator2& g2,
 
15711     const Generator3& g3, 
const Generator4& g4, 
const Generator5& g5,
 
15712     const Generator6& g6, 
const Generator7& g7, 
const Generator8& g8,
 
15713     const Generator9& g9, 
const Generator10& g10)
 
15714       : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
 
15715           g9_(g9), g10_(g10) {}
 
15716   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15717       typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
15719       T9, T10> >() 
const {
 
15722         new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
 
15724         static_cast<ParamGenerator<T1> 
>(g1_),
 
15725         static_cast<ParamGenerator<T2> 
>(g2_),
 
15726         static_cast<ParamGenerator<T3> 
>(g3_),
 
15727         static_cast<ParamGenerator<T4> 
>(g4_),
 
15728         static_cast<ParamGenerator<T5> 
>(g5_),
 
15729         static_cast<ParamGenerator<T6> 
>(g6_),
 
15730         static_cast<ParamGenerator<T7> 
>(g7_),
 
15731         static_cast<ParamGenerator<T8> 
>(g8_),
 
15732         static_cast<ParamGenerator<T9> 
>(g9_),
 
15733         static_cast<ParamGenerator<T10> 
>(g10_)));
 
15738   void operator=(
const CartesianProductHolder10& other);
 
15740   const Generator1 g1_;
 
15741   const Generator2 g2_;
 
15742   const Generator3 g3_;
 
15743   const Generator4 g4_;
 
15744   const Generator5 g5_;
 
15745   const Generator6 g6_;
 
15746   const Generator7 g7_;
 
15747   const Generator8 g8_;
 
15748   const Generator9 g9_;
 
15749   const Generator10 g10_;
 
15752 # endif  // GTEST_HAS_COMBINE 
15757 #endif  //  GTEST_HAS_PARAM_TEST 
15759 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 
15761 #if GTEST_HAS_PARAM_TEST 
15807 template <
typename T, 
typename IncrementT>
 
15813 template <
typename T>
 
15873 template <
typename ForwardIterator>
 
15874 internal::ParamGenerator<
 
15875   typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
 
15877   typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
 
15878       ::value_type ParamType;
 
15883 template <
typename T, 
size_t N>
 
15888 template <
class Container>
 
15890     const Container& container) {
 
15891   return ValuesIn(container.begin(), container.end());
 
15913 template <
typename T1>
 
15918 template <
typename T1, 
typename T2>
 
15923 template <
typename T1, 
typename T2, 
typename T3>
 
15928 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
15933 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
15939 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15942     T4 v4, T5 v5, T6 v6) {
 
15943   return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
 
15946 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15947     typename T6, 
typename T7>
 
15949     T4 v4, T5 v5, T6 v6, T7 v7) {
 
15950   return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
 
15954 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15955     typename T6, 
typename T7, 
typename T8>
 
15957     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
 
15958   return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
 
15962 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15963     typename T6, 
typename T7, 
typename T8, 
typename T9>
 
15964 internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,
 
15965     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
 
15966   return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
 
15967       v4, v5, v6, v7, v8, v9);
 
15970 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15971     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10>
 
15972 internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,
 
15973     T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
 
15974   return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
 
15975       v2, v3, v4, v5, v6, v7, v8, v9, v10);
 
15978 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15979     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
15981 internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
 
15982     T11> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
15983     T10 v10, T11 v11) {
 
15984   return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
 
15985       T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
 
15988 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15989     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
15990     typename T11, 
typename T12>
 
15991 internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
15992     T12> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
15993     T10 v10, T11 v11, T12 v12) {
 
15994   return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
15995       T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
 
15998 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
15999     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16000     typename T11, 
typename T12, 
typename T13>
 
16001 internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 
16002     T13> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16003     T10 v10, T11 v11, T12 v12, T13 v13) {
 
16004   return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16005       T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
 
16008 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16009     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16010     typename T11, 
typename T12, 
typename T13, 
typename T14>
 
16011 internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16012     T14> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16013     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
 
16014   return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16015       T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
 
16019 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16020     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16021     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15>
 
16022 internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16023     T14, T15> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
 
16024     T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
 
16025   return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16026       T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
 
16030 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16031     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16032     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16034 internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16035     T14, T15, T16> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16036     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16038   return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16039       T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
 
16040       v12, v13, v14, v15, v16);
 
16043 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16044     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16045     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16046     typename T16, 
typename T17>
 
16047 internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16048     T14, T15, T16, T17> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16049     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16050     T16 v16, T17 v17) {
 
16051   return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16052       T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
 
16053       v11, v12, v13, v14, v15, v16, v17);
 
16056 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16057     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16058     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16059     typename T16, 
typename T17, 
typename T18>
 
16060 internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16061     T14, T15, T16, T17, T18> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
 
16062     T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16063     T16 v16, T17 v17, T18 v18) {
 
16064   return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16065       T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
 
16066       v10, v11, v12, v13, v14, v15, v16, v17, v18);
 
16069 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16070     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16071     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16072     typename T16, 
typename T17, 
typename T18, 
typename T19>
 
16073 internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16074     T14, T15, T16, T17, T18, T19> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
 
16075     T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
 
16076     T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
 
16077   return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16078       T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
 
16079       v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
 
16082 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16083     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16084     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16085     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20>
 
16086 internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16087     T14, T15, T16, T17, T18, T19, T20> 
Values(T1 v1, T2 v2, T3 v3, T4 v4,
 
16088     T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
 
16089     T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
 
16090   return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16091       T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
 
16092       v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
 
16095 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16096     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16097     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16098     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16100 internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16101     T14, T15, T16, T17, T18, T19, T20, T21> 
Values(T1 v1, T2 v2, T3 v3, T4 v4,
 
16102     T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
 
16103     T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
 
16104   return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16105       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
 
16106       v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
 
16109 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16110     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16111     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16112     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16113     typename T21, 
typename T22>
 
16114 internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16115     T14, T15, T16, T17, T18, T19, T20, T21, T22> 
Values(T1 v1, T2 v2, T3 v3,
 
16116     T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16117     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16118     T21 v21, T22 v22) {
 
16119   return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16120       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
 
16121       v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
 
16125 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16126     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16127     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16128     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16129     typename T21, 
typename T22, 
typename T23>
 
16130 internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16131     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> 
Values(T1 v1, T2 v2,
 
16132     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16133     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16134     T21 v21, T22 v22, T23 v23) {
 
16135   return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16136       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
 
16137       v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
 
16138       v20, v21, v22, v23);
 
16141 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16142     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16143     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16144     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16145     typename T21, 
typename T22, 
typename T23, 
typename T24>
 
16146 internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16147     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> 
Values(T1 v1, T2 v2,
 
16148     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16149     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16150     T21 v21, T22 v22, T23 v23, T24 v24) {
 
16151   return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16152       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
 
16153       v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
 
16154       v19, v20, v21, v22, v23, v24);
 
16157 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16158     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16159     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16160     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16161     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25>
 
16162 internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16163     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> 
Values(T1 v1,
 
16164     T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
 
16165     T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
 
16166     T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
 
16167   return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16168       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
 
16169       v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
 
16170       v18, v19, v20, v21, v22, v23, v24, v25);
 
16173 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16174     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16175     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16176     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16177     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16179 internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16180     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16181     T26> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16182     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16183     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16185   return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16186       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16187       T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
 
16188       v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
 
16191 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16192     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16193     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16194     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16195     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16196     typename T26, 
typename T27>
 
16197 internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16198     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 
16199     T27> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16200     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16201     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16202     T26 v26, T27 v27) {
 
16203   return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16204       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16205       T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
 
16206       v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
 
16209 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16210     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16211     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16212     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16213     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16214     typename T26, 
typename T27, 
typename T28>
 
16215 internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16216     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
 
16217     T28> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16218     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16219     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16220     T26 v26, T27 v27, T28 v28) {
 
16221   return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16222       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16223       T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
 
16224       v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
 
16228 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16229     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16230     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16231     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16232     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16233     typename T26, 
typename T27, 
typename T28, 
typename T29>
 
16234 internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16235     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16236     T29> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16237     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16238     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16239     T26 v26, T27 v27, T28 v28, T29 v29) {
 
16240   return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16241       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16242       T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
 
16243       v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
 
16247 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16248     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16249     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16250     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16251     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16252     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30>
 
16253 internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16254     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16255     T29, T30> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
 
16256     T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
 
16257     T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
 
16258     T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
 
16259   return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16260       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16261       T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
 
16262       v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
 
16263       v26, v27, v28, v29, v30);
 
16266 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16267     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16268     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16269     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16270     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16271     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16273 internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16274     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16275     T29, T30, T31> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16276     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16277     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16278     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
 
16279   return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16280       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16281       T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
 
16282       v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
 
16283       v25, v26, v27, v28, v29, v30, v31);
 
16286 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16287     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16288     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16289     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16290     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16291     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16292     typename T31, 
typename T32>
 
16293 internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16294     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16295     T29, T30, T31, T32> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16296     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16297     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16298     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
 
16300   return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16301       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16302       T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
 
16303       v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
 
16304       v24, v25, v26, v27, v28, v29, v30, v31, v32);
 
16307 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16308     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16309     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16310     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16311     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16312     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16313     typename T31, 
typename T32, 
typename T33>
 
16314 internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16315     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16316     T29, T30, T31, T32, T33> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
 
16317     T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16318     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16319     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
 
16320     T32 v32, T33 v33) {
 
16321   return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16322       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16323       T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
 
16324       v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
 
16325       v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
 
16328 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16329     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16330     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16331     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16332     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16333     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16334     typename T31, 
typename T32, 
typename T33, 
typename T34>
 
16335 internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16336     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16337     T29, T30, T31, T32, T33, T34> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
 
16338     T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
 
16339     T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
 
16340     T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
 
16341     T31 v31, T32 v32, T33 v33, T34 v34) {
 
16342   return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16343       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16344       T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
 
16345       v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
 
16346       v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
 
16349 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16350     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16351     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16352     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16353     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16354     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16355     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35>
 
16356 internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16357     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16358     T29, T30, T31, T32, T33, T34, T35> 
Values(T1 v1, T2 v2, T3 v3, T4 v4,
 
16359     T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
 
16360     T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
 
16361     T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
 
16362     T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
 
16363   return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16364       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16365       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
 
16366       v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
 
16367       v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
 
16370 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16371     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16372     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16373     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16374     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16375     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16376     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16378 internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16379     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16380     T29, T30, T31, T32, T33, T34, T35, T36> 
Values(T1 v1, T2 v2, T3 v3, T4 v4,
 
16381     T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
 
16382     T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
 
16383     T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
 
16384     T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
 
16385   return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16386       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16387       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
 
16388       v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
 
16389       v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
 
16393 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16394     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16395     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16396     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16397     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16398     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16399     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16400     typename T36, 
typename T37>
 
16401 internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16402     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16403     T29, T30, T31, T32, T33, T34, T35, T36, T37> 
Values(T1 v1, T2 v2, T3 v3,
 
16404     T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16405     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16406     T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
 
16407     T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
 
16409   return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16410       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16411       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
 
16412       v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
 
16413       v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
 
16414       v34, v35, v36, v37);
 
16417 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16418     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16419     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16420     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16421     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16422     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16423     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16424     typename T36, 
typename T37, 
typename T38>
 
16425 internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16426     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16427     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> 
Values(T1 v1, T2 v2,
 
16428     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16429     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16430     T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
 
16431     T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
 
16432     T37 v37, T38 v38) {
 
16433   return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16434       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16435       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
 
16436       v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
 
16437       v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
 
16438       v33, v34, v35, v36, v37, v38);
 
16441 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16442     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16443     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16444     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16445     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16446     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16447     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16448     typename T36, 
typename T37, 
typename T38, 
typename T39>
 
16449 internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16450     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16451     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> 
Values(T1 v1, T2 v2,
 
16452     T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
 
16453     T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
 
16454     T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
 
16455     T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
 
16456     T37 v37, T38 v38, T39 v39) {
 
16457   return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16458       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16459       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
 
16460       v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
 
16461       v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
 
16462       v32, v33, v34, v35, v36, v37, v38, v39);
 
16465 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16466     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16467     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16468     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16469     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16470     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16471     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16472     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40>
 
16473 internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16474     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16475     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> 
Values(T1 v1,
 
16476     T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
 
16477     T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
 
16478     T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
 
16479     T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
 
16480     T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
 
16481   return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16482       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16483       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16484       T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
 
16485       v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
 
16486       v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
 
16489 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16490     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16491     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16492     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16493     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16494     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16495     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16496     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16498 internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16499     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16500     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 
16501     T41> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16502     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16503     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16504     T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
16505     T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
 
16506   return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16507       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16508       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16509       T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
 
16510       v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
 
16511       v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
 
16514 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16515     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16516     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16517     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16518     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16519     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16520     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16521     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16522     typename T41, 
typename T42>
 
16523 internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16524     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16525     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
 
16526     T42> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16527     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16528     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16529     T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
16530     T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
16532   return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16533       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16534       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16535       T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
 
16536       v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
 
16537       v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
 
16541 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16542     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16543     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16544     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16545     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16546     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16547     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16548     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16549     typename T41, 
typename T42, 
typename T43>
 
16550 internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16551     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16552     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 
16553     T43> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16554     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16555     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16556     T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
16557     T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
16558     T42 v42, T43 v43) {
 
16559   return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16560       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16561       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16562       T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
 
16563       v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
 
16564       v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
 
16568 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16569     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16570     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16571     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16572     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16573     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16574     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16575     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16576     typename T41, 
typename T42, 
typename T43, 
typename T44>
 
16577 internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16578     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16579     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16580     T44> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
 
16581     T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
 
16582     T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
 
16583     T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
 
16584     T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
 
16585     T42 v42, T43 v43, T44 v44) {
 
16586   return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16587       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16588       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16589       T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
 
16590       v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
 
16591       v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
 
16592       v40, v41, v42, v43, v44);
 
16595 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16596     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16597     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16598     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16599     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16600     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16601     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16602     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16603     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45>
 
16604 internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16605     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16606     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16607     T44, T45> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
 
16608     T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
 
16609     T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
 
16610     T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
 
16611     T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
 
16612     T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
 
16613   return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16614       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16615       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16616       T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
 
16617       v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
 
16618       v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
 
16619       v39, v40, v41, v42, v43, v44, v45);
 
16622 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16623     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16624     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16625     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16626     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16627     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16628     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16629     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16630     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
16632 internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16633     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16634     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16635     T44, T45, T46> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16636     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16637     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16638     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
 
16639     T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
 
16640     T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
 
16641   return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16642       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16643       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16644       T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
 
16645       v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
 
16646       v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
 
16647       v38, v39, v40, v41, v42, v43, v44, v45, v46);
 
16650 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16651     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16652     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16653     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16654     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16655     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16656     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16657     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16658     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
16659     typename T46, 
typename T47>
 
16660 internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16661     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16662     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16663     T44, T45, T46, T47> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
 
16664     T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16665     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16666     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
 
16667     T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
 
16668     T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
 
16669   return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16670       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16671       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16672       T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
 
16673       v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
 
16674       v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
 
16675       v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
 
16678 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16679     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16680     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16681     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16682     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16683     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16684     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16685     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16686     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
16687     typename T46, 
typename T47, 
typename T48>
 
16688 internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16689     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16690     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16691     T44, T45, T46, T47, T48> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
 
16692     T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
 
16693     T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
 
16694     T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
 
16695     T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
 
16696     T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
 
16698   return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16699       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16700       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16701       T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
 
16702       v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
 
16703       v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
 
16704       v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
 
16707 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16708     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16709     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16710     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16711     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16712     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16713     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16714     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16715     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
16716     typename T46, 
typename T47, 
typename T48, 
typename T49>
 
16717 internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16718     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16719     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16720     T44, T45, T46, T47, T48, T49> 
Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
 
16721     T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
 
16722     T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
 
16723     T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
 
16724     T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
 
16725     T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
 
16726     T47 v47, T48 v48, T49 v49) {
 
16727   return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16728       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16729       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16730       T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
 
16731       v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
 
16732       v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
 
16733       v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
 
16736 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5,
 
16737     typename T6, 
typename T7, 
typename T8, 
typename T9, 
typename T10,
 
16738     typename T11, 
typename T12, 
typename T13, 
typename T14, 
typename T15,
 
16739     typename T16, 
typename T17, 
typename T18, 
typename T19, 
typename T20,
 
16740     typename T21, 
typename T22, 
typename T23, 
typename T24, 
typename T25,
 
16741     typename T26, 
typename T27, 
typename T28, 
typename T29, 
typename T30,
 
16742     typename T31, 
typename T32, 
typename T33, 
typename T34, 
typename T35,
 
16743     typename T36, 
typename T37, 
typename T38, 
typename T39, 
typename T40,
 
16744     typename T41, 
typename T42, 
typename T43, 
typename T44, 
typename T45,
 
16745     typename T46, 
typename T47, 
typename T48, 
typename T49, 
typename T50>
 
16746 internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 
16747     T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 
16748     T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 
16749     T44, T45, T46, T47, T48, T49, T50> 
Values(T1 v1, T2 v2, T3 v3, T4 v4,
 
16750     T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
 
16751     T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
 
16752     T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
 
16753     T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
 
16754     T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
 
16755     T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
 
16756   return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 
16757       T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
 
16758       T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
 
16759       T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
 
16760       v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
 
16761       v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
 
16762       v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
 
16787   return Values(
false, 
true);
 
16790 # if GTEST_HAS_COMBINE 
16839 template <
typename Generator1, 
typename Generator2>
 
16840 internal::CartesianProductHolder2<Generator1, Generator2> Combine(
 
16841     const Generator1& g1, 
const Generator2& g2) {
 
16842   return internal::CartesianProductHolder2<Generator1, Generator2>(
 
16846 template <
typename Generator1, 
typename Generator2, 
typename Generator3>
 
16847 internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(
 
16848     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3) {
 
16849   return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
 
16853 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16854     typename Generator4>
 
16855 internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
 
16856     Generator4> Combine(
 
16857     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16858         const Generator4& g4) {
 
16859   return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
 
16864 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16865     typename Generator4, 
typename Generator5>
 
16866 internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
 
16867     Generator4, Generator5> Combine(
 
16868     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16869         const Generator4& g4, 
const Generator5& g5) {
 
16870   return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
 
16871       Generator4, Generator5>(
 
16872       g1, g2, g3, g4, g5);
 
16875 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16876     typename Generator4, 
typename Generator5, 
typename Generator6>
 
16877 internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
 
16878     Generator4, Generator5, Generator6> Combine(
 
16879     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16880         const Generator4& g4, 
const Generator5& g5, 
const Generator6& g6) {
 
16881   return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
 
16882       Generator4, Generator5, Generator6>(
 
16883       g1, g2, g3, g4, g5, g6);
 
16886 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16887     typename Generator4, 
typename Generator5, 
typename Generator6,
 
16888     typename Generator7>
 
16889 internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
 
16890     Generator4, Generator5, Generator6, Generator7> Combine(
 
16891     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16892         const Generator4& g4, 
const Generator5& g5, 
const Generator6& g6,
 
16893         const Generator7& g7) {
 
16894   return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
 
16895       Generator4, Generator5, Generator6, Generator7>(
 
16896       g1, g2, g3, g4, g5, g6, g7);
 
16899 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16900     typename Generator4, 
typename Generator5, 
typename Generator6,
 
16901     typename Generator7, 
typename Generator8>
 
16902 internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
 
16903     Generator4, Generator5, Generator6, Generator7, Generator8> Combine(
 
16904     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16905         const Generator4& g4, 
const Generator5& g5, 
const Generator6& g6,
 
16906         const Generator7& g7, 
const Generator8& g8) {
 
16907   return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
 
16908       Generator4, Generator5, Generator6, Generator7, Generator8>(
 
16909       g1, g2, g3, g4, g5, g6, g7, g8);
 
16912 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16913     typename Generator4, 
typename Generator5, 
typename Generator6,
 
16914     typename Generator7, 
typename Generator8, 
typename Generator9>
 
16915 internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
 
16916     Generator4, Generator5, Generator6, Generator7, Generator8,
 
16917     Generator9> Combine(
 
16918     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16919         const Generator4& g4, 
const Generator5& g5, 
const Generator6& g6,
 
16920         const Generator7& g7, 
const Generator8& g8, 
const Generator9& g9) {
 
16921   return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
 
16922       Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
 
16923       g1, g2, g3, g4, g5, g6, g7, g8, g9);
 
16926 template <
typename Generator1, 
typename Generator2, 
typename Generator3,
 
16927     typename Generator4, 
typename Generator5, 
typename Generator6,
 
16928     typename Generator7, 
typename Generator8, 
typename Generator9,
 
16929     typename Generator10>
 
16930 internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
 
16931     Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
 
16932     Generator10> Combine(
 
16933     const Generator1& g1, 
const Generator2& g2, 
const Generator3& g3,
 
16934         const Generator4& g4, 
const Generator5& g5, 
const Generator6& g6,
 
16935         const Generator7& g7, 
const Generator8& g8, 
const Generator9& g9,
 
16936         const Generator10& g10) {
 
16937   return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
 
16938       Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
 
16940       g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
 
16942 # endif  // GTEST_HAS_COMBINE 
16946 # define TEST_P(test_case_name, test_name) \ 
16947   class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ 
16948       : public test_case_name { \ 
16950     GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ 
16951     virtual void TestBody(); \ 
16953     static int AddToRegistry() { \ 
16954       ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 
16955           GetTestCasePatternHolder<test_case_name>(\ 
16956               #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ 
16959                   new ::testing::internal::TestMetaFactory< \ 
16960                       GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ 
16963     static int gtest_registering_dummy_; \ 
16964     GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 
16965         GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ 
16967   int GTEST_TEST_CLASS_NAME_(test_case_name, \ 
16968                              test_name)::gtest_registering_dummy_ = \ 
16969       GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ 
16970   void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() 
16972 # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ 
16973   ::testing::internal::ParamGenerator<test_case_name::ParamType> \ 
16974       gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ 
16975   int gtest_##prefix##test_case_name##_dummy_ = \ 
16976       ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 
16977           GetTestCasePatternHolder<test_case_name>(\ 
16978               #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ 
16980                   >est_##prefix##test_case_name##_EvalGenerator_, \ 
16981                   __FILE__, __LINE__) 
16985 #endif  // GTEST_HAS_PARAM_TEST 
16987 #endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 
17021 #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 
17022 #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 
17042 #define FRIEND_TEST(test_case_name, test_name)\ 
17043 friend class test_case_name##_##test_name##_Test 
17045 #endif  // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 
17078 #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 
17079 #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 
17104                  const char* a_file_name,
 
17106                  const char* a_message)
 
17108         file_name_(a_file_name == NULL ? 
"" : a_file_name),
 
17109         line_number_(a_line_number),
 
17110         summary_(ExtractSummary(a_message)),
 
17111         message_(a_message) {
 
17120     return file_name_.empty() ? NULL : file_name_.c_str();
 
17128   const char* 
summary()
 const { 
return summary_.c_str(); }
 
17131   const char* 
message()
 const { 
return message_.c_str(); }
 
17134   bool passed()
 const { 
return type_ == kSuccess; }
 
17137   bool failed()
 const { 
return type_ != kSuccess; }
 
17150   static std::string ExtractSummary(
const char* message);
 
17193   virtual void ReportTestPartResult(
const TestPartResult& result) = 0;
 
17196 namespace internal {
 
17209   virtual void ReportTestPartResult(
const TestPartResult& result);
 
17222 #endif  // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 
17254 #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 
17255 #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 
17267 template <
typename T>
 
17271   typedef std::list<T> List;
 
17279 typedef testing::Types<char, int, unsigned int> MyTypes;
 
17280 TYPED_TEST_CASE(FooTest, MyTypes);
 
17288 TYPED_TEST(FooTest, DoesBlah) {
 
17292   TypeParam n = this->value_;
 
17296   n += TestFixture::shared_;
 
17300   typename TestFixture::List values;
 
17301   values.push_back(n);
 
17305 TYPED_TEST(FooTest, HasPropertyA) { ... }
 
17327 template <
typename T>
 
17335 TYPED_TEST_CASE_P(FooTest);
 
17339 TYPED_TEST_P(FooTest, DoesBlah) {
 
17345 TYPED_TEST_P(FooTest, HasPropertyA) { ... }
 
17351 REGISTER_TYPED_TEST_CASE_P(FooTest,
 
17352                            DoesBlah, HasPropertyA);
 
17362 typedef testing::Types<char, int, unsigned int> MyTypes;
 
17363 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
 
17374 #if GTEST_HAS_TYPED_TEST 
17380 # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ 
17385 # define TYPED_TEST_CASE(CaseName, Types) \ 
17386   typedef ::testing::internal::TypeList< Types >::type \ 
17387       GTEST_TYPE_PARAMS_(CaseName) 
17389 # define TYPED_TEST(CaseName, TestName) \ 
17390   template <typename gtest_TypeParam_> \ 
17391   class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ 
17392       : public CaseName<gtest_TypeParam_> { \ 
17394     typedef CaseName<gtest_TypeParam_> TestFixture; \ 
17395     typedef gtest_TypeParam_ TypeParam; \ 
17396     virtual void TestBody(); \ 
17398   bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ 
17399       ::testing::internal::TypeParameterizedTest< \ 
17401           ::testing::internal::TemplateSel< \ 
17402               GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ 
17403           GTEST_TYPE_PARAMS_(CaseName)>::Register(\ 
17404               "", #CaseName, #TestName, 0); \ 
17405   template <typename gtest_TypeParam_> \ 
17406   void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody() 
17408 #endif  // GTEST_HAS_TYPED_TEST 
17412 #if GTEST_HAS_TYPED_TEST_P 
17419 # define GTEST_CASE_NAMESPACE_(TestCaseName) \ 
17420   gtest_case_##TestCaseName##_ 
17426 # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ 
17427   gtest_typed_test_case_p_state_##TestCaseName##_ 
17433 # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ 
17434   gtest_registered_test_names_##TestCaseName##_ 
17439 # define TYPED_TEST_CASE_P(CaseName) \ 
17440   static ::testing::internal::TypedTestCasePState \ 
17441       GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) 
17443 # define TYPED_TEST_P(CaseName, TestName) \ 
17444   namespace GTEST_CASE_NAMESPACE_(CaseName) { \ 
17445   template <typename gtest_TypeParam_> \ 
17446   class TestName : public CaseName<gtest_TypeParam_> { \ 
17448     typedef CaseName<gtest_TypeParam_> TestFixture; \ 
17449     typedef gtest_TypeParam_ TypeParam; \ 
17450     virtual void TestBody(); \ 
17452   static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ 
17453       GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ 
17454           __FILE__, __LINE__, #CaseName, #TestName); \ 
17456   template <typename gtest_TypeParam_> \ 
17457   void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody() 
17459 # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ 
17460   namespace GTEST_CASE_NAMESPACE_(CaseName) { \ 
17461   typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ 
17463   static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ 
17464       GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ 
17465           __FILE__, __LINE__, #__VA_ARGS__) 
17470 # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ 
17471   bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ 
17472       ::testing::internal::TypeParameterizedTestCase<CaseName, \ 
17473           GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \ 
17474           ::testing::internal::TypeList< Types >::type>::Register(\ 
17475               #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) 
17477 #endif  // GTEST_HAS_TYPED_TEST_P 
17479 #endif  // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 
17562 namespace internal {
 
17564 class AssertHelper;
 
17565 class DefaultGlobalTestPartResultReporter;
 
17566 class ExecDeathTest;
 
17567 class NoExecDeathTest;
 
17568 class FinalSuccessChecker;
 
17569 class GTestFlagSaver;
 
17570 class StreamingListenerTest;
 
17571 class TestResultAccessor;
 
17572 class TestEventListenersAccessor;
 
17573 class TestEventRepeater;
 
17574 class UnitTestRecordPropertyTestHelper;
 
17575 class WindowsDeathTest;
 
17678   operator bool()
 const { 
return success_; }  
 
17688     return message_.get() != NULL ?  message_->c_str() : 
"";
 
17696     AppendMessage(
Message() << value);
 
17703       ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
 
17704     AppendMessage(
Message() << basic_manipulator);
 
17711     if (message_.get() == NULL)
 
17713     message_->append(a_message.
GetString().c_str());
 
17789   static bool HasFatalFailure();
 
17792   static bool HasNonfatalFailure();
 
17796   static bool HasFailure() { 
return HasFatalFailure() || HasNonfatalFailure(); }
 
17812   static void RecordProperty(
const std::string& key, 
int value);
 
17819   virtual void SetUp();
 
17822   virtual void TearDown();
 
17827   static bool HasSameFixtureClass();
 
17835   virtual void TestBody() = 0;
 
17882     key_(a_key), value_(a_value) {
 
17887     return key_.c_str();
 
17892     return value_.c_str();
 
17897     value_ = new_value;
 
17923   int total_part_count() 
const;
 
17926   int test_property_count() 
const;
 
17932   bool Failed() 
const;
 
17935   bool HasFatalFailure() 
const;
 
17938   bool HasNonfatalFailure() 
const;
 
17958   friend class internal::ExecDeathTest;
 
17961   friend class internal::WindowsDeathTest;
 
17965     return test_part_results_;
 
17970     return test_properties_;
 
17982   void RecordProperty(
const std::string& xml_element,
 
17988   static bool ValidateTestProperty(
const std::string& xml_element,
 
18001   void ClearTestPartResults();
 
18049     if (type_param_.get() != NULL)
 
18050       return type_param_->c_str();
 
18057     if (value_param_.get() != NULL)
 
18058       return value_param_->c_str();
 
18085     return matches_filter_;
 
18092 #if GTEST_HAS_DEATH_TEST 
18093   friend class internal::DefaultDeathTestFactory;
 
18094 #endif  // GTEST_HAS_DEATH_TEST 
18098   friend class internal::StreamingListenerTest;
 
18100       const char* test_case_name,
 
18102       const char* type_param,
 
18103       const char* value_param,
 
18113            const char* a_type_param,   
 
18114            const char* a_value_param,  
 
18121     return result_.increment_death_test_count();
 
18173   TestCase(
const char* name, 
const char* a_type_param,
 
18186     if (type_param_.get() != NULL)
 
18187       return type_param_->c_str();
 
18195   int successful_test_count() 
const;
 
18198   int failed_test_count() 
const;
 
18201   int reportable_disabled_test_count() 
const;
 
18204   int disabled_test_count() 
const;
 
18207   int reportable_test_count() 
const;
 
18210   int test_to_run_count() 
const;
 
18213   int total_test_count() 
const;
 
18219   bool Failed()
 const { 
return failed_test_count() > 0; }
 
18226   const TestInfo* GetTestInfo(
int i) 
const;
 
18241     return test_info_list_;
 
18246   TestInfo* GetMutableTestInfo(
int i);
 
18253   void AddTestInfo(
TestInfo * test_info);
 
18256   void ClearResult();
 
18309   void UnshuffleTests();
 
18377   virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
 
18382   virtual void OnTestIterationStart(
const UnitTest& unit_test,
 
18383                                     int iteration) = 0;
 
18386   virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
 
18389   virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
 
18392   virtual void OnTestCaseStart(
const TestCase& test_case) = 0;
 
18395   virtual void OnTestStart(
const TestInfo& test_info) = 0;
 
18398   virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
 
18401   virtual void OnTestEnd(
const TestInfo& test_info) = 0;
 
18404   virtual void OnTestCaseEnd(
const TestCase& test_case) = 0;
 
18407   virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
 
18410   virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
 
18413   virtual void OnTestIterationEnd(
const UnitTest& unit_test,
 
18414                                   int iteration) = 0;
 
18417   virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
 
18466     return default_result_printer_;
 
18477     return default_xml_generator_;
 
18484   friend class internal::NoExecDeathTest;
 
18485   friend class internal::TestEventListenersAccessor;
 
18508   bool EventForwardingEnabled() 
const;
 
18509   void SuppressEventForwarding();
 
18549   const char* original_working_dir() 
const;
 
18553   const TestCase* current_test_case() 
const 
18558   const TestInfo* current_test_info() 
const 
18562   int random_seed() 
const;
 
18564 #if GTEST_HAS_PARAM_TEST 
18571 #endif  // GTEST_HAS_PARAM_TEST 
18574   int successful_test_case_count() 
const;
 
18577   int failed_test_case_count() 
const;
 
18580   int total_test_case_count() 
const;
 
18584   int test_case_to_run_count() 
const;
 
18587   int successful_test_count() 
const;
 
18590   int failed_test_count() 
const;
 
18593   int reportable_disabled_test_count() 
const;
 
18596   int disabled_test_count() 
const;
 
18599   int reportable_test_count() 
const;
 
18602   int total_test_count() 
const;
 
18605   int test_to_run_count() 
const;
 
18615   bool Passed() 
const;
 
18619   bool Failed() 
const;
 
18623   const TestCase* GetTestCase(
int i) 
const;
 
18627   const TestResult& ad_hoc_test_result() 
const;
 
18650                          const char* file_name,
 
18665   TestCase* GetMutableTestCase(
int i);
 
18676   friend class internal::StreamingListenerTest;
 
18677   friend class internal::UnitTestRecordPropertyTestHelper;
 
18696   void PopGTestTrace()
 
18701   mutable internal::Mutex mutex_;
 
18707   internal::UnitTestImpl* impl_;
 
18732   return UnitTest::GetInstance()->AddEnvironment(env);
 
18750 namespace internal {
 
18767 template <
typename ToPr
int, 
typename OtherOperand>
 
18776 template <
typename ToPr
int, 
size_t N, 
typename OtherOperand>
 
18787 #define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType)                \ 
18788   template <typename OtherOperand>                                      \ 
18789   class FormatForComparison<CharType*, OtherOperand> {                  \ 
18791     static ::std::string Format(CharType* value) {                      \ 
18792       return ::testing::PrintToString(static_cast<const void*>(value)); \ 
18801 #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ 
18806 #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ 
18808   class FormatForComparison<CharType*, OtherStringType> {               \ 
18810     static ::std::string Format(CharType* value) {                      \ 
18811       return ::testing::PrintToString(value);                           \ 
18818 #if GTEST_HAS_GLOBAL_STRING 
18823 #if GTEST_HAS_GLOBAL_WSTRING 
18828 #if GTEST_HAS_STD_WSTRING 
18833 #undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ 
18843 template <
typename T1, 
typename T2>
 
18845     const T1& value, 
const T2& ) {
 
18850 template <
typename T1, 
typename T2>
 
18852                             const char* actual_expression,
 
18853                             const T1& expected,
 
18854                             const T2& actual) {
 
18856 # pragma warning(push)          // Saves the current warning state. 
18857 # pragma warning(disable:4389)  // Temporarily disables warning on 
18861   if (expected == actual) {
 
18866 # pragma warning(pop)          // Restores the warning state. 
18880                                        const char* actual_expression,
 
18888 template <
bool lhs_is_null_literal>
 
18892   template <
typename T1, 
typename T2>
 
18894                                  const char* actual_expression,
 
18895                                  const T1& expected,
 
18896                                  const T2& actual) {
 
18897     return CmpHelperEQ(expected_expression, actual_expression, expected,
 
18908                                  const char* actual_expression,
 
18911     return CmpHelperEQ(expected_expression, actual_expression, expected,
 
18925   template <
typename T1, 
typename T2>
 
18927       const char* expected_expression,
 
18928       const char* actual_expression,
 
18929       const T1& expected,
 
18937     return CmpHelperEQ(expected_expression, actual_expression, expected,
 
18943   template <
typename T>
 
18945       const char* expected_expression,
 
18946       const char* actual_expression,
 
18956     return CmpHelperEQ(expected_expression, actual_expression,
 
18957                        static_cast<T*
>(NULL), actual);
 
18971 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 
18972 template <typename T1, typename T2>\ 
18973 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 
18974                                    const T1& val1, const T2& val2) {\ 
18975   if (val1 op val2) {\ 
18976     return AssertionSuccess();\ 
18978     return AssertionFailure() \ 
18979         << "Expected: (" << expr1 << ") " #op " (" << expr2\ 
18980         << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ 
18981         << " vs " << FormatForComparisonFailureMessage(val2, val1);\ 
18984 GTEST_API_ AssertionResult CmpHelper##op_name(\ 
18985     const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 
19000 #undef GTEST_IMPL_CMP_HELPER_ 
19006                                           const char* actual_expression,
 
19007                                           const char* expected,
 
19008                                           const char* actual);
 
19014                                               const char* actual_expression,
 
19015                                               const char* expected,
 
19016                                               const char* actual);
 
19022                                           const char* s2_expression,
 
19030                                               const char* s2_expression,
 
19039                                           const char* actual_expression,
 
19040                                           const wchar_t* expected,
 
19041                                           const wchar_t* actual);
 
19047                                           const char* s2_expression,
 
19049                                           const wchar_t* s2);
 
19062     const char* needle_expr, 
const char* haystack_expr,
 
19063     const char* needle, 
const char* haystack);
 
19065     const char* needle_expr, 
const char* haystack_expr,
 
19066     const wchar_t* needle, 
const wchar_t* haystack);
 
19068     const char* needle_expr, 
const char* haystack_expr,
 
19069     const char* needle, 
const char* haystack);
 
19071     const char* needle_expr, 
const char* haystack_expr,
 
19072     const wchar_t* needle, 
const wchar_t* haystack);
 
19074     const char* needle_expr, 
const char* haystack_expr,
 
19077     const char* needle_expr, 
const char* haystack_expr,
 
19080 #if GTEST_HAS_STD_WSTRING 
19082     const char* needle_expr, 
const char* haystack_expr,
 
19085     const char* needle_expr, 
const char* haystack_expr,
 
19087 #endif  // GTEST_HAS_STD_WSTRING 
19089 namespace internal {
 
19098 template <
typename RawType>
 
19100                                          const char* actual_expression,
 
19105   if (lhs.AlmostEquals(rhs)) {
 
19109   ::std::stringstream expected_ss;
 
19110   expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
 
19113   ::std::stringstream actual_ss;
 
19114   actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
 
19129                                                 const char* abs_error_expr,
 
19142                const char* message);
 
19147   void operator=(
const Message& message) 
const;
 
19156                      const char* srcfile,
 
19159         : type(t), file(srcfile), line(line_num), message(msg) { }
 
19177 #if GTEST_HAS_PARAM_TEST 
19212 template <
typename T>
 
19225         << 
"GetParam() can only be called inside a value-parameterized test " 
19226         << 
"-- did you intend to write TEST_P instead of TEST_F?";
 
19227     return *parameter_;
 
19234     parameter_ = parameter;
 
19244 template <
typename T>
 
19250 template <
typename T>
 
19254 #endif  // GTEST_HAS_PARAM_TEST 
19276 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 
19280 #define ADD_FAILURE_AT(file, line) \ 
19281   GTEST_MESSAGE_AT_(file, line, "Failed", \ 
19282                     ::testing::TestPartResult::kNonFatalFailure) 
19285 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 
19289 #if !GTEST_DONT_DEFINE_FAIL 
19290 # define FAIL() GTEST_FAIL() 
19294 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 
19298 #if !GTEST_DONT_DEFINE_SUCCEED 
19299 # define SUCCEED() GTEST_SUCCEED() 
19311 #define EXPECT_THROW(statement, expected_exception) \ 
19312   GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 
19313 #define EXPECT_NO_THROW(statement) \ 
19314   GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 
19315 #define EXPECT_ANY_THROW(statement) \ 
19316   GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 
19317 #define ASSERT_THROW(statement, expected_exception) \ 
19318   GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 
19319 #define ASSERT_NO_THROW(statement) \ 
19320   GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 
19321 #define ASSERT_ANY_THROW(statement) \ 
19322   GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 
19327 #define EXPECT_TRUE(condition) \ 
19328   GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 
19329                       GTEST_NONFATAL_FAILURE_) 
19330 #define EXPECT_FALSE(condition) \ 
19331   GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 
19332                       GTEST_NONFATAL_FAILURE_) 
19333 #define ASSERT_TRUE(condition) \ 
19334   GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 
19335                       GTEST_FATAL_FAILURE_) 
19336 #define ASSERT_FALSE(condition) \ 
19337   GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 
19338                       GTEST_FATAL_FAILURE_) 
19376 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 
19377 #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 
19380 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 
19381 # error Do not include gtest_pred_impl.h directly.  Include gtest.h instead. 
19382 #endif  // GTEST_INCLUDE_GTEST_GTEST_H_ 
19416 #define GTEST_ASSERT_(expression, on_failure) \ 
19417   GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 
19418   if (const ::testing::AssertionResult gtest_ar = (expression)) \ 
19421     on_failure(gtest_ar.failure_message()) 
19426 template <
typename Pred,
 
19435                             << e1 << 
") evaluates to false, where" 
19436                             << 
"\n" << e1 << 
" evaluates to " << v1;
 
19441 #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ 
19442   GTEST_ASSERT_(pred_format(#v1, v1), \ 
19447 #define GTEST_PRED1_(pred, v1, on_failure)\ 
19448   GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ 
19454 #define EXPECT_PRED_FORMAT1(pred_format, v1) \ 
19455   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) 
19456 #define EXPECT_PRED1(pred, v1) \ 
19457   GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) 
19458 #define ASSERT_PRED_FORMAT1(pred_format, v1) \ 
19459   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) 
19460 #define ASSERT_PRED1(pred, v1) \ 
19461   GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) 
19467 template <
typename Pred,
 
19480                             << e2 << 
") evaluates to false, where" 
19481                             << 
"\n" << e1 << 
" evaluates to " << v1
 
19482                             << 
"\n" << e2 << 
" evaluates to " << v2;
 
19487 #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ 
19488   GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ 
19493 #define GTEST_PRED2_(pred, v1, v2, on_failure)\ 
19494   GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ 
19502 #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ 
19503   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) 
19504 #define EXPECT_PRED2(pred, v1, v2) \ 
19505   GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) 
19506 #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ 
19507   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) 
19508 #define ASSERT_PRED2(pred, v1, v2) \ 
19509   GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) 
19515 template <
typename Pred,
 
19532                             << e3 << 
") evaluates to false, where" 
19533                             << 
"\n" << e1 << 
" evaluates to " << v1
 
19534                             << 
"\n" << e2 << 
" evaluates to " << v2
 
19535                             << 
"\n" << e3 << 
" evaluates to " << v3;
 
19540 #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ 
19541   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ 
19546 #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ 
19547   GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ 
19557 #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 
19558   GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 
19559 #define EXPECT_PRED3(pred, v1, v2, v3) \ 
19560   GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 
19561 #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 
19562   GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) 
19563 #define ASSERT_PRED3(pred, v1, v2, v3) \ 
19564   GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) 
19570 template <
typename Pred,
 
19591                             << e4 << 
") evaluates to false, where" 
19592                             << 
"\n" << e1 << 
" evaluates to " << v1
 
19593                             << 
"\n" << e2 << 
" evaluates to " << v2
 
19594                             << 
"\n" << e3 << 
" evaluates to " << v3
 
19595                             << 
"\n" << e4 << 
" evaluates to " << v4;
 
19600 #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ 
19601   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ 
19606 #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ 
19607   GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ 
19619 #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 
19620   GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 
19621 #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ 
19622   GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 
19623 #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 
19624   GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 
19625 #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ 
19626   GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 
19632 template <
typename Pred,
 
19657                             << e5 << 
") evaluates to false, where" 
19658                             << 
"\n" << e1 << 
" evaluates to " << v1
 
19659                             << 
"\n" << e2 << 
" evaluates to " << v2
 
19660                             << 
"\n" << e3 << 
" evaluates to " << v3
 
19661                             << 
"\n" << e4 << 
" evaluates to " << v4
 
19662                             << 
"\n" << e5 << 
" evaluates to " << v5;
 
19667 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ 
19668   GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ 
19673 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ 
19674   GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ 
19688 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 
19689   GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 
19690 #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ 
19691   GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 
19692 #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 
19693   GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 
19694 #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ 
19695   GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 
19699 #endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 
19747 #define EXPECT_EQ(expected, actual) \ 
19748   EXPECT_PRED_FORMAT2(::testing::internal:: \ 
19749                       EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 
19751 #define EXPECT_NE(expected, actual) \ 
19752   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) 
19753 #define EXPECT_LE(val1, val2) \ 
19754   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 
19755 #define EXPECT_LT(val1, val2) \ 
19756   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 
19757 #define EXPECT_GE(val1, val2) \ 
19758   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 
19759 #define EXPECT_GT(val1, val2) \ 
19760   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 
19762 #define GTEST_ASSERT_EQ(expected, actual) \ 
19763   ASSERT_PRED_FORMAT2(::testing::internal:: \ 
19764                       EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 
19766 #define GTEST_ASSERT_NE(val1, val2) \ 
19767   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 
19768 #define GTEST_ASSERT_LE(val1, val2) \ 
19769   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 
19770 #define GTEST_ASSERT_LT(val1, val2) \ 
19771   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 
19772 #define GTEST_ASSERT_GE(val1, val2) \ 
19773   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 
19774 #define GTEST_ASSERT_GT(val1, val2) \ 
19775   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 
19780 #if !GTEST_DONT_DEFINE_ASSERT_EQ 
19781 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 
19784 #if !GTEST_DONT_DEFINE_ASSERT_NE 
19785 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 
19788 #if !GTEST_DONT_DEFINE_ASSERT_LE 
19789 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 
19792 #if !GTEST_DONT_DEFINE_ASSERT_LT 
19793 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 
19796 #if !GTEST_DONT_DEFINE_ASSERT_GE 
19797 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 
19800 #if !GTEST_DONT_DEFINE_ASSERT_GT 
19801 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 
19820 #define EXPECT_STREQ(expected, actual) \ 
19821   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 
19822 #define EXPECT_STRNE(s1, s2) \ 
19823   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 
19824 #define EXPECT_STRCASEEQ(expected, actual) \ 
19825   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 
19826 #define EXPECT_STRCASENE(s1, s2)\ 
19827   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 
19829 #define ASSERT_STREQ(expected, actual) \ 
19830   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 
19831 #define ASSERT_STRNE(s1, s2) \ 
19832   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 
19833 #define ASSERT_STRCASEEQ(expected, actual) \ 
19834   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 
19835 #define ASSERT_STRCASENE(s1, s2)\ 
19836   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 
19852 #define EXPECT_FLOAT_EQ(expected, actual)\ 
19853   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 
19856 #define EXPECT_DOUBLE_EQ(expected, actual)\ 
19857   EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 
19860 #define ASSERT_FLOAT_EQ(expected, actual)\ 
19861   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 
19864 #define ASSERT_DOUBLE_EQ(expected, actual)\ 
19865   ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 
19868 #define EXPECT_NEAR(val1, val2, abs_error)\ 
19869   EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 
19870                       val1, val2, abs_error) 
19872 #define ASSERT_NEAR(val1, val2, abs_error)\ 
19873   ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 
19874                       val1, val2, abs_error) 
19884                                    float val1, 
float val2);
 
19886                                     double val1, 
double val2);
 
19889 #if GTEST_OS_WINDOWS 
19900 # define EXPECT_HRESULT_SUCCEEDED(expr) \ 
19901     EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 
19903 # define ASSERT_HRESULT_SUCCEEDED(expr) \ 
19904     ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 
19906 # define EXPECT_HRESULT_FAILED(expr) \ 
19907     EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 
19909 # define ASSERT_HRESULT_FAILED(expr) \ 
19910     ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 
19912 #endif  // GTEST_OS_WINDOWS 
19924 #define ASSERT_NO_FATAL_FAILURE(statement) \ 
19925     GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 
19926 #define EXPECT_NO_FATAL_FAILURE(statement) \ 
19927     GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 
19940 #define SCOPED_TRACE(message) \ 
19941   ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 
19942     __FILE__, __LINE__, ::testing::Message() << (message)) 
19974 template <
typename T1, 
typename T2>
 
20005 #define GTEST_TEST(test_case_name, test_name)\ 
20006   GTEST_TEST_(test_case_name, test_name, \ 
20007               ::testing::Test, ::testing::internal::GetTestTypeId()) 
20011 #if !GTEST_DONT_DEFINE_TEST 
20012 # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) 
20041 #define TEST_F(test_fixture, test_name)\ 
20042   GTEST_TEST_(test_fixture, test_name, test_fixture, \ 
20043               ::testing::internal::GetTypeId<test_fixture>()) 
20058   return ::testing::UnitTest::GetInstance()->Run();
 
20061 #endif  // GTEST_INCLUDE_GTEST_GTEST_H_