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&);
3169 *ss_ <<
msg.GetString();
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);
3768 const std::string name_str(status == 0 ? readable_name : name);
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;
7541 (
std::string(prefix) + (prefix[0] ==
'\0' ?
"" :
"/") + case_name +
"/"
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_);
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>
10683 internal::ParamGenerator<T>
ValuesIn(
const T (&array)[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>
15885 return ValuesIn(array, array + 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_