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_
139 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
140 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
361 # include <sys/types.h>
362 # include <sys/stat.h>
363 #endif // !_WIN32_WCE
365 #if defined __APPLE__
366 # include <AvailabilityMacros.h>
367 # include <TargetConditionals.h>
411 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
412 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
416 # define GTEST_OS_CYGWIN 1
417 #elif defined __SYMBIAN32__
418 # define GTEST_OS_SYMBIAN 1
420 # define GTEST_OS_WINDOWS 1
422 # define GTEST_OS_WINDOWS_MOBILE 1
423 # elif defined(__MINGW__) || defined(__MINGW32__)
424 # define GTEST_OS_WINDOWS_MINGW 1
425 # elif defined(WINAPI_FAMILY)
426 # include <winapifamily.h>
427 # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
428 # define GTEST_OS_WINDOWS_DESKTOP 1
429 # elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
430 # define GTEST_OS_WINDOWS_PHONE 1
431 # elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
432 # define GTEST_OS_WINDOWS_RT 1
436 # define GTEST_OS_WINDOWS_DESKTOP 1
439 # define GTEST_OS_WINDOWS_DESKTOP 1
440 # endif // _WIN32_WCE
441 #elif defined __APPLE__
442 # define GTEST_OS_MAC 1
443 # if TARGET_OS_IPHONE
444 # define GTEST_OS_IOS 1
446 #elif defined __FreeBSD__
447 # define GTEST_OS_FREEBSD 1
448 #elif defined __linux__
449 # define GTEST_OS_LINUX 1
450 # if defined __ANDROID__
451 # define GTEST_OS_LINUX_ANDROID 1
453 #elif defined __MVS__
454 # define GTEST_OS_ZOS 1
455 #elif defined(__sun) && defined(__SVR4)
456 # define GTEST_OS_SOLARIS 1
458 # define GTEST_OS_AIX 1
459 #elif defined(__hpux)
460 # define GTEST_OS_HPUX 1
461 #elif defined __native_client__
462 # define GTEST_OS_NACL 1
463 #elif defined __OpenBSD__
464 # define GTEST_OS_OPENBSD 1
465 #elif defined __QNX__
466 # define GTEST_OS_QNX 1
469 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
535 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
536 #define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
538 #endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
540 #if !defined(GTEST_DEV_EMAIL_)
541 # define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
542 # define GTEST_FLAG_PREFIX_ "gtest_"
543 # define GTEST_FLAG_PREFIX_DASH_ "gtest-"
544 # define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
545 # define GTEST_NAME_ "Google Test"
546 # define GTEST_PROJECT_URL_ "https://github.com/google/googletest/"
547 #endif // !defined(GTEST_DEV_EMAIL_)
549 #if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)
550 # define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest"
551 #endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_)
556 # define GTEST_GCC_VER_ \
557 (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
566 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \
567 __pragma(warning(push)) \
568 __pragma(warning(disable: warnings))
569 # define GTEST_DISABLE_MSC_WARNINGS_POP_() \
570 __pragma(warning(pop))
573 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
574 # define GTEST_DISABLE_MSC_WARNINGS_POP_()
577 #ifndef GTEST_LANG_CXX11
582 # if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L
584 # define GTEST_LANG_CXX11 1
586 # define GTEST_LANG_CXX11 0
599 #if GTEST_LANG_CXX11 && \
600 (!defined(__GLIBCXX__) || ( \
601 __GLIBCXX__ >= 20110325ul && \
603 __GLIBCXX__ != 20110416ul && \
604 __GLIBCXX__ != 20120313ul && \
605 __GLIBCXX__ != 20110428ul && \
606 __GLIBCXX__ != 20120702ul))
607 # define GTEST_STDLIB_CXX11 1
611 #if GTEST_STDLIB_CXX11
612 # define GTEST_HAS_STD_BEGIN_AND_END_ 1
613 # define GTEST_HAS_STD_FORWARD_LIST_ 1
614 # define GTEST_HAS_STD_FUNCTION_ 1
615 # define GTEST_HAS_STD_INITIALIZER_LIST_ 1
616 # define GTEST_HAS_STD_MOVE_ 1
617 # define GTEST_HAS_STD_SHARED_PTR_ 1
618 # define GTEST_HAS_STD_TYPE_TRAITS_ 1
619 # define GTEST_HAS_STD_UNIQUE_PTR_ 1
625 # define GTEST_HAS_STD_TUPLE_ 1
626 # if defined(__clang__)
628 # if defined(__has_include) && !__has_include(<tuple>)
629 # undef GTEST_HAS_STD_TUPLE_
631 # elif defined(_MSC_VER)
633 # if defined(_CPPLIB_VER) && _CPPLIB_VER < 520
634 # undef GTEST_HAS_STD_TUPLE_
636 # elif defined(__GLIBCXX__)
640 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
641 # undef GTEST_HAS_STD_TUPLE_
650 # if !GTEST_OS_WINDOWS_MOBILE
658 struct _RTL_CRITICAL_SECTION;
664 # include <strings.h>
665 #endif // GTEST_OS_WINDOWS
667 #if GTEST_OS_LINUX_ANDROID
669 # include <android/api-level.h>
673 #ifndef GTEST_HAS_POSIX_RE
674 # if GTEST_OS_LINUX_ANDROID
676 # define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)
678 # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
685 #elif GTEST_HAS_POSIX_RE
693 # define GTEST_USES_POSIX_RE 1
695 #elif GTEST_OS_WINDOWS
699 # define GTEST_USES_SIMPLE_RE 1
705 # define GTEST_USES_SIMPLE_RE 1
707 #endif // GTEST_USES_PCRE
709 #ifndef GTEST_HAS_EXCEPTIONS
712 # if defined(_MSC_VER) || defined(__BORLANDC__)
716 # ifndef _HAS_EXCEPTIONS
717 # define _HAS_EXCEPTIONS 1
718 # endif // _HAS_EXCEPTIONS
719 # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS
720 # elif defined(__clang__)
728 # define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions))
729 # elif defined(__GNUC__) && __EXCEPTIONS
731 # define GTEST_HAS_EXCEPTIONS 1
732 # elif defined(__SUNPRO_CC)
736 # define GTEST_HAS_EXCEPTIONS 1
737 # elif defined(__IBMCPP__) && __EXCEPTIONS
739 # define GTEST_HAS_EXCEPTIONS 1
740 # elif defined(__HP_aCC)
743 # define GTEST_HAS_EXCEPTIONS 1
747 # define GTEST_HAS_EXCEPTIONS 0
748 # endif // defined(_MSC_VER) || defined(__BORLANDC__)
749 #endif // GTEST_HAS_EXCEPTIONS
751 #if !defined(GTEST_HAS_STD_STRING)
754 # define GTEST_HAS_STD_STRING 1
755 #elif !GTEST_HAS_STD_STRING
757 # error "Google Test cannot be used where ::std::string isn't available."
758 #endif // !defined(GTEST_HAS_STD_STRING)
760 #ifndef GTEST_HAS_GLOBAL_STRING
764 # define GTEST_HAS_GLOBAL_STRING 0
766 #endif // GTEST_HAS_GLOBAL_STRING
768 #ifndef GTEST_HAS_STD_WSTRING
777 # define GTEST_HAS_STD_WSTRING \
778 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS))
780 #endif // GTEST_HAS_STD_WSTRING
782 #ifndef GTEST_HAS_GLOBAL_WSTRING
785 # define GTEST_HAS_GLOBAL_WSTRING \
786 (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING)
787 #endif // GTEST_HAS_GLOBAL_WSTRING
790 #ifndef GTEST_HAS_RTTI
796 # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled.
797 # define GTEST_HAS_RTTI 1
799 # define GTEST_HAS_RTTI 0
803 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)
810 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \
811 !defined(__EXCEPTIONS)
812 # define GTEST_HAS_RTTI 0
814 # define GTEST_HAS_RTTI 1
815 # endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS
817 # define GTEST_HAS_RTTI 0
818 # endif // __GXX_RTTI
823 # elif defined(__clang__)
825 # define GTEST_HAS_RTTI __has_feature(cxx_rtti)
829 # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
832 # define GTEST_HAS_RTTI 1
834 # define GTEST_HAS_RTTI 0
840 # define GTEST_HAS_RTTI 1
844 #endif // GTEST_HAS_RTTI
853 #ifndef GTEST_HAS_PTHREAD
859 # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \
860 || GTEST_OS_QNX || GTEST_OS_FREEBSD || GTEST_OS_NACL)
861 #endif // GTEST_HAS_PTHREAD
863 #if GTEST_HAS_PTHREAD
866 # include <pthread.h>
874 #if !defined(GTEST_HAS_HASH_MAP_)
876 # define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available.
877 # define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available.
879 #endif // !defined(GTEST_HAS_HASH_MAP_)
884 #ifndef GTEST_HAS_TR1_TUPLE
885 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR)
887 # define GTEST_HAS_TR1_TUPLE 0
890 # define GTEST_HAS_TR1_TUPLE 1
892 #endif // GTEST_HAS_TR1_TUPLE
896 #ifndef GTEST_USE_OWN_TR1_TUPLE
909 # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \
910 && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600
911 # define GTEST_ENV_HAS_TR1_TUPLE_ 1
917 # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325)
918 # define GTEST_ENV_HAS_STD_TUPLE_ 1
921 # if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_
922 # define GTEST_USE_OWN_TR1_TUPLE 0
924 # define GTEST_USE_OWN_TR1_TUPLE 1
927 #endif // GTEST_USE_OWN_TR1_TUPLE
932 #if GTEST_HAS_STD_TUPLE_
934 # define GTEST_TUPLE_NAMESPACE_ ::std
935 #endif // GTEST_HAS_STD_TUPLE_
939 #if GTEST_HAS_TR1_TUPLE
940 # ifndef GTEST_TUPLE_NAMESPACE_
941 # define GTEST_TUPLE_NAMESPACE_ ::std::tr1
942 # endif // GTEST_TUPLE_NAMESPACE_
944 # if GTEST_USE_OWN_TR1_TUPLE
982 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
983 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
992 #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
993 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
995 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
996 template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
1003 #if defined(_MSC_VER) && _MSC_VER >= 1600
1004 # error "gtest's tuple doesn't compile on Visual Studio 2010 or later. \
1005 GTEST_USE_OWN_TR1_TUPLE must be set to 0 on those compilers."
1009 #define GTEST_0_TUPLE_(T) tuple<>
1010 #define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
1012 #define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
1014 #define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
1016 #define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
1018 #define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
1020 #define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
1022 #define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
1024 #define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
1026 #define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
1028 #define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
1032 #define GTEST_0_TYPENAMES_(T)
1033 #define GTEST_1_TYPENAMES_(T) typename T##0
1034 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
1035 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
1036 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1038 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1039 typename T##3, typename T##4
1040 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1041 typename T##3, typename T##4, typename T##5
1042 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1043 typename T##3, typename T##4, typename T##5, typename T##6
1044 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1045 typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
1046 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1047 typename T##3, typename T##4, typename T##5, typename T##6, \
1048 typename T##7, typename T##8
1049 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1050 typename T##3, typename T##4, typename T##5, typename T##6, \
1051 typename T##7, typename T##8, typename T##9
1059 template <
typename T0 = void,
typename T1 = void,
typename T2 = void,
1060 typename T3 = void,
typename T4 = void,
typename T5 = void,
1061 typename T6 = void,
typename T7 = void,
typename T8 = void,
1067 namespace gtest_internal {
1070 template <
typename T>
1072 template <
typename T>
1076 #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
1080 template <
typename T>
1082 template <
typename T>
1086 #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
1093 template <
bool kIndexVal
id,
int kIndex,
class Tuple>
1096 template <GTEST_10_TYPENAMES_(T)>
1101 template <GTEST_10_TYPENAMES_(T)>
1106 template <GTEST_10_TYPENAMES_(T)>
1111 template <GTEST_10_TYPENAMES_(T)>
1116 template <GTEST_10_TYPENAMES_(T)>
1121 template <GTEST_10_TYPENAMES_(T)>
1126 template <GTEST_10_TYPENAMES_(T)>
1131 template <GTEST_10_TYPENAMES_(T)>
1136 template <GTEST_10_TYPENAMES_(T)>
1141 template <GTEST_10_TYPENAMES_(T)>
1156 template <GTEST_1_TYPENAMES_(T)>
1157 class GTEST_1_TUPLE_(T) {
1167 template <GTEST_1_TYPENAMES_(U)>
1172 template <GTEST_1_TYPENAMES_(U)>
1179 template <GTEST_1_TYPENAMES_(U)>
1188 template <GTEST_2_TYPENAMES_(T)>
1189 class GTEST_2_TUPLE_(T) {
1193 tuple() : f0_(), f1_() {}
1198 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
1200 template <GTEST_2_TYPENAMES_(U)>
1202 template <
typename U0,
typename U1>
1203 tuple(const ::std::pair<U0, U1>&
p) : f0_(
p.first), f1_(
p.second) {}
1207 template <GTEST_2_TYPENAMES_(U)>
1211 template <
typename U0,
typename U1>
1212 tuple& operator=(const ::std::pair<U0, U1>&
p) {
1220 template <GTEST_2_TYPENAMES_(U)>
1231 template <GTEST_3_TYPENAMES_(T)>
1232 class GTEST_3_TUPLE_(T) {
1236 tuple() : f0_(), f1_(), f2_() {}
1241 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
1243 template <GTEST_3_TYPENAMES_(U)>
1248 template <GTEST_3_TYPENAMES_(U)>
1255 template <GTEST_3_TYPENAMES_(U)>
1268 template <GTEST_4_TYPENAMES_(T)>
1269 class GTEST_4_TUPLE_(T) {
1273 tuple() : f0_(), f1_(), f2_(), f3_() {}
1279 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
1281 template <GTEST_4_TYPENAMES_(U)>
1287 template <GTEST_4_TYPENAMES_(U)>
1294 template <GTEST_4_TYPENAMES_(U)>
1309 template <GTEST_5_TYPENAMES_(T)>
1310 class GTEST_5_TUPLE_(T) {
1314 tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
1320 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1323 template <GTEST_5_TYPENAMES_(U)>
1325 f3_(t.f3_), f4_(t.f4_) {}
1329 template <GTEST_5_TYPENAMES_(U)>
1336 template <GTEST_5_TYPENAMES_(U)>
1353 template <GTEST_6_TYPENAMES_(T)>
1354 class GTEST_6_TUPLE_(T) {
1358 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
1365 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1366 f4_(t.f4_), f5_(t.f5_) {}
1368 template <GTEST_6_TYPENAMES_(U)>
1370 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
1374 template <GTEST_6_TYPENAMES_(U)>
1381 template <GTEST_6_TYPENAMES_(U)>
1400 template <GTEST_7_TYPENAMES_(T)>
1401 class GTEST_7_TUPLE_(T) {
1405 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
1410 f3_(
f3), f4_(
f4), f5_(
f5), f6_(
f6) {}
1412 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1413 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
1415 template <GTEST_7_TYPENAMES_(U)>
1417 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
1421 template <GTEST_7_TYPENAMES_(U)>
1428 template <GTEST_7_TYPENAMES_(U)>
1449 template <GTEST_8_TYPENAMES_(T)>
1450 class GTEST_8_TUPLE_(T) {
1454 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
1460 f5_(
f5), f6_(
f6), f7_(
f7) {}
1462 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1463 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
1465 template <GTEST_8_TYPENAMES_(U)>
1467 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
1471 template <GTEST_8_TYPENAMES_(U)>
1478 template <GTEST_8_TYPENAMES_(U)>
1501 template <GTEST_9_TYPENAMES_(T)>
1502 class GTEST_9_TUPLE_(T) {
1506 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
1512 f5_(
f5), f6_(
f6), f7_(
f7), f8_(
f8) {}
1514 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1515 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
1517 template <GTEST_9_TYPENAMES_(U)>
1519 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
1523 template <GTEST_9_TYPENAMES_(U)>
1530 template <GTEST_9_TYPENAMES_(U)>
1555 template <GTEST_10_TYPENAMES_(T)>
1560 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
1569 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1570 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
1572 template <GTEST_10_TYPENAMES_(U)>
1574 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
1579 template <GTEST_10_TYPENAMES_(U)>
1586 template <GTEST_10_TYPENAMES_(U)>
1621 template <GTEST_1_TYPENAMES_(T)>
1626 template <GTEST_2_TYPENAMES_(T)>
1631 template <GTEST_3_TYPENAMES_(T)>
1636 template <GTEST_4_TYPENAMES_(T)>
1642 template <GTEST_5_TYPENAMES_(T)>
1648 template <GTEST_6_TYPENAMES_(T)>
1654 template <GTEST_7_TYPENAMES_(T)>
1660 template <GTEST_8_TYPENAMES_(T)>
1666 template <GTEST_9_TYPENAMES_(T)>
1673 template <GTEST_10_TYPENAMES_(T)>
1684 template <GTEST_0_TYPENAMES_(T)>
1689 template <GTEST_1_TYPENAMES_(T)>
1694 template <GTEST_2_TYPENAMES_(T)>
1699 template <GTEST_3_TYPENAMES_(T)>
1704 template <GTEST_4_TYPENAMES_(T)>
1709 template <GTEST_5_TYPENAMES_(T)>
1714 template <GTEST_6_TYPENAMES_(T)>
1719 template <GTEST_7_TYPENAMES_(T)>
1724 template <GTEST_8_TYPENAMES_(T)>
1729 template <GTEST_9_TYPENAMES_(T)>
1734 template <GTEST_10_TYPENAMES_(T)>
1739 template <
int k,
class Tuple>
1745 #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
1749 namespace gtest_internal {
1754 template <
class Tuple>
1756 Field(Tuple& t) {
return t.f0_; }
1758 template <
class Tuple>
1760 ConstField(
const Tuple& t) {
return t.f0_; }
1766 template <
class Tuple>
1768 Field(Tuple& t) {
return t.f1_; }
1770 template <
class Tuple>
1772 ConstField(
const Tuple& t) {
return t.f1_; }
1778 template <
class Tuple>
1780 Field(Tuple& t) {
return t.f2_; }
1782 template <
class Tuple>
1784 ConstField(
const Tuple& t) {
return t.f2_; }
1790 template <
class Tuple>
1792 Field(Tuple& t) {
return t.f3_; }
1794 template <
class Tuple>
1796 ConstField(
const Tuple& t) {
return t.f3_; }
1802 template <
class Tuple>
1804 Field(Tuple& t) {
return t.f4_; }
1806 template <
class Tuple>
1808 ConstField(
const Tuple& t) {
return t.f4_; }
1814 template <
class Tuple>
1816 Field(Tuple& t) {
return t.f5_; }
1818 template <
class Tuple>
1820 ConstField(
const Tuple& t) {
return t.f5_; }
1826 template <
class Tuple>
1828 Field(Tuple& t) {
return t.f6_; }
1830 template <
class Tuple>
1832 ConstField(
const Tuple& t) {
return t.f6_; }
1838 template <
class Tuple>
1840 Field(Tuple& t) {
return t.f7_; }
1842 template <
class Tuple>
1844 ConstField(
const Tuple& t) {
return t.f7_; }
1850 template <
class Tuple>
1852 Field(Tuple& t) {
return t.f8_; }
1854 template <
class Tuple>
1856 ConstField(
const Tuple& t) {
return t.f8_; }
1862 template <
class Tuple>
1864 Field(Tuple& t) {
return t.f9_; }
1866 template <
class Tuple>
1868 ConstField(
const Tuple& t) {
return t.f9_; }
1873 template <
int k, GTEST_10_TYPENAMES_(T)>
1879 template <
int k, GTEST_10_TYPENAMES_(T)>
1889 namespace gtest_internal {
1895 template <
int kSize1,
int kSize2>
1900 template <
class Tuple1,
class Tuple2>
1901 static bool Eq(
const Tuple1& ,
const Tuple2& ) {
1908 template <
class Tuple1,
class Tuple2>
1909 static bool Eq(
const Tuple1&
t1,
const Tuple2& t2) {
1917 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
1925 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
1935 #undef GTEST_0_TUPLE_
1936 #undef GTEST_1_TUPLE_
1937 #undef GTEST_2_TUPLE_
1938 #undef GTEST_3_TUPLE_
1939 #undef GTEST_4_TUPLE_
1940 #undef GTEST_5_TUPLE_
1941 #undef GTEST_6_TUPLE_
1942 #undef GTEST_7_TUPLE_
1943 #undef GTEST_8_TUPLE_
1944 #undef GTEST_9_TUPLE_
1945 #undef GTEST_10_TUPLE_
1947 #undef GTEST_0_TYPENAMES_
1948 #undef GTEST_1_TYPENAMES_
1949 #undef GTEST_2_TYPENAMES_
1950 #undef GTEST_3_TYPENAMES_
1951 #undef GTEST_4_TYPENAMES_
1952 #undef GTEST_5_TYPENAMES_
1953 #undef GTEST_6_TYPENAMES_
1954 #undef GTEST_7_TYPENAMES_
1955 #undef GTEST_8_TYPENAMES_
1956 #undef GTEST_9_TYPENAMES_
1957 #undef GTEST_10_TYPENAMES_
1959 #undef GTEST_DECLARE_TUPLE_AS_FRIEND_
1960 #undef GTEST_BY_REF_
1961 #undef GTEST_ADD_REF_
1962 #undef GTEST_TUPLE_ELEMENT_
1964 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
1965 # elif GTEST_ENV_HAS_STD_TUPLE_
1976 using ::std::tuple_element;
1977 using ::std::tuple_size;
1981 # elif GTEST_OS_SYMBIAN
1988 # ifdef BOOST_HAS_TR1_TUPLE
1989 # undef BOOST_HAS_TR1_TUPLE
1990 # endif // BOOST_HAS_TR1_TUPLE
1994 # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
1997 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000)
2001 # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
2007 # define _TR1_FUNCTIONAL 1
2008 # include <tr1/tuple>
2009 # undef _TR1_FUNCTIONAL // Allows the user to #include
2012 # include <tr1/tuple>
2013 # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
2019 # endif // GTEST_USE_OWN_TR1_TUPLE
2021 #endif // GTEST_HAS_TR1_TUPLE
2027 #ifndef GTEST_HAS_CLONE
2030 # if GTEST_OS_LINUX && !defined(__ia64__)
2031 # if GTEST_OS_LINUX_ANDROID
2033 # if defined(__arm__) && __ANDROID_API__ >= 9
2034 # define GTEST_HAS_CLONE 1
2036 # define GTEST_HAS_CLONE 0
2039 # define GTEST_HAS_CLONE 1
2042 # define GTEST_HAS_CLONE 0
2043 # endif // GTEST_OS_LINUX && !defined(__ia64__)
2045 #endif // GTEST_HAS_CLONE
2049 #ifndef GTEST_HAS_STREAM_REDIRECTION
2052 # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || \
2053 GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT
2054 # define GTEST_HAS_STREAM_REDIRECTION 0
2056 # define GTEST_HAS_STREAM_REDIRECTION 1
2057 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN
2058 #endif // GTEST_HAS_STREAM_REDIRECTION
2064 #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
2065 (GTEST_OS_MAC && !GTEST_OS_IOS) || \
2066 (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \
2067 GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \
2068 GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD)
2069 # define GTEST_HAS_DEATH_TEST 1
2075 #define GTEST_HAS_PARAM_TEST 1
2081 #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \
2082 defined(__IBMCPP__) || defined(__HP_aCC)
2083 # define GTEST_HAS_TYPED_TEST 1
2084 # define GTEST_HAS_TYPED_TEST_P 1
2091 #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC)
2092 # define GTEST_HAS_COMBINE 1
2096 #define GTEST_WIDE_STRING_USES_UTF16_ \
2097 (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX)
2101 # define GTEST_CAN_STREAM_RESULTS_ 1
2114 #ifdef __INTEL_COMPILER
2115 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_
2117 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT
2131 #if defined(__GNUC__) && !defined(COMPILER_ICC)
2132 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
2133 #elif defined(__clang__)
2134 # if __has_attribute(unused)
2135 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
2138 #ifndef GTEST_ATTRIBUTE_UNUSED_
2139 # define GTEST_ATTRIBUTE_UNUSED_
2144 #define GTEST_DISALLOW_ASSIGN_(type)\
2145 void operator=(type const &)
2149 #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\
2150 type(type const &);\
2151 GTEST_DISALLOW_ASSIGN_(type)
2158 #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC)
2159 # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))
2161 # define GTEST_MUST_USE_RESULT_
2162 #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC
2172 # define GTEST_INTENTIONAL_CONST_COND_PUSH_() \
2173 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127)
2174 # define GTEST_INTENTIONAL_CONST_COND_POP_() \
2175 GTEST_DISABLE_MSC_WARNINGS_POP_()
2180 #ifndef GTEST_HAS_SEH
2183 # if defined(_MSC_VER) || defined(__BORLANDC__)
2185 # define GTEST_HAS_SEH 1
2188 # define GTEST_HAS_SEH 0
2191 #define GTEST_IS_THREADSAFE \
2192 (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ \
2193 || (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) \
2194 || GTEST_HAS_PTHREAD)
2196 #endif // GTEST_HAS_SEH
2199 # if GTEST_LINKED_AS_SHARED_LIBRARY
2200 # define GTEST_API_ __declspec(dllimport)
2201 # elif GTEST_CREATE_SHARED_LIBRARY
2202 # define GTEST_API_ __declspec(dllexport)
2204 #elif __GNUC__ >= 4 || defined(__clang__)
2205 # define GTEST_API_ __attribute__((visibility ("default")))
2214 # define GTEST_NO_INLINE_ __attribute__((noinline))
2216 # define GTEST_NO_INLINE_
2220 #if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION)
2221 # define GTEST_HAS_CXXABI_H_ 1
2223 # define GTEST_HAS_CXXABI_H_ 0
2228 #if defined(__clang__)
2229 # if __has_feature(memory_sanitizer)
2230 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \
2231 __attribute__((no_sanitize_memory))
2233 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
2234 # endif // __has_feature(memory_sanitizer)
2236 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
2240 #if defined(__clang__)
2241 # if __has_feature(address_sanitizer)
2242 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \
2243 __attribute__((no_sanitize_address))
2245 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_
2246 # endif // __has_feature(address_sanitizer)
2248 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_
2252 #if defined(__clang__)
2253 # if __has_feature(thread_sanitizer)
2254 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \
2255 __attribute__((no_sanitize_thread))
2257 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_
2258 # endif // __has_feature(thread_sanitizer)
2260 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_
2267 #if defined(GTEST_TUPLE_NAMESPACE_)
2273 using GTEST_TUPLE_NAMESPACE_::tuple;
2274 using GTEST_TUPLE_NAMESPACE_::tuple_size;
2275 using GTEST_TUPLE_NAMESPACE_::tuple_element;
2276 #endif // defined(GTEST_TUPLE_NAMESPACE_)
2300 #if GTEST_LANG_CXX11
2301 # define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)
2302 #else // !GTEST_LANG_CXX11
2307 # define GTEST_COMPILE_ASSERT_(expr, msg) \
2308 typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \
2309 msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_
2310 #endif // !GTEST_LANG_CXX11
2358 template <
typename T1,
typename T2>
2359 struct StaticAssertTypeEqHelper;
2361 template <
typename T>
2362 struct StaticAssertTypeEqHelper<
T,
T> {
2363 enum {
value =
true };
2367 #define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))
2369 #if GTEST_HAS_GLOBAL_STRING
2373 #endif // GTEST_HAS_GLOBAL_STRING
2375 #if GTEST_HAS_GLOBAL_WSTRING
2377 #elif GTEST_HAS_STD_WSTRING
2379 #endif // GTEST_HAS_GLOBAL_WSTRING
2389 template <
typename T>
2440 #if GTEST_HAS_GLOBAL_STRING
2444 #endif // GTEST_HAS_GLOBAL_STRING
2460 return FullMatch(
str.c_str(), re);
2463 return PartialMatch(
str.c_str(), re);
2466 #if GTEST_HAS_GLOBAL_STRING
2469 return FullMatch(
str.c_str(), re);
2472 return PartialMatch(
str.c_str(), re);
2475 #endif // GTEST_HAS_GLOBAL_STRING
2477 static bool FullMatch(
const char*
str,
const RE& re);
2478 static bool PartialMatch(
const char*
str,
const RE& re);
2481 void Init(
const char* regex);
2486 const char* pattern_;
2489 #if GTEST_USES_POSIX_RE
2491 regex_t full_regex_;
2492 regex_t partial_regex_;
2494 #else // GTEST_USES_SIMPLE_RE
2496 const char* full_pattern_;
2544 #if !defined(GTEST_LOG_)
2546 # define GTEST_LOG_(severity) \
2547 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \
2548 __FILE__, __LINE__).GetStream()
2553 #endif // !defined(GTEST_LOG_)
2555 #if !defined(GTEST_CHECK_)
2570 # define GTEST_CHECK_(condition) \
2571 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
2572 if (::testing::internal::IsTrue(condition)) \
2575 GTEST_LOG_(FATAL) << "Condition " #condition " failed. "
2576 #endif // !defined(GTEST_CHECK_)
2583 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \
2584 if (const int gtest_error = (posix_call)) \
2585 GTEST_LOG_(FATAL) << #posix_call << "failed with error " \
2588 #if GTEST_HAS_STD_MOVE_
2590 #else // GTEST_HAS_STD_MOVE_
2591 template <
typename T>
2595 #endif // GTEST_HAS_STD_MOVE_
2617 template<
typename To>
2641 template<
typename To,
typename From>
2656 GTEST_CHECK_(f == NULL ||
dynamic_cast<To
>(f) != NULL);
2658 return static_cast<To
>(f);
2666 template <
class Derived,
class Base>
2672 #if GTEST_HAS_DOWNCAST_
2673 return ::down_cast<Derived*>(
base);
2674 #elif GTEST_HAS_RTTI
2675 return dynamic_cast<Derived*
>(
base);
2677 return static_cast<Derived*
>(
base);
2681 #if GTEST_HAS_STREAM_REDIRECTION
2694 #endif // GTEST_HAS_STREAM_REDIRECTION
2708 #if GTEST_HAS_DEATH_TEST
2710 const ::std::vector<testing::internal::string>& GetInjectableArgvs();
2711 void SetInjectableArgvs(const ::std::vector<testing::internal::string>*
2715 #endif // GTEST_HAS_DEATH_TEST
2718 #if GTEST_IS_THREADSAFE
2719 # if GTEST_HAS_PTHREAD
2723 inline void SleepMilliseconds(
int n) {
2724 const timespec time = {
2730 # endif // GTEST_HAS_PTHREAD
2732 # if GTEST_HAS_NOTIFICATION_
2736 # elif GTEST_HAS_PTHREAD
2743 class Notification {
2745 Notification() : notified_(
false) {
2749 pthread_mutex_destroy(&
mutex_);
2755 pthread_mutex_lock(&
mutex_);
2757 pthread_mutex_unlock(&
mutex_);
2762 void WaitForNotification() {
2764 pthread_mutex_lock(&
mutex_);
2765 const bool notified = notified_;
2766 pthread_mutex_unlock(&
mutex_);
2769 SleepMilliseconds(10);
2780 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
2793 typedef void* Handle;
2795 explicit AutoHandle(Handle
handle);
2805 bool IsCloseable()
const;
2822 void WaitForNotification();
2829 # endif // GTEST_HAS_NOTIFICATION_
2834 # if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW
2841 class ThreadWithParamBase {
2843 virtual ~ThreadWithParamBase() {}
2844 virtual void Run() = 0;
2853 extern "C" inline void* ThreadFuncWithCLinkage(
void*
thread) {
2854 static_cast<ThreadWithParamBase*
>(
thread)->
Run();
2870 template <
typename T>
2871 class ThreadWithParam :
public ThreadWithParamBase {
2873 typedef void UserThreadFunc(
T);
2875 ThreadWithParam(UserThreadFunc*
func,
T param, Notification* thread_can_start)
2878 thread_can_start_(thread_can_start),
2880 ThreadWithParamBase*
const base =
this;
2884 pthread_create(&
thread_, 0, &ThreadFuncWithCLinkage,
base));
2886 ~ThreadWithParam() {
Join(); }
2895 virtual void Run() {
2896 if (thread_can_start_ != NULL)
2897 thread_can_start_->WaitForNotification();
2902 UserThreadFunc*
const func_;
2906 Notification*
const thread_can_start_;
2912 # endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD ||
2915 # if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_
2919 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
2937 enum MutexType { kStatic = 0, kDynamic = 1 };
2941 enum StaticConstructorSelector { kStaticMutex = 0 };
2946 explicit Mutex(StaticConstructorSelector ) {}
2961 void ThreadSafeLazyInit();
2965 unsigned int owner_thread_id_;
2970 long critical_section_init_phase_;
2971 _RTL_CRITICAL_SECTION* critical_section_;
2976 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
2977 extern ::testing::internal::Mutex mutex
2979 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
2980 ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex)
2987 class GTestMutexLock {
2992 ~GTestMutexLock() {
mutex_->Unlock(); }
3004 class ThreadLocalValueHolderBase {
3006 virtual ~ThreadLocalValueHolderBase() {}
3011 class ThreadLocalBase {
3017 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const = 0;
3020 ThreadLocalBase() {}
3021 virtual ~ThreadLocalBase() {}
3034 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
3035 const ThreadLocalBase* thread_local_instance);
3038 static void OnThreadLocalDestroyed(
3039 const ThreadLocalBase* thread_local_instance);
3049 virtual ~Runnable() {}
3050 virtual void Run() = 0;
3053 ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start);
3054 virtual ~ThreadWithParamBase();
3061 template <
typename T>
3062 class ThreadWithParam :
public ThreadWithParamBase {
3064 typedef void UserThreadFunc(
T);
3066 ThreadWithParam(UserThreadFunc*
func,
T param, Notification* thread_can_start)
3067 : ThreadWithParamBase(
new RunnableImpl(
func, param), thread_can_start) {
3069 virtual ~ThreadWithParam() {}
3072 class RunnableImpl :
public Runnable {
3074 RunnableImpl(UserThreadFunc*
func,
T param)
3078 virtual ~RunnableImpl() {}
3079 virtual void Run() {
3084 UserThreadFunc*
const func_;
3120 template <
typename T>
3121 class ThreadLocal :
public ThreadLocalBase {
3123 ThreadLocal() : default_factory_(
new DefaultValueHolderFactory()) {}
3124 explicit ThreadLocal(
const T&
value)
3125 : default_factory_(
new InstanceValueHolderFactory(
value)) {}
3127 ~ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed(
this); }
3129 T* pointer() {
return GetOrCreateValue(); }
3130 const T* pointer()
const {
return GetOrCreateValue(); }
3131 const T&
get()
const {
return *pointer(); }
3137 class ValueHolder :
public ThreadLocalValueHolderBase {
3139 ValueHolder() :
value_() {}
3142 T* pointer() {
return &
value_; }
3150 T* GetOrCreateValue()
const {
3151 return static_cast<ValueHolder*
>(
3152 ThreadLocalRegistry::GetValueOnCurrentThread(
this))->pointer();
3155 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const {
3156 return default_factory_->MakeNewHolder();
3159 class ValueHolderFactory {
3161 ValueHolderFactory() {}
3162 virtual ~ValueHolderFactory() {}
3163 virtual ValueHolder* MakeNewHolder()
const = 0;
3169 class DefaultValueHolderFactory :
public ValueHolderFactory {
3171 DefaultValueHolderFactory() {}
3172 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
3178 class InstanceValueHolderFactory :
public ValueHolderFactory {
3181 virtual ValueHolder* MakeNewHolder()
const {
3182 return new ValueHolder(
value_);
3191 scoped_ptr<ValueHolderFactory> default_factory_;
3196 # elif GTEST_HAS_PTHREAD
3204 owner_ = pthread_self();
3220 void AssertHeld()
const {
3221 GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
3222 <<
"The current thread is not holding the mutex @" <<
this;
3243 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
3244 extern ::testing::internal::MutexBase mutex
3247 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
3248 ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false, pthread_t() }
3252 class Mutex :
public MutexBase {
3271 class GTestMutexLock {
3273 explicit GTestMutexLock(MutexBase*
mutex)
3276 ~GTestMutexLock() {
mutex_->Unlock(); }
3292 class ThreadLocalValueHolderBase {
3294 virtual ~ThreadLocalValueHolderBase() {}
3299 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
3300 delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
3304 template <
typename T>
3308 :
key_(CreateKey()), default_factory_(
new DefaultValueHolderFactory()) {}
3309 explicit ThreadLocal(
const T&
value)
3310 :
key_(CreateKey()),
3311 default_factory_(
new InstanceValueHolderFactory(
value)) {}
3315 DeleteThreadLocalValue(pthread_getspecific(
key_));
3322 T* pointer() {
return GetOrCreateValue(); }
3323 const T* pointer()
const {
return GetOrCreateValue(); }
3324 const T&
get()
const {
return *pointer(); }
3329 class ValueHolder :
public ThreadLocalValueHolderBase {
3331 ValueHolder() :
value_() {}
3334 T* pointer() {
return &
value_; }
3341 static pthread_key_t CreateKey() {
3346 pthread_key_create(&
key, &DeleteThreadLocalValue));
3350 T* GetOrCreateValue()
const {
3351 ThreadLocalValueHolderBase*
const holder =
3352 static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(
key_));
3353 if (holder != NULL) {
3354 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
3357 ValueHolder*
const new_holder = default_factory_->MakeNewHolder();
3358 ThreadLocalValueHolderBase*
const holder_base = new_holder;
3360 return new_holder->pointer();
3363 class ValueHolderFactory {
3365 ValueHolderFactory() {}
3366 virtual ~ValueHolderFactory() {}
3367 virtual ValueHolder* MakeNewHolder()
const = 0;
3373 class DefaultValueHolderFactory :
public ValueHolderFactory {
3375 DefaultValueHolderFactory() {}
3376 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
3382 class InstanceValueHolderFactory :
public ValueHolderFactory {
3385 virtual ValueHolder* MakeNewHolder()
const {
3386 return new ValueHolder(
value_);
3396 const pthread_key_t
key_;
3397 scoped_ptr<ValueHolderFactory> default_factory_;
3402 # endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_
3404 #else // GTEST_IS_THREADSAFE
3419 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
3420 extern ::testing::internal::Mutex mutex
3422 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex
3429 class GTestMutexLock {
3436 template <
typename T>
3449 #endif // GTEST_IS_THREADSAFE
3461 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
3464 # define GTEST_ELLIPSIS_NEEDS_POD_ 1
3466 # define GTEST_CAN_COMPARE_NULL 1
3473 #if defined(__SYMBIAN32__) || defined(__IBMCPP__)
3474 # define GTEST_NEEDS_IS_POINTER_ 1
3477 template <
bool bool_value>
3480 static const bool value = bool_value;
3487 template <
typename T>
3490 template <
typename T>
3493 template <
typename Iterator>
3498 template <
typename T>
3503 template <
typename T>
3508 #if GTEST_OS_WINDOWS
3509 # define GTEST_PATH_SEP_ "\\"
3510 # define GTEST_HAS_ALT_PATH_SEP_ 1
3514 # define GTEST_PATH_SEP_ "/"
3515 # define GTEST_HAS_ALT_PATH_SEP_ 0
3517 #endif // GTEST_OS_WINDOWS
3527 return isalpha(
static_cast<unsigned char>(
ch)) != 0;
3530 return isalnum(
static_cast<unsigned char>(
ch)) != 0;
3533 return isdigit(
static_cast<unsigned char>(
ch)) != 0;
3536 return islower(
static_cast<unsigned char>(
ch)) != 0;
3539 return isspace(
static_cast<unsigned char>(
ch)) != 0;
3542 return isupper(
static_cast<unsigned char>(
ch)) != 0;
3545 return isxdigit(
static_cast<unsigned char>(
ch)) != 0;
3548 const unsigned char low_byte =
static_cast<unsigned char>(
ch);
3549 return ch == low_byte &&
isxdigit(low_byte) != 0;
3553 return static_cast<char>(tolower(
static_cast<unsigned char>(
ch)));
3556 return static_cast<char>(toupper(
static_cast<unsigned char>(
ch)));
3576 #if GTEST_OS_WINDOWS
3580 # ifdef __BORLANDC__
3581 inline int IsATTY(
int fd) {
return isatty(fd); }
3582 inline int StrCaseCmp(
const char* s1,
const char* s2) {
3583 return stricmp(s1, s2);
3585 inline char*
StrDup(
const char* src) {
return strdup(src); }
3586 # else // !__BORLANDC__
3587 # if GTEST_OS_WINDOWS_MOBILE
3588 inline int IsATTY(
int ) {
return 0; }
3590 inline int IsATTY(
int fd) {
return _isatty(fd); }
3591 # endif // GTEST_OS_WINDOWS_MOBILE
3592 inline int StrCaseCmp(
const char* s1,
const char* s2) {
3593 return _stricmp(s1, s2);
3595 inline char*
StrDup(
const char* src) {
return _strdup(src); }
3596 # endif // __BORLANDC__
3598 # if GTEST_OS_WINDOWS_MOBILE
3605 inline int RmDir(
const char* dir) {
return _rmdir(dir); }
3607 return (_S_IFDIR & st.st_mode) != 0;
3609 # endif // GTEST_OS_WINDOWS_MOBILE
3616 inline int IsATTY(
int fd) {
return isatty(fd); }
3618 inline int StrCaseCmp(
const char* s1,
const char* s2) {
3621 inline char*
StrDup(
const char* src) {
return strdup(src); }
3622 inline int RmDir(
const char* dir) {
return rmdir(dir); }
3623 inline bool IsDir(
const StatStruct& st) {
return S_ISDIR(st.st_mode); }
3625 #endif // GTEST_OS_WINDOWS
3632 return strncpy(
dest, src,
n);
3639 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
3640 inline int ChDir(
const char* dir) {
return chdir(dir); }
3645 #if !GTEST_OS_WINDOWS_MOBILE
3652 #if !GTEST_OS_WINDOWS_MOBILE
3653 inline int Read(
int fd,
void*
buf,
unsigned int count) {
3656 inline int Write(
int fd,
const void*
buf,
unsigned int count) {
3659 inline int Close(
int fd) {
return close(fd); }
3660 inline const char*
StrError(
int errnum) {
return strerror(errnum); }
3662 inline const char*
GetEnv(
const char*
name) {
3663 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE | GTEST_OS_WINDOWS_RT
3665 static_cast<void>(
name);
3667 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
3671 return (
env != NULL &&
env[0] !=
'\0') ?
env : NULL;
3679 #if GTEST_OS_WINDOWS_MOBILE
3685 inline void Abort() { abort(); }
3686 #endif // GTEST_OS_WINDOWS_MOBILE
3695 #if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE
3697 # define GTEST_SNPRINTF_(buffer, size, format, ...) \
3698 _snprintf_s(buffer, size, size, format, __VA_ARGS__)
3699 #elif defined(_MSC_VER)
3702 # define GTEST_SNPRINTF_ _snprintf
3704 # define GTEST_SNPRINTF_ snprintf
3735 template <
size_t size>
3736 class TypeWithSize {
3759 #if GTEST_OS_WINDOWS
3760 typedef __int64
Int;
3761 typedef unsigned __int64
UInt;
3765 #endif // GTEST_OS_WINDOWS
3778 #if !defined(GTEST_FLAG)
3779 # define GTEST_FLAG(name) FLAGS_gtest_##name
3780 #endif // !defined(GTEST_FLAG)
3782 #if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_)
3783 # define GTEST_USE_OWN_FLAGFILE_FLAG_ 1
3784 #endif // !defined(GTEST_USE_OWN_FLAGFILE_FLAG_)
3786 #if !defined(GTEST_DECLARE_bool_)
3787 # define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver
3790 # define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
3791 # define GTEST_DECLARE_int32_(name) \
3792 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
3793 #define GTEST_DECLARE_string_(name) \
3794 GTEST_API_ extern ::std::string GTEST_FLAG(name)
3797 #define GTEST_DEFINE_bool_(name, default_val, doc) \
3798 GTEST_API_ bool GTEST_FLAG(name) = (default_val)
3799 #define GTEST_DEFINE_int32_(name, default_val, doc) \
3800 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
3801 #define GTEST_DEFINE_string_(name, default_val, doc) \
3802 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)
3804 #endif // !defined(GTEST_DECLARE_bool_)
3807 #if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)
3808 # define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)
3809 # define GTEST_LOCK_EXCLUDED_(locks)
3810 #endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)
3829 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
3832 # include <stdlib.h>
3833 # include <sys/types.h>
3834 # include <sys/wait.h>
3835 # include <unistd.h>
3836 #endif // GTEST_OS_LINUX
3838 #if GTEST_HAS_EXCEPTIONS
3839 # include <stdexcept>
3897 #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
3898 #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
3905 void operator<<(
const testing::internal::Secret&,
int);
3939 typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
3947 *ss_ <<
msg.GetString();
3955 #if GTEST_OS_SYMBIAN
3957 template <
typename T>
3964 template <
typename T>
3980 using ::operator <<;
3998 template <
typename T>
4000 if (pointer == NULL) {
4007 #endif // GTEST_OS_SYMBIAN
4022 return *
this << (
b ?
"true" :
"false");
4030 #if GTEST_HAS_STD_WSTRING
4034 #endif // GTEST_HAS_STD_WSTRING
4036 #if GTEST_HAS_GLOBAL_WSTRING
4040 #endif // GTEST_HAS_GLOBAL_WSTRING
4050 #if GTEST_OS_SYMBIAN
4055 template <
typename T>
4057 if (pointer == NULL) {
4063 template <
typename T>
4068 using ::operator <<;
4071 #endif // GTEST_OS_SYMBIAN
4078 void operator=(
const Message&);
4092 template <
typename T>
4094 return (
Message() << streamable).GetString();
4100 #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
4141 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
4142 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
4168 static const char* CloneCString(
const char*
c_str);
4170 #if GTEST_OS_WINDOWS_MOBILE
4183 static LPCWSTR AnsiToUtf16(
const char*
c_str);
4193 static const char* Utf16ToAnsi(LPCWSTR utf16_str);
4201 static bool CStringEquals(
const char* lhs,
const char* rhs);
4207 static std::string ShowWideCString(
const wchar_t* wide_c_str);
4215 static bool WideCStringEquals(
const wchar_t* lhs,
const wchar_t* rhs);
4238 static bool CaseInsensitiveWideCStringEquals(
const wchar_t* lhs,
4239 const wchar_t* rhs);
4243 static bool EndsWithCaseInsensitive(
4266 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
4306 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
4307 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
4343 const char*
c_str()
const {
return pathname_.c_str(); }
4376 bool IsEmpty()
const {
return pathname_.empty(); }
4381 FilePath RemoveTrailingPathSeparator()
const;
4389 FilePath RemoveDirectoryName()
const;
4409 bool CreateDirectoriesRecursively()
const;
4415 bool CreateFolder()
const;
4419 bool FileOrDirectoryExists()
const;
4423 bool DirectoryExists()
const;
4428 bool IsDirectory()
const;
4432 bool IsRootDirectory()
const;
4435 bool IsAbsolutePath()
const;
4463 const char* FindLastPathSeparator()
const;
4471 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
4515 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
4516 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
4521 # if GTEST_HAS_CXXABI_H_
4522 # include <cxxabi.h>
4523 # elif defined(__HP_aCC)
4524 # include <acxx_demangle.h>
4525 # endif // GTEST_HASH_CXXABI_H_
4533 template <
typename T>
4537 const char*
const name =
typeid(
T).
name();
4538 # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
4542 # if GTEST_HAS_CXXABI_H_
4544 # endif // GTEST_HAS_CXXABI_H_
4547 free(readable_name);
4551 # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
4557 # endif // GTEST_HAS_RTTI
4560 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
4566 template <
typename T1,
typename T2>
4567 struct AssertTypeEq;
4569 template <
typename T>
4570 struct AssertTypeEq<
T,
T> {
4592 template <
typename T1>
4595 typedef Types0 Tail;
4597 template <
typename T1,
typename T2>
4600 typedef Types1<T2> Tail;
4603 template <
typename T1,
typename T2,
typename T3>
4606 typedef Types2<T2, T3> Tail;
4609 template <
typename T1,
typename T2,
typename T3,
typename T4>
4612 typedef Types3<T2, T3, T4> Tail;
4615 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4618 typedef Types4<T2, T3, T4, T5> Tail;
4621 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4625 typedef Types5<T2, T3, T4, T5, T6> Tail;
4628 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4629 typename T6,
typename T7>
4632 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
4635 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4636 typename T6,
typename T7,
typename T8>
4639 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
4642 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4643 typename T6,
typename T7,
typename T8,
typename T9>
4646 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
4649 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4650 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4653 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
4656 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4657 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4661 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
4664 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4665 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4666 typename T11,
typename T12>
4669 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
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>
4677 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
4680 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4681 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4682 typename T11,
typename T12,
typename T13,
typename T14>
4685 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
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>
4693 typedef Types14<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4697 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4698 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4699 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4703 typedef Types15<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4707 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4708 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4709 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4710 typename T16,
typename T17>
4713 typedef Types16<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4717 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4718 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4719 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4720 typename T16,
typename T17,
typename T18>
4723 typedef Types17<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4724 T16, T17, T18> Tail;
4727 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4728 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4729 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4730 typename T16,
typename T17,
typename T18,
typename T19>
4733 typedef Types18<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4734 T16, T17, T18, T19> Tail;
4737 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4738 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4739 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4740 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
4743 typedef Types19<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4744 T16, T17, T18, T19, T20> Tail;
4747 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4748 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4749 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4750 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4754 typedef Types20<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4755 T16, T17, T18, T19, T20, T21> Tail;
4758 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4759 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4760 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4761 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4762 typename T21,
typename T22>
4765 typedef Types21<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4766 T16, T17, T18, T19, T20, T21, T22> Tail;
4769 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4770 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4771 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4772 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4773 typename T21,
typename T22,
typename T23>
4776 typedef Types22<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4777 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
4780 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4781 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4782 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4783 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4784 typename T21,
typename T22,
typename T23,
typename T24>
4787 typedef Types23<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4788 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
4791 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4792 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4793 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4794 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4795 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
4798 typedef Types24<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4799 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
4802 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4803 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4804 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4805 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4806 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4810 typedef Types25<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4811 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
4814 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4815 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4816 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4817 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4818 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4819 typename T26,
typename T27>
4822 typedef Types26<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4823 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
4826 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4827 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4828 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4829 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4830 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4831 typename T26,
typename T27,
typename T28>
4834 typedef Types27<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4835 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
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,
typename T25,
4843 typename T26,
typename T27,
typename T28,
typename T29>
4846 typedef Types28<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4847 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
4851 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4852 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4853 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4854 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4855 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4856 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
4859 typedef Types29<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4860 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4864 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4865 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4866 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4867 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4868 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4869 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4873 typedef Types30<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4874 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4878 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4879 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4880 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4881 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4882 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4883 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4884 typename T31,
typename T32>
4887 typedef Types31<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4888 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4889 T30, T31, T32> Tail;
4892 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4893 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4894 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4895 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4896 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4897 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4898 typename T31,
typename T32,
typename T33>
4901 typedef Types32<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4902 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4903 T30, T31, T32, T33> Tail;
4906 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4907 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4908 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4909 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4910 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4911 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4912 typename T31,
typename T32,
typename T33,
typename T34>
4915 typedef Types33<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4916 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4917 T30, T31, T32, T33, T34> Tail;
4920 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4921 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4922 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4923 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4924 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4925 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4926 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
4929 typedef Types34<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4930 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4931 T30, T31, T32, T33, T34, T35> Tail;
4934 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4935 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4936 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4937 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4938 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4939 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4940 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4944 typedef Types35<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4945 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4946 T30, T31, T32, T33, T34, T35, T36> Tail;
4949 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4950 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4951 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4952 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4953 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4954 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4955 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4956 typename T36,
typename T37>
4959 typedef Types36<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4960 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4961 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
4964 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4965 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4966 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4967 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4968 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4969 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4970 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4971 typename T36,
typename T37,
typename T38>
4974 typedef Types37<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4975 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4976 T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
4979 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4980 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4981 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4982 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4983 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4984 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4985 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4986 typename T36,
typename T37,
typename T38,
typename T39>
4989 typedef Types38<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4990 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4991 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
4994 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4995 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4996 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4997 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4998 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4999 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5000 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5001 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
5004 typedef Types39<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5005 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5006 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5009 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5010 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5011 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5012 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5013 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5014 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5015 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5016 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5020 typedef Types40<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5021 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5022 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5025 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5026 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5027 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5028 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5029 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5030 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5031 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5032 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5033 typename T41,
typename T42>
5036 typedef Types41<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5037 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5038 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
5041 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5042 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5043 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5044 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5045 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5046 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5047 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5048 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5049 typename T41,
typename T42,
typename T43>
5052 typedef Types42<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5053 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5054 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5058 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5059 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5060 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5061 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5062 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5063 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5064 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5065 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5066 typename T41,
typename T42,
typename T43,
typename T44>
5069 typedef Types43<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5070 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5071 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5075 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5076 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5077 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5078 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5079 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5080 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5081 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5082 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5083 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
5086 typedef Types44<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5087 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5088 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5092 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5093 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5094 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5095 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5096 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5097 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5098 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5099 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5100 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5104 typedef Types45<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5105 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5106 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5107 T44, T45, T46> Tail;
5110 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5111 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5112 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5113 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5114 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5115 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5116 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5117 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5118 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5119 typename T46,
typename T47>
5122 typedef Types46<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5123 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5124 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5125 T44, T45, T46, T47> Tail;
5128 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5129 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5130 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5131 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5132 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5133 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5134 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5135 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5136 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5137 typename T46,
typename T47,
typename T48>
5140 typedef Types47<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5141 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5142 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5143 T44, T45, T46, T47, T48> Tail;
5146 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5147 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5148 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5149 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5150 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5151 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5152 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5153 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5154 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5155 typename T46,
typename T47,
typename T48,
typename T49>
5158 typedef Types48<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5159 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5160 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5161 T44, T45, T46, T47, T48, T49> Tail;
5164 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5165 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5166 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5167 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5168 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5169 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5170 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5171 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5172 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5173 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
5176 typedef Types49<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5177 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5178 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5179 T44, T45, T46, T47, T48, T49, T50> Tail;
5224 typedef internal::Types50<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5225 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5226 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5227 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>
type;
5244 typedef internal::Types0
type;
5246 template <
typename T1>
5260 typedef internal::Types1<T1>
type;
5262 template <
typename T1,
typename T2>
5276 typedef internal::Types2<T1, T2>
type;
5278 template <
typename T1,
typename T2,
typename T3>
5291 typedef internal::Types3<T1, T2, T3>
type;
5293 template <
typename T1,
typename T2,
typename T3,
typename T4>
5306 typedef internal::Types4<T1, T2, T3, T4>
type;
5308 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
5321 typedef internal::Types5<T1, T2, T3, T4, T5>
type;
5323 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5337 typedef internal::Types6<T1, T2, T3, T4, T5, T6>
type;
5339 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5340 typename T6,
typename T7>
5353 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7>
type;
5355 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5356 typename T6,
typename T7,
typename T8>
5357 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8,
internal::
None,
internal::None,
5368 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8>
type;
5370 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5371 typename T6,
typename T7,
typename T8,
typename T9>
5372 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9,
internal::
None,
5383 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9>
type;
5385 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5386 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
5387 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10,
internal::
None,
5398 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
type;
5400 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5401 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5403 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
internal::
None,
5414 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
type;
5416 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5417 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5418 typename T11,
typename T12>
5419 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
internal::
None,
5430 typedef internal::Types12<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
5433 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5434 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5435 typename T11,
typename T12,
typename T13>
5436 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
5447 typedef internal::Types13<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5450 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5451 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5452 typename T11,
typename T12,
typename T13,
typename T14>
5453 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5463 typedef internal::Types14<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5466 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5467 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5468 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
5469 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5479 typedef internal::Types15<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5480 T13, T14, T15>
type;
5482 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5483 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5484 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5486 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5496 typedef internal::Types16<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5497 T13, T14, T15, T16>
type;
5499 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5500 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5501 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5502 typename T16,
typename T17>
5503 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5513 typedef internal::Types17<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5514 T13, T14, T15, T16, T17>
type;
5516 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5517 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5518 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5519 typename T16,
typename T17,
typename T18>
5520 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5530 typedef internal::Types18<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5531 T13, T14, T15, T16, T17, T18>
type;
5533 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5534 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5535 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5536 typename T16,
typename T17,
typename T18,
typename T19>
5537 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5546 typedef internal::Types19<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5547 T13, T14, T15, T16, T17, T18, T19>
type;
5549 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5550 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5551 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5552 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
5553 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5562 typedef internal::Types20<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5563 T13, T14, T15, T16, T17, T18, T19, T20>
type;
5565 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5566 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5567 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5568 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5570 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5579 typedef internal::Types21<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5580 T13, T14, T15, T16, T17, T18, T19, T20, T21>
type;
5582 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5583 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5584 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5585 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5586 typename T21,
typename T22>
5587 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5596 typedef internal::Types22<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5597 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>
type;
5599 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5600 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5601 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5602 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5603 typename T21,
typename T22,
typename T23>
5604 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5605 T16, T17, T18, T19, T20, T21, T22, T23,
internal::
None,
internal::None,
5613 typedef internal::Types23<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5614 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>
type;
5616 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5617 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5618 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5619 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5620 typename T21,
typename T22,
typename T23,
typename T24>
5621 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5622 T16, T17, T18, T19, T20, T21, T22, T23, T24,
internal::
None,
5630 typedef internal::Types24<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5631 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>
type;
5633 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5634 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5635 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5636 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5637 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
5638 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5639 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
internal::
None,
5646 typedef internal::Types25<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5647 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>
type;
5649 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5650 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5651 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5652 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5653 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5655 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5656 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
internal::
None,
5663 typedef internal::Types26<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5664 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
5667 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5668 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5669 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5670 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5671 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5672 typename T26,
typename T27>
5673 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5674 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
internal::
None,
5681 typedef internal::Types27<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5682 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5685 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5686 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5687 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5688 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5689 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5690 typename T26,
typename T27,
typename T28>
5691 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5692 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5699 typedef internal::Types28<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5700 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5703 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5704 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5705 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5706 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5707 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5708 typename T26,
typename T27,
typename T28,
typename T29>
5709 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5710 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5717 typedef internal::Types29<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5718 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5719 T27, T28, T29>
type;
5721 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5722 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5723 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5724 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5725 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5726 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
5727 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5728 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5734 typedef internal::Types30<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5735 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5736 T27, T28, T29, T30>
type;
5738 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5739 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5740 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5741 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5742 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5743 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5745 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5746 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5752 typedef internal::Types31<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5753 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5754 T27, T28, T29, T30, T31>
type;
5756 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5757 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5758 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5759 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5760 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5761 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5762 typename T31,
typename T32>
5763 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5764 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5770 typedef internal::Types32<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5771 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5772 T27, T28, T29, T30, T31, T32>
type;
5774 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5775 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5776 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5777 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5778 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5779 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5780 typename T31,
typename T32,
typename T33>
5781 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5782 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5788 typedef internal::Types33<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5789 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5790 T27, T28, T29, T30, T31, T32, T33>
type;
5792 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5793 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5794 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5795 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5796 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5797 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5798 typename T31,
typename T32,
typename T33,
typename T34>
5799 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5800 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5806 typedef internal::Types34<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5807 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5808 T27, T28, T29, T30, T31, T32, T33, T34>
type;
5810 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5811 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5812 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5813 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5814 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5815 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5816 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
5817 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5818 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5823 typedef internal::Types35<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5824 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5825 T27, T28, T29, T30, T31, T32, T33, T34, T35>
type;
5827 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5828 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5829 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5830 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5831 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5832 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5833 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5835 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5836 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5841 typedef internal::Types36<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5842 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5843 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>
type;
5845 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5846 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5847 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5848 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5849 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5850 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5851 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5852 typename T36,
typename T37>
5853 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5854 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5859 typedef internal::Types37<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5860 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5861 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>
type;
5863 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5864 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5865 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5866 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5867 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5868 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5869 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5870 typename T36,
typename T37,
typename T38>
5871 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5872 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5873 T31, T32, T33, T34, T35, T36, T37, T38,
internal::
None,
internal::None,
5877 typedef internal::Types38<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5878 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5879 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>
type;
5881 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5882 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5883 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5884 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5885 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5886 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5887 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5888 typename T36,
typename T37,
typename T38,
typename T39>
5889 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5890 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5891 T31, T32, T33, T34, T35, T36, T37, T38, T39,
internal::
None,
5895 typedef internal::Types39<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5896 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5897 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>
type;
5899 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5900 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5901 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5902 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5903 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5904 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5905 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5906 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
5907 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5908 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5909 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
internal::
None,
5913 typedef internal::Types40<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5914 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5915 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
5918 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5919 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5920 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5921 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5922 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5923 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5924 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5925 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5927 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5928 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5929 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
internal::
None,
5932 typedef internal::Types41<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5933 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5934 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5937 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5938 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5939 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5940 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5941 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5942 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5943 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5944 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5945 typename T41,
typename T42>
5946 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5947 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5948 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
internal::
None,
5951 typedef internal::Types42<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5952 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5953 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5956 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5957 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5958 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5959 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5960 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5961 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5962 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5963 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5964 typename T41,
typename T42,
typename T43>
5965 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5966 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5967 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
5970 typedef internal::Types43<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5971 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5972 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5973 T41, T42, T43>
type;
5975 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5976 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5977 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5978 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5979 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5980 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5981 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5982 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5983 typename T41,
typename T42,
typename T43,
typename T44>
5984 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5985 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5986 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
5989 typedef internal::Types44<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
5990 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5991 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5992 T41, T42, T43, T44>
type;
5994 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5995 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5996 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5997 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5998 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5999 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6000 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6001 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6002 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
6003 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6004 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
6005 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
6008 typedef internal::Types45<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
6009 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6010 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6011 T41, T42, T43, T44, T45>
type;
6013 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6014 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6015 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6016 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6017 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6018 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6019 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6020 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6021 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6023 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6024 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
6025 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
6027 typedef internal::Types46<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
6028 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6029 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6030 T41, T42, T43, T44, T45, T46>
type;
6032 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6033 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6034 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6035 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6036 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6037 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6038 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6039 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6040 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6041 typename T46,
typename T47>
6042 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6043 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
6044 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
6046 typedef internal::Types47<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
6047 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6048 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6049 T41, T42, T43, T44, T45, T46, T47>
type;
6051 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6052 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6053 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6054 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6055 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6056 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6057 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6058 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6059 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6060 typename T46,
typename T47,
typename T48>
6061 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6062 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
6063 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
6065 typedef internal::Types48<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
6066 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6067 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6068 T41, T42, T43, T44, T45, T46, T47, T48>
type;
6070 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6071 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6072 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6073 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6074 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6075 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6076 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6077 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6078 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6079 typename T46,
typename T47,
typename T48,
typename T49>
6080 struct Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
6081 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
6082 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
6084 typedef internal::Types49<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
6085 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6086 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6087 T41, T42, T43, T44, T45, T46, T47, T48, T49>
type;
6092 # define GTEST_TEMPLATE_ template <typename T> class
6102 template <GTEST_TEMPLATE_ Tmpl>
6103 struct TemplateSel {
6104 template <
typename T>
6106 typedef Tmpl<T>
type;
6110 # define GTEST_BIND_(TmplSel, T) \
6111 TmplSel::template Bind<T>::type
6117 template <
typename T>
6128 struct Templates0 {};
6132 template <GTEST_TEMPLATE_ T1>
6134 typedef TemplateSel<T1> Head;
6135 typedef Templates0 Tail;
6137 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
6139 typedef TemplateSel<T1> Head;
6140 typedef Templates1<T2> Tail;
6143 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
6145 typedef TemplateSel<T1> Head;
6146 typedef Templates2<T2, T3> Tail;
6152 typedef TemplateSel<T1> Head;
6153 typedef Templates3<T2, T3, T4> Tail;
6159 typedef TemplateSel<T1> Head;
6160 typedef Templates4<T2, T3, T4, T5> Tail;
6166 typedef TemplateSel<T1> Head;
6167 typedef Templates5<T2, T3, T4, T5, T6> Tail;
6174 typedef TemplateSel<T1> Head;
6175 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
6182 typedef TemplateSel<T1> Head;
6183 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
6190 typedef TemplateSel<T1> Head;
6191 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
6198 struct Templates10 {
6199 typedef TemplateSel<T1> Head;
6200 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
6207 struct Templates11 {
6208 typedef TemplateSel<T1> Head;
6209 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
6216 struct Templates12 {
6217 typedef TemplateSel<T1> Head;
6218 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
6226 struct Templates13 {
6227 typedef TemplateSel<T1> Head;
6228 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
6236 struct Templates14 {
6237 typedef TemplateSel<T1> Head;
6238 typedef Templates13<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
6247 struct Templates15 {
6248 typedef TemplateSel<T1> Head;
6249 typedef Templates14<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6259 struct Templates16 {
6260 typedef TemplateSel<T1> Head;
6261 typedef Templates15<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6271 struct Templates17 {
6272 typedef TemplateSel<T1> Head;
6273 typedef Templates16<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6274 T15, T16, T17> Tail;
6283 struct Templates18 {
6284 typedef TemplateSel<T1> Head;
6285 typedef Templates17<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6286 T15, T16, T17, T18> Tail;
6296 struct Templates19 {
6297 typedef TemplateSel<T1> Head;
6298 typedef Templates18<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6299 T15, T16, T17, T18, T19> Tail;
6309 struct Templates20 {
6310 typedef TemplateSel<T1> Head;
6311 typedef Templates19<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6312 T15, T16, T17, T18, T19, T20> Tail;
6322 struct Templates21 {
6323 typedef TemplateSel<T1> Head;
6324 typedef Templates20<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6325 T15, T16, T17, T18, T19, T20, T21> Tail;
6336 struct Templates22 {
6337 typedef TemplateSel<T1> Head;
6338 typedef Templates21<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6339 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
6350 struct Templates23 {
6351 typedef TemplateSel<T1> Head;
6352 typedef Templates22<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6353 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
6364 struct Templates24 {
6365 typedef TemplateSel<T1> Head;
6366 typedef Templates23<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6367 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
6379 struct Templates25 {
6380 typedef TemplateSel<T1> Head;
6381 typedef Templates24<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6382 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
6394 struct Templates26 {
6395 typedef TemplateSel<T1> Head;
6396 typedef Templates25<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6397 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
6409 struct Templates27 {
6410 typedef TemplateSel<T1> Head;
6411 typedef Templates26<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6412 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
6425 struct Templates28 {
6426 typedef TemplateSel<T1> Head;
6427 typedef Templates27<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6428 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6442 struct Templates29 {
6443 typedef TemplateSel<T1> Head;
6444 typedef Templates28<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6445 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6459 struct Templates30 {
6460 typedef TemplateSel<T1> Head;
6461 typedef Templates29<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6462 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6477 struct Templates31 {
6478 typedef TemplateSel<T1> Head;
6479 typedef Templates30<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6480 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6481 T29, T30, T31> Tail;
6495 struct Templates32 {
6496 typedef TemplateSel<T1> Head;
6497 typedef Templates31<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6498 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6499 T29, T30, T31, T32> Tail;
6513 struct Templates33 {
6514 typedef TemplateSel<T1> Head;
6515 typedef Templates32<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6516 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6517 T29, T30, T31, T32, T33> Tail;
6532 struct Templates34 {
6533 typedef TemplateSel<T1> Head;
6534 typedef Templates33<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6535 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6536 T29, T30, T31, T32, T33, T34> Tail;
6551 struct Templates35 {
6552 typedef TemplateSel<T1> Head;
6553 typedef Templates34<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6554 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6555 T29, T30, T31, T32, T33, T34, T35> Tail;
6570 struct Templates36 {
6571 typedef TemplateSel<T1> Head;
6572 typedef Templates35<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6573 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6574 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
6590 struct Templates37 {
6591 typedef TemplateSel<T1> Head;
6592 typedef Templates36<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6593 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6594 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
6610 struct Templates38 {
6611 typedef TemplateSel<T1> Head;
6612 typedef Templates37<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6613 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6614 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
6630 struct Templates39 {
6631 typedef TemplateSel<T1> Head;
6632 typedef Templates38<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6633 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6634 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
6651 struct Templates40 {
6652 typedef TemplateSel<T1> Head;
6653 typedef Templates39<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6654 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6655 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
6672 struct Templates41 {
6673 typedef TemplateSel<T1> Head;
6674 typedef Templates40<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6675 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6676 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
6693 struct Templates42 {
6694 typedef TemplateSel<T1> Head;
6695 typedef Templates41<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6696 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6697 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6716 struct Templates43 {
6717 typedef TemplateSel<T1> Head;
6718 typedef Templates42<
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,
6720 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6739 struct Templates44 {
6740 typedef TemplateSel<T1> Head;
6741 typedef Templates43<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6742 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6743 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6762 struct Templates45 {
6763 typedef TemplateSel<T1> Head;
6764 typedef Templates44<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6765 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6766 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6767 T43, T44, T45> Tail;
6786 struct Templates46 {
6787 typedef TemplateSel<T1> Head;
6788 typedef Templates45<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6789 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6790 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6791 T43, T44, T45, T46> Tail;
6810 struct Templates47 {
6811 typedef TemplateSel<T1> Head;
6812 typedef Templates46<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6813 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6814 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6815 T43, T44, T45, T46, T47> Tail;
6834 struct Templates48 {
6835 typedef TemplateSel<T1> Head;
6836 typedef Templates47<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6837 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6838 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6839 T43, T44, T45, T46, T47, T48> Tail;
6859 struct Templates49 {
6860 typedef TemplateSel<T1> Head;
6861 typedef Templates48<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6862 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6863 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6864 T43, T44, T45, T46, T47, T48, T49> Tail;
6884 struct Templates50 {
6885 typedef TemplateSel<T1> Head;
6886 typedef Templates49<
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6887 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6888 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
6889 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
6932 typedef Templates50<
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, T48, T49, T50>
type;
6939 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6940 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6941 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6942 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6943 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6945 typedef Templates0
type;
6947 template <GTEST_TEMPLATE_ T1>
6948 struct Templates<
T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6949 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6950 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6951 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6952 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6954 typedef Templates1<T1>
type;
6956 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
6957 struct Templates<
T1,
T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6958 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6959 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6960 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6961 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6963 typedef Templates2<T1, T2>
type;
6965 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
6966 struct Templates<
T1,
T2,
T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6967 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6968 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6969 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6970 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6971 typedef Templates3<T1, T2, T3>
type;
6975 struct Templates<
T1,
T2,
T3,
T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6976 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6977 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6978 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6979 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6980 typedef Templates4<T1, T2, T3, T4>
type;
6984 struct Templates<
T1,
T2,
T3,
T4,
T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6985 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6986 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6987 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6988 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6989 typedef Templates5<T1, T2, T3, T4, T5>
type;
6993 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
6994 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6995 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6996 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6997 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6998 typedef Templates6<T1, T2, T3, T4, T5, T6>
type;
7003 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
7004 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7005 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7006 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7007 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7008 typedef Templates7<T1, T2, T3, T4, T5, T6, T7>
type;
7013 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
7014 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7015 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7016 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7017 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7018 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8>
type;
7023 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
7024 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7025 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7026 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7027 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7028 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9>
type;
7034 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
7035 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7036 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7037 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7038 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7039 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
type;
7045 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
7046 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7047 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7048 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7049 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7050 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
type;
7056 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
7057 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7058 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7059 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7060 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7061 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
type;
7068 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
7069 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7070 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7071 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7072 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7073 typedef Templates13<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
7081 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7082 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7083 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7084 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7085 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7086 typedef Templates14<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7094 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7095 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7096 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7097 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7098 NoneT, NoneT, NoneT, NoneT, NoneT> {
7099 typedef Templates15<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7108 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7109 T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7110 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7111 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7112 NoneT, NoneT, NoneT, NoneT, NoneT> {
7113 typedef Templates16<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7114 T14, T15, T16>
type;
7122 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7123 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7124 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7125 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7126 NoneT, NoneT, NoneT, NoneT, NoneT> {
7127 typedef Templates17<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7128 T14, T15, T16, T17>
type;
7136 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7137 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7138 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7139 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7140 NoneT, NoneT, NoneT, NoneT> {
7141 typedef Templates18<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7142 T14, T15, T16, T17, T18>
type;
7151 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7152 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7153 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7154 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7155 NoneT, NoneT, NoneT, NoneT> {
7156 typedef Templates19<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7157 T14, T15, T16, T17, T18, T19>
type;
7166 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7167 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7168 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7169 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7170 NoneT, NoneT, NoneT, NoneT> {
7171 typedef Templates20<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7172 T14, T15, T16, T17, T18, T19, T20>
type;
7181 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7182 T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
7183 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7184 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7185 NoneT, NoneT, NoneT, NoneT> {
7186 typedef Templates21<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7187 T14, T15, T16, T17, T18, T19, T20, T21>
type;
7197 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7198 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
7199 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7200 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7201 NoneT, NoneT, NoneT> {
7202 typedef Templates22<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7203 T14, T15, T16, T17, T18, T19, T20, T21, T22>
type;
7213 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7214 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
7215 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7216 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7217 NoneT, NoneT, NoneT> {
7218 typedef Templates23<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7219 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>
type;
7229 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7230 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
7231 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7232 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7233 NoneT, NoneT, NoneT> {
7234 typedef Templates24<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7235 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>
type;
7246 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7247 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
7248 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7249 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7251 typedef Templates25<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7252 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>
type;
7263 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7264 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
7265 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7266 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7268 typedef Templates26<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7269 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26>
type;
7280 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7281 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
7282 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7283 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7285 typedef Templates27<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7286 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
7299 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7300 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
7301 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7302 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7304 typedef Templates28<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7305 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7318 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7319 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7320 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7321 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7323 typedef Templates29<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7324 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7337 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7338 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7339 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7340 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7341 typedef Templates30<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7342 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7343 T28, T29, T30>
type;
7356 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7357 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7358 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7359 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7360 typedef Templates31<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7361 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7362 T28, T29, T30, T31>
type;
7375 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7376 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7377 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7378 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7379 typedef Templates32<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7380 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7381 T28, T29, T30, T31, T32>
type;
7394 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7395 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7396 T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7397 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7398 typedef Templates33<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7399 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7400 T28, T29, T30, T31, T32, T33>
type;
7414 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7415 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7416 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7417 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7418 typedef Templates34<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7419 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7420 T28, T29, T30, T31, T32, T33, T34>
type;
7434 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7435 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7436 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
7437 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7438 typedef Templates35<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7439 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7440 T28, T29, T30, T31, T32, T33, T34, T35>
type;
7454 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7455 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7456 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
7457 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7458 typedef Templates36<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7459 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7460 T28, T29, T30, T31, T32, T33, T34, T35, T36>
type;
7475 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7476 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7477 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
7478 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7479 typedef Templates37<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7480 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7481 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>
type;
7496 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7497 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7498 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
7499 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7500 typedef Templates38<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7501 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7502 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>
type;
7517 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7518 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7519 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
7520 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7521 typedef Templates39<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7522 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7523 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>
type;
7539 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7540 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7541 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
7542 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7543 typedef Templates40<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7544 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7545 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40>
type;
7561 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7562 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7563 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
7564 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7565 typedef Templates41<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7566 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7567 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
7584 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7585 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7586 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
7587 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7588 typedef Templates42<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7589 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7590 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7608 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7609 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7610 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
7611 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7612 typedef Templates43<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7613 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7614 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7632 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7633 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7634 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7635 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
7636 typedef Templates44<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7637 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7638 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7639 T42, T43, T44>
type;
7656 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7657 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7658 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7659 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
7660 typedef Templates45<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7661 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7662 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7663 T42, T43, T44, T45>
type;
7681 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7682 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7683 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7684 T45, T46, NoneT, NoneT, NoneT, NoneT> {
7685 typedef Templates46<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7686 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7687 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7688 T42, T43, T44, T45, T46>
type;
7706 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7707 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7708 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7709 T45, T46, T47, NoneT, NoneT, NoneT> {
7710 typedef Templates47<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7711 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7712 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7713 T42, T43, T44, T45, T46, T47>
type;
7731 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7732 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7733 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7734 T45, T46, T47, T48, NoneT, NoneT> {
7735 typedef Templates48<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7736 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7737 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7738 T42, T43, T44, T45, T46, T47, T48>
type;
7757 struct Templates<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
7758 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
7759 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
7760 T45, T46, T47, T48, T49, NoneT> {
7761 typedef Templates49<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7762 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
7763 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
7764 T42, T43, T44, T45, T46, T47, T48, T49>
type;
7771 template <
typename T>
7773 typedef Types1<T>
type;
7776 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
7777 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
7778 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
7779 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
7780 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
7781 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
7782 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
7783 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
7784 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
7785 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
7786 struct TypeList<
Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
7787 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
7788 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
7789 T44, T45, T46, T47, T48, T49, T50> > {
7790 typedef typename Types<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
7791 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
7792 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
7793 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>
::type type;
7796 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
7801 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
7811 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
7812 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
7814 class ProtocolMessage;
7821 class AssertionResult;
7825 class TestPartResult;
7828 template <
typename T>
7862 #ifdef GTEST_ELLIPSIS_NEEDS_POD_
7865 # define GTEST_IS_NULL_LITERAL_(x) false
7867 # define GTEST_IS_NULL_LITERAL_(x) \
7868 (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)
7869 #endif // GTEST_ELLIPSIS_NEEDS_POD_
7875 #if GTEST_HAS_EXCEPTIONS
7883 class GTEST_API_ GoogleTestFailureException :
public ::std::runtime_error {
7885 explicit GoogleTestFailureException(
const TestPartResult& failure);
7888 #endif // GTEST_HAS_EXCEPTIONS
7909 namespace edit_distance {
7917 const std::vector<size_t>& left,
const std::vector<size_t>& right);
7921 const std::vector<std::string>& left,
7922 const std::vector<std::string>& right);
7926 const std::vector<std::string>& right,
7937 size_t* total_line_count);
7955 const char* actual_expression,
7958 bool ignoring_case);
7963 const char* expression_text,
7964 const char* actual_predicate_value,
7965 const char* expected_predicate_value);
7996 template <
typename RawType>
7997 class FloatingPoint {
8006 static const size_t kBitCount = 8*
sizeof(RawType);
8009 static const size_t kFractionBitCount =
8010 std::numeric_limits<RawType>::digits - 1;
8013 static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
8016 static const Bits kSignBitMask =
static_cast<Bits>(1) << (kBitCount - 1);
8019 static const Bits kFractionBitMask =
8020 ~static_cast<Bits>(0) >> (kExponentBitCount + 1);
8023 static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
8037 static const size_t kMaxUlps = 4;
8055 return fp.u_.value_;
8060 return ReinterpretBits(kExponentBitMask);
8064 static RawType
Max();
8084 return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
8096 if (is_nan() || rhs.is_nan())
return false;
8098 return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
8104 union FloatingPointUnion {
8125 if (kSignBitMask & sam) {
8130 return kSignBitMask | sam;
8138 const Bits biased1 = SignAndMagnitudeToBiased(sam1);
8139 const Bits biased2 = SignAndMagnitudeToBiased(sam2);
8140 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
8143 FloatingPointUnion u_;
8164 typedef const void*
TypeId;
8166 template <
typename T>
8175 template <
typename T>
8176 bool TypeIdHelper<T>::dummy_ =
false;
8181 template <
typename T>
8187 return &(TypeIdHelper<T>::dummy_);
8199 class TestFactoryBase {
8205 virtual Test* CreateTest() = 0;
8216 template <
class TestClass>
8217 class TestFactoryImpl :
public TestFactoryBase {
8222 #if GTEST_OS_WINDOWS
8233 #endif // GTEST_OS_WINDOWS
8265 const char* test_case_name,
8267 const char* type_param,
8268 const char* value_param,
8280 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
8290 bool AddTestName(
const char*
file,
int line,
const char* case_name,
8291 const char* test_name) {
8293 fprintf(
stderr,
"%s Test %s must be defined before "
8294 "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n",
8299 registered_tests_.insert(
8300 ::std::make_pair(test_name, CodeLocation(
file,
line)));
8304 bool TestExists(
const std::string& test_name)
const {
8305 return registered_tests_.count(test_name) > 0;
8308 const CodeLocation& GetCodeLocation(
const std::string& test_name)
const {
8309 RegisteredTestsMap::const_iterator
it = registered_tests_.find(test_name);
8317 const char* VerifyRegisteredTestNames(
8318 const char*
file,
int line,
const char* registered_tests);
8321 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;
8324 RegisteredTestsMap registered_tests_;
8329 inline const char* SkipComma(
const char*
str) {
8330 const char* comma = strchr(
str,
',');
8331 if (comma == NULL) {
8334 while (
IsSpace(*(++comma))) {}
8341 const char* comma = strchr(
str,
',');
8348 ::std::vector< ::std::string>*
dest);
8357 template <GTEST_TEMPLATE_ Fixture,
class TestSel,
typename Types>
8358 class TypeParameterizedTest {
8364 static bool Register(
const char*
prefix,
8365 CodeLocation code_location,
8366 const char* case_name,
const char* test_names,
8368 typedef typename Types::Head
Type;
8378 GetTypeName<Type>().
c_str(),
8381 GetTypeId<FixtureClass>(),
8382 TestClass::SetUpTestCase,
8383 TestClass::TearDownTestCase,
8384 new TestFactoryImpl<TestClass>);
8387 return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail>
8388 ::Register(
prefix, code_location, case_name, test_names,
index + 1);
8393 template <GTEST_TEMPLATE_ Fixture,
class TestSel>
8394 class TypeParameterizedTest<
Fixture, TestSel, Types0> {
8396 static bool Register(
const char* , CodeLocation,
8397 const char* ,
const char* ,
8407 template <GTEST_TEMPLATE_ Fixture,
typename Tests,
typename Types>
8408 class TypeParameterizedTestCase {
8410 static bool Register(
const char*
prefix, CodeLocation code_location,
8412 const char* case_name,
const char* test_names) {
8415 if (!
state->TestExists(test_name)) {
8416 fprintf(
stderr,
"Failed to get code location for test %s.%s at %s.",
8417 case_name, test_name.c_str(),
8419 code_location.line).c_str());
8423 const CodeLocation& test_location =
state->GetCodeLocation(test_name);
8425 typedef typename Tests::Head Head;
8428 TypeParameterizedTest<Fixture, Head, Types>::Register(
8429 prefix, test_location, case_name, test_names, 0);
8432 return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types>
8434 case_name, SkipComma(test_names));
8439 template <GTEST_TEMPLATE_ Fixture,
typename Types>
8440 class TypeParameterizedTestCase<
Fixture, Templates0,
Types> {
8442 static bool Register(
const char* , CodeLocation,
8444 const char* ,
const char* ) {
8449 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
8462 UnitTest* unit_test,
int skip_count);
8478 operator bool()
const {
return true; }
8489 static const UInt32 kMaxRange = 1
u << 31;
8506 template <
typename T1,
typename T2>
8507 struct CompileAssertTypesEqual;
8509 template <
typename T>
8510 struct CompileAssertTypesEqual<
T,
T> {
8516 template <
typename T>
8518 template <
typename T>
8523 #define GTEST_REMOVE_REFERENCE_(T) \
8524 typename ::testing::internal::RemoveReference<T>::type
8529 template <
typename T>
8531 template <
typename T>
8537 template <
typename T,
size_t N>
8542 #if defined(_MSC_VER) && _MSC_VER < 1400
8546 template <
typename T,
size_t N>
8554 #define GTEST_REMOVE_CONST_(T) \
8555 typename ::testing::internal::RemoveConst<T>::type
8558 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
8559 GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))
8564 template <
typename T>
8566 template <
typename T>
8571 #define GTEST_ADD_REFERENCE_(T) \
8572 typename ::testing::internal::AddReference<T>::type
8583 #define GTEST_REFERENCE_TO_CONST_(T) \
8584 GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))
8589 template <
typename From,
typename To>
8610 static char Helper(
To);
8611 static char (&Helper(...))[2];
8616 #if defined(__BORLANDC__)
8620 static const bool value = __is_convertible(From,
To);
8629 #endif // __BORLANDC__
8631 template <
typename From,
typename To>
8637 template <
typename T>
8640 ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||
8641 ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {
8669 typename C::const_iterator* = NULL) {
8690 template <
typename T,
typename U>
8694 template <
typename T,
typename U>
8695 inline bool ArrayEq(
const T& lhs,
const U& rhs) {
return lhs == rhs; }
8698 template <
typename T,
typename U,
size_t N>
8699 inline bool ArrayEq(
const T(&lhs)[
N],
const U(&rhs)[
N]) {
8706 template <
typename T,
typename U>
8707 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs) {
8708 for (
size_t i = 0;
i !=
size;
i++) {
8717 template <
typename Iter,
typename Element>
8730 template <
typename T,
typename U>
8734 template <
typename T,
typename U>
8738 template <
typename T,
typename U,
size_t N>
8746 template <
typename T,
typename U>
8748 for (
size_t i = 0;
i !=
size;
i++) {
8757 struct RelationToSourceReference {};
8758 struct RelationToSourceCopy {};
8768 template <
typename Element>
8774 typedef const Element* const_iterator;
8788 (this->*rhs.clone_)(rhs.array_, rhs.size_);
8792 if (clone_ != &NativeArray::InitRef)
8798 const_iterator
begin()
const {
return array_; }
8801 return size() == rhs.size() &&
8813 Element*
const copy =
new Element[a_size];
8817 clone_ = &NativeArray::InitCopy;
8824 clone_ = &NativeArray::InitRef;
8827 const Element* array_;
8829 void (
NativeArray::*clone_)(
const Element*, size_t);
8837 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \
8838 ::testing::internal::AssertHelper(result_type, file, line, message) \
8839 = ::testing::Message()
8841 #define GTEST_MESSAGE_(message, result_type) \
8842 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
8844 #define GTEST_FATAL_FAILURE_(message) \
8845 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
8847 #define GTEST_NONFATAL_FAILURE_(message) \
8848 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
8850 #define GTEST_SUCCESS_(message) \
8851 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
8856 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
8857 if (::testing::internal::AlwaysTrue()) { statement; }
8859 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \
8860 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8861 if (::testing::internal::ConstCharPtr gtest_msg = "") { \
8862 bool gtest_caught_expected = false; \
8864 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8866 catch (expected_exception const&) { \
8867 gtest_caught_expected = true; \
8871 "Expected: " #statement " throws an exception of type " \
8872 #expected_exception ".\n Actual: it throws a different type."; \
8873 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
8875 if (!gtest_caught_expected) { \
8877 "Expected: " #statement " throws an exception of type " \
8878 #expected_exception ".\n Actual: it throws nothing."; \
8879 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
8882 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
8883 fail(gtest_msg.value)
8885 #define GTEST_TEST_NO_THROW_(statement, fail) \
8886 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8887 if (::testing::internal::AlwaysTrue()) { \
8889 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8892 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
8895 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
8896 fail("Expected: " #statement " doesn't throw an exception.\n" \
8897 " Actual: it throws.")
8899 #define GTEST_TEST_ANY_THROW_(statement, fail) \
8900 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8901 if (::testing::internal::AlwaysTrue()) { \
8902 bool gtest_caught_any = false; \
8904 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8907 gtest_caught_any = true; \
8909 if (!gtest_caught_any) { \
8910 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
8913 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \
8914 fail("Expected: " #statement " throws an exception.\n" \
8915 " Actual: it doesn't.")
8921 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
8922 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8923 if (const ::testing::AssertionResult gtest_ar_ = \
8924 ::testing::AssertionResult(expression)) \
8927 fail(::testing::internal::GetBoolAssertionFailureMessage(\
8928 gtest_ar_, text, #actual, #expected).c_str())
8930 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
8931 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8932 if (::testing::internal::AlwaysTrue()) { \
8933 ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
8934 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8935 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
8936 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
8939 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \
8940 fail("Expected: " #statement " doesn't generate new fatal " \
8941 "failures in the current thread.\n" \
8942 " Actual: it does.")
8945 #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
8946 test_case_name##_##test_name##_Test
8949 #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
8950 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
8952 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
8954 virtual void TestBody();\
8955 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\
8956 GTEST_DISALLOW_COPY_AND_ASSIGN_(\
8957 GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
8960 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
8962 ::testing::internal::MakeAndRegisterTestInfo(\
8963 #test_case_name, #test_name, NULL, NULL, \
8964 ::testing::internal::CodeLocation(__FILE__, __LINE__), \
8966 parent_class::SetUpTestCase, \
8967 parent_class::TearDownTestCase, \
8968 new ::testing::internal::TestFactoryImpl<\
8969 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
8970 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
8972 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
9011 #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
9012 #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
9050 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
9051 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
9066 #if GTEST_HAS_DEATH_TEST
9091 static bool Create(
const char* statement,
const RE* regex,
9094 virtual ~DeathTest() { }
9097 class ReturnSentinel {
9100 ~ReturnSentinel() {
test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
9102 DeathTest*
const test_;
9111 enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
9115 TEST_ENCOUNTERED_RETURN_STATEMENT,
9116 TEST_THREW_EXCEPTION,
9121 virtual TestRole AssumeRole() = 0;
9124 virtual int Wait() = 0;
9133 virtual bool Passed(
bool exit_status_ok) = 0;
9136 virtual void Abort(AbortReason reason) = 0;
9140 static const char* LastMessage();
9152 class DeathTestFactory {
9154 virtual ~DeathTestFactory() { }
9155 virtual bool Create(
const char* statement,
const RE* regex,
9160 class DefaultDeathTestFactory :
public DeathTestFactory {
9162 virtual bool Create(
const char* statement,
const RE* regex,
9168 GTEST_API_ bool ExitedUnsuccessfully(
int exit_status);
9172 # if GTEST_HAS_EXCEPTIONS
9173 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
9175 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
9176 } catch (const ::std::exception& gtest_exception) { \
9179 "\n%s: Caught std::exception-derived exception escaping the " \
9180 "death test statement. Exception message: %s\n", \
9181 ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
9182 gtest_exception.what()); \
9184 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
9186 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
9190 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
9191 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
9197 # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
9198 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9199 if (::testing::internal::AlwaysTrue()) { \
9200 const ::testing::internal::RE& gtest_regex = (regex); \
9201 ::testing::internal::DeathTest* gtest_dt; \
9202 if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \
9203 __FILE__, __LINE__, >est_dt)) { \
9204 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
9206 if (gtest_dt != NULL) { \
9207 ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \
9208 gtest_dt_ptr(gtest_dt); \
9209 switch (gtest_dt->AssumeRole()) { \
9210 case ::testing::internal::DeathTest::OVERSEE_TEST: \
9211 if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
9212 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
9215 case ::testing::internal::DeathTest::EXECUTE_TEST: { \
9216 ::testing::internal::DeathTest::ReturnSentinel \
9217 gtest_sentinel(gtest_dt); \
9218 GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
9219 gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
9227 GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \
9228 fail(::testing::internal::DeathTest::LastMessage())
9236 # define GTEST_EXECUTE_STATEMENT_(statement, regex) \
9237 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9238 if (::testing::internal::AlwaysTrue()) { \
9239 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
9241 ::testing::Message()
9246 class InternalRunDeathTestFlag {
9248 InternalRunDeathTestFlag(
const std::string& a_file,
9253 write_fd_(a_write_fd) {}
9255 ~InternalRunDeathTestFlag() {
9263 int write_fd()
const {
return write_fd_; }
9277 InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
9279 #else // GTEST_HAS_DEATH_TEST
9313 # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
9314 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9315 if (::testing::internal::AlwaysTrue()) { \
9316 GTEST_LOG_(WARNING) \
9317 << "Death tests are not supported on this platform.\n" \
9318 << "Statement '" #statement "' cannot be verified."; \
9319 } else if (::testing::internal::AlwaysFalse()) { \
9320 ::testing::internal::RE::PartialMatch(".*", (regex)); \
9321 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
9324 ::testing::Message()
9326 #endif // GTEST_HAS_DEATH_TEST
9331 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
9342 #if GTEST_HAS_DEATH_TEST
9458 # define ASSERT_EXIT(statement, predicate, regex) \
9459 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)
9463 # define EXPECT_EXIT(statement, predicate, regex) \
9464 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)
9469 # define ASSERT_DEATH(statement, regex) \
9470 ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
9474 # define EXPECT_DEATH(statement, regex) \
9475 EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
9483 bool operator()(
int exit_status)
const;
9486 void operator=(
const ExitedWithCode& other);
9488 const int exit_code_;
9491 # if !GTEST_OS_WINDOWS
9496 explicit KilledBySignal(
int signum);
9497 bool operator()(
int exit_status)
const;
9501 # endif // !GTEST_OS_WINDOWS
9548 # define EXPECT_DEBUG_DEATH(statement, regex) \
9549 GTEST_EXECUTE_STATEMENT_(statement, regex)
9551 # define ASSERT_DEBUG_DEATH(statement, regex) \
9552 GTEST_EXECUTE_STATEMENT_(statement, regex)
9556 # define EXPECT_DEBUG_DEATH(statement, regex) \
9557 EXPECT_DEATH(statement, regex)
9559 # define ASSERT_DEBUG_DEATH(statement, regex) \
9560 ASSERT_DEATH(statement, regex)
9562 # endif // NDEBUG for EXPECT_DEBUG_DEATH
9563 #endif // GTEST_HAS_DEATH_TEST
9570 #if GTEST_HAS_DEATH_TEST
9571 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
9572 EXPECT_DEATH(statement, regex)
9573 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
9574 ASSERT_DEATH(statement, regex)
9576 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
9577 GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )
9578 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
9579 GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)
9584 #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
9625 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
9626 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
9652 TEST_P(FooTest, DoesBlah) {
9659 TEST_P(FooTest, HasBlahBlah) {
9689 Values(
"meeny",
"miny",
"moe"));
9710 const char* pets[] = {
"cat",
"dog"};
9755 TEST_F(BaseTest, HasFoo) {
9767 #if !GTEST_OS_SYMBIAN
9807 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
9808 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
9887 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
9888 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
9931 while (p->next_ !=
ptr) {
9932 assert(p->next_ !=
this &&
9933 "Trying to join() a linked ring we are already in. "
9934 "Is GMock thread safety enabled?");
9947 if (next_ ==
this)
return true;
9949 while (p->next_ !=
this) {
9950 assert(p->next_ != next_ &&
9951 "Trying to depart() a linked ring we are not in. "
9952 "Is GMock thread safety enabled?");
9963 template <
typename T>
9976 assert(&
ptr !=
this);
10006 template <
typename U>
10010 template <
typename U>
10016 template <
typename U>
10040 template<
typename T>
inline
10042 return ptr ==
x.get();
10045 template<
typename T>
inline
10047 return ptr !=
x.get();
10053 template <
typename T>
10061 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
10156 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
10157 #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
10165 #if GTEST_HAS_STD_TUPLE_
10173 namespace internal2 {
10179 ::std::ostream* os);
10194 template <
typename T, TypeKind kTypeKind>
10195 class TypeWithoutFormatter {
10200 sizeof(
value), os);
10209 template <
typename T>
10216 short_str : (
"\n" +
value.DebugString());
10217 *os << (
"<" + pretty_str +
">");
10221 template <
typename T>
10261 template <
typename Char,
typename CharTraits,
typename T>
10262 ::std::basic_ostream<Char, CharTraits>&
operator<<(
10263 ::std::basic_ostream<Char, CharTraits>& os,
const T& x) {
10264 TypeWithoutFormatter<
T,
10280 template <
typename T>
10331 template <
typename ToPr
int,
typename OtherOperand>
10332 class FormatForComparison {
10340 template <
typename ToPr
int,
size_t N,
typename OtherOperand>
10341 class FormatForComparison<ToPrint[
N], OtherOperand> {
10351 #define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \
10352 template <typename OtherOperand> \
10353 class FormatForComparison<CharType*, OtherOperand> { \
10355 static ::std::string Format(CharType* value) { \
10356 return ::testing::PrintToString(static_cast<const void*>(value)); \
10365 #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_
10370 #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \
10372 class FormatForComparison<CharType*, OtherStringType> { \
10374 static ::std::string Format(CharType* value) { \
10375 return ::testing::PrintToString(value); \
10382 #if GTEST_HAS_GLOBAL_STRING
10387 #if GTEST_HAS_GLOBAL_WSTRING
10392 #if GTEST_HAS_STD_WSTRING
10397 #undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_
10407 template <
typename T1,
typename T2>
10420 template <
typename T>
10421 class UniversalPrinter;
10423 template <
typename T>
10428 template <
typename C>
10432 const size_t kMaxCount = 32;
10435 for (
typename C::const_iterator
it =
container.begin();
10439 if (
count == kMaxCount) {
10462 template <
typename T>
10465 T*
p, ::std::ostream* os) {
10486 *os << reinterpret_cast<const void*>(
10494 template <
typename T>
10497 const T&
value, ::std::ostream* os) {
10512 template <
typename T>
10546 inline void PrintTo(
char c, ::std::ostream* os) {
10550 PrintTo(
static_cast<unsigned char>(
c), os);
10554 inline void PrintTo(
bool x, ::std::ostream* os) {
10555 *os << (
x ?
"true" :
"false");
10569 inline void PrintTo(
char* s, ::std::ostream* os) {
10570 PrintTo(ImplicitCast_<const char*>(s), os);
10575 inline void PrintTo(
const signed char* s, ::std::ostream* os) {
10576 PrintTo(ImplicitCast_<const void*>(s), os);
10578 inline void PrintTo(
signed char* s, ::std::ostream* os) {
10579 PrintTo(ImplicitCast_<const void*>(s), os);
10581 inline void PrintTo(
const unsigned char* s, ::std::ostream* os) {
10582 PrintTo(ImplicitCast_<const void*>(s), os);
10584 inline void PrintTo(
unsigned char* s, ::std::ostream* os) {
10585 PrintTo(ImplicitCast_<const void*>(s), os);
10593 #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
10596 inline void PrintTo(
wchar_t* s, ::std::ostream* os) {
10597 PrintTo(ImplicitCast_<const wchar_t*>(s), os);
10606 template <
typename T>
10609 for (
size_t i = 1;
i !=
count;
i++) {
10616 #if GTEST_HAS_GLOBAL_STRING
10621 #endif // GTEST_HAS_GLOBAL_STRING
10629 #if GTEST_HAS_GLOBAL_WSTRING
10634 #endif // GTEST_HAS_GLOBAL_WSTRING
10636 #if GTEST_HAS_STD_WSTRING
10641 #endif // GTEST_HAS_STD_WSTRING
10643 #if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
10646 template <
typename T>
10648 #endif // GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
10650 #if GTEST_HAS_TR1_TUPLE
10659 inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {
10663 template <
typename T1>
10664 void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {
10668 template <
typename T1,
typename T2>
10669 void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {
10673 template <
typename T1,
typename T2,
typename T3>
10674 void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {
10678 template <
typename T1,
typename T2,
typename T3,
typename T4>
10679 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {
10683 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
10684 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,
10685 ::std::ostream* os) {
10689 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10691 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,
10692 ::std::ostream* os) {
10696 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10697 typename T6,
typename T7>
10698 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,
10699 ::std::ostream* os) {
10703 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10704 typename T6,
typename T7,
typename T8>
10705 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,
10706 ::std::ostream* os) {
10710 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10711 typename T6,
typename T7,
typename T8,
typename T9>
10712 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,
10713 ::std::ostream* os) {
10717 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10718 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
10720 const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,
10721 ::std::ostream* os) {
10724 #endif // GTEST_HAS_TR1_TUPLE
10726 #if GTEST_HAS_STD_TUPLE_
10727 template <
typename...
Types>
10728 void PrintTo(const ::std::tuple<Types...>& t, ::std::ostream* os) {
10731 #endif // GTEST_HAS_STD_TUPLE_
10734 template <
typename T1,
typename T2>
10735 void PrintTo(const ::std::pair<T1, T2>&
value, ::std::ostream* os) {
10747 template <
typename T>
10748 class UniversalPrinter {
10774 template <
typename T>
10780 const size_t kThreshold = 18;
10786 if (
len <= kThreshold) {
10798 const char*
begin,
size_t len, ::std::ostream* os);
10802 const wchar_t*
begin,
size_t len, ::std::ostream* os);
10805 template <
typename T,
size_t N>
10806 class UniversalPrinter<
T[
N]> {
10810 static void Print(
const T (&a)[
N], ::std::ostream* os) {
10816 template <
typename T>
10817 class UniversalPrinter<
T&> {
10826 *os <<
"@" <<
reinterpret_cast<const void*
>(&
value) <<
" ";
10839 template <
typename T>
10840 class UniversalTersePrinter {
10846 template <
typename T>
10847 class UniversalTersePrinter<
T&> {
10853 template <
typename T,
size_t N>
10854 class UniversalTersePrinter<
T[
N]> {
10861 class UniversalTersePrinter<
const char*> {
10872 class UniversalTersePrinter<char*> {
10879 #if GTEST_HAS_STD_WSTRING
10883 static void Print(
const wchar_t*
str, ::std::ostream* os) {
10894 class UniversalTersePrinter<wchar_t*> {
10901 template <
typename T>
10910 template <
typename T>
10918 typedef ::std::vector<string>
Strings;
10927 template <
typename TupleT>
10930 #if GTEST_HAS_TR1_TUPLE
10931 template <
typename TupleT>
10936 template <
size_t I>
10939 template <
size_t I>
10942 const Tuple& tuple) {
10943 return ::std::tr1::get<I>(tuple);
10946 template <
typename TupleT>
10947 const size_t TuplePolicy<TupleT>::tuple_size;
10948 #endif // GTEST_HAS_TR1_TUPLE
10950 #if GTEST_HAS_STD_TUPLE_
10951 template <
typename...
Types>
10952 struct TuplePolicy< ::std::tuple<Types...> > {
10953 typedef ::std::tuple<
Types...> Tuple;
10956 template <
size_t I>
10957 struct tuple_element : ::std::tuple_element<I, Tuple> {};
10959 template <
size_t I>
10961 const Tuple& tuple) {
10962 return ::std::get<I>(tuple);
10965 template <
typename...
Types>
10966 const size_t TuplePolicy< ::std::tuple<
Types...> >::tuple_size;
10967 #endif // GTEST_HAS_STD_TUPLE_
10969 #if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
10978 template <
size_t N>
10981 template <
typename Tuple>
10996 template <
typename Tuple>
10999 ::std::stringstream ss;
11001 strings->push_back(ss.str());
11008 template <
typename Tuple>
11011 template <
typename Tuple>
11017 template <
typename Tuple>
11027 template <
typename Tuple>
11030 TuplePrefixPrinter<TuplePolicy<Tuple>::tuple_size>
::
11034 #endif // GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
11038 template <
typename T>
11040 ::std::stringstream ss;
11088 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
11089 #define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
11091 #endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
11093 #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
11095 #if GTEST_HAS_PARAM_TEST
11101 template <
class ParamType>
11102 struct TestParamInfo {
11112 struct PrintToStringParamName {
11113 template <
class ParamType>
11128 CodeLocation code_location);
11130 template <
typename>
class ParamGeneratorInterface;
11131 template <
typename>
class ParamGenerator;
11135 template <
typename T>
11136 class ParamIteratorInterface {
11147 virtual void Advance() = 0;
11155 virtual const T* Current()
const = 0;
11165 template <
typename T>
11166 class ParamIterator {
11169 typedef const T& reference;
11175 if (
this != &other)
11176 impl_.reset(other.impl_->Clone());
11194 return impl_.get() == other.impl_.get() ||
impl_->Equals(*other.impl_);
11197 return !(*
this == other);
11208 template <
typename T>
11225 template<
typename T>
11226 class ParamGenerator {
11234 impl_ = other.impl_;
11249 template <
typename T,
typename IncrementT>
11258 return new Iterator(
this, begin_, 0, step_);
11286 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11287 <<
"The program attempted to compare iterators "
11288 <<
"from different generators." << std::endl;
11289 const int other_index =
11290 CheckedDowncastToActualType<const Iterator>(&other)->index_;
11291 return index_ == other_index;
11298 step_(other.step_) {}
11301 void operator=(
const Iterator& other);
11306 const IncrementT step_;
11311 const IncrementT&
step) {
11313 for (
T i =
begin; i < end; i = static_cast<T>(
i +
step))
11323 const IncrementT step_;
11326 const int end_index_;
11334 template <
typename T>
11335 class ValuesInIteratorRangeGenerator :
public ParamGeneratorInterface<T> {
11337 template <
typename ForwardIterator>
11343 return new Iterator(
this, container_.begin());
11346 return new Iterator(
this, container_.end());
11355 typename ContainerType::const_iterator
iterator)
11377 if (
value_.get() == NULL)
11378 value_.reset(
new T(*iterator_));
11384 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11385 <<
"The program attempted to compare iterators "
11386 <<
"from different generators." << std::endl;
11387 return iterator_ ==
11388 CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
11396 base_(other.base_),
11397 iterator_(other.iterator_) {}
11400 typename ContainerType::const_iterator iterator_;
11419 template <
class ParamType>
11422 name_stream << info.index;
11431 template <
class ParamType,
class ParamNameGenFunctor>
11436 template <
class ParamType>
11437 struct ParamNameGenFunc {
11441 template <
class ParamType>
11450 template <
class TestClass>
11451 class ParameterizedTestFactory :
public TestFactoryBase {
11458 return new TestClass();
11471 template <
class ParamType>
11472 class TestMetaFactoryBase {
11487 template <
class TestCase>
11488 class TestMetaFactory
11489 :
public TestMetaFactoryBase<typename TestCase::ParamType> {
11518 virtual const string& GetTestCaseName()
const = 0;
11520 virtual TypeId GetTestCaseTypeId()
const = 0;
11525 virtual void RegisterTests() = 0;
11541 template <
class TestCase>
11554 : test_case_name_(
name), code_location_(code_location) {}
11567 const char* test_base_name,
11576 GeneratorCreationFunc*
func,
11580 instantiations_.push_back(
11591 test_it != tests_.end(); ++test_it) {
11594 instantiations_.begin(); gen_it != instantiations_.end();
11596 const string& instantiation_name = gen_it->name;
11599 const char*
file = gen_it->file;
11600 int line = gen_it->line;
11602 string test_case_name;
11603 if ( !instantiation_name.empty() )
11604 test_case_name = instantiation_name +
"/";
11605 test_case_name += test_info->test_case_base_name;
11608 std::set<std::string> test_param_names;
11611 param_it != generator.end(); ++param_it, ++
i) {
11618 <<
"Parameterized test name '" << param_name
11619 <<
"' is invalid, in " <<
file
11620 <<
" line " <<
line << std::endl;
11623 <<
"Duplicate parameterized test name '" << param_name
11624 <<
"', in " <<
file <<
" line " <<
line << std::endl;
11626 test_param_names.insert(param_name);
11628 test_name_stream << test_info->test_base_name <<
"/" << param_name;
11630 test_case_name.c_str(),
11635 GetTestCaseTypeId(),
11636 TestCase::SetUpTestCase,
11637 TestCase::TearDownTestCase,
11638 test_info->test_meta_factory->CreateTestFactory(*param_it));
11649 const char* a_test_base_name,
11651 test_case_base_name(a_test_case_base_name),
11652 test_base_name(a_test_base_name),
11653 test_meta_factory(a_test_meta_factory) {}
11665 GeneratorCreationFunc* generator_in,
11667 const char* file_in,
11670 generator(generator_in),
11671 name_func(name_func_in),
11716 it != test_case_infos_.end(); ++
it) {
11723 template <
class TestCase>
11725 const char* test_case_name,
11729 it != test_case_infos_.end(); ++
it) {
11730 if ((*it)->GetTestCaseName() == test_case_name) {
11731 if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {
11747 if (typed_test_info == NULL) {
11749 test_case_name, code_location);
11750 test_case_infos_.push_back(typed_test_info);
11752 return typed_test_info;
11756 it != test_case_infos_.end(); ++
it) {
11757 (*it)->RegisterTests();
11772 #endif // GTEST_HAS_PARAM_TEST
11774 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
11820 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
11821 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
11827 #if GTEST_HAS_PARAM_TEST
11833 template <
typename ForwardIterator>
11834 internal::ParamGenerator<
11838 template <
typename T,
size_t N>
11841 template <
class Container>
11842 internal::ParamGenerator<typename Container::value_type>
ValuesIn(
11848 template <
typename T1>
11853 template <
typename T>
11855 const T array[] = {
static_cast<T>(v1_)};
11866 template <
typename T1,
typename T2>
11871 template <
typename T>
11873 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_)};
11885 template <
typename T1,
typename T2,
typename T3>
11890 template <
typename T>
11892 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
11893 static_cast<T>(v3_)};
11906 template <
typename T1,
typename T2,
typename T3,
typename T4>
11912 template <
typename T>
11914 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
11915 static_cast<T>(v3_),
static_cast<T>(v4_)};
11929 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
11933 v4_(v4), v5_(v5) {}
11935 template <
typename T>
11937 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
11938 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_)};
11953 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11958 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
11960 template <
typename T>
11962 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
11963 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
11964 static_cast<T>(v6_)};
11980 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11981 typename T6,
typename T7>
11985 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
11987 template <
typename T>
11989 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
11990 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
11991 static_cast<T>(v6_),
static_cast<T>(v7_)};
12008 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12009 typename T6,
typename T7,
typename T8>
12013 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12016 template <
typename T>
12018 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12019 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12020 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_)};
12038 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12039 typename T6,
typename T7,
typename T8,
typename T9>
12043 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12044 v8_(v8), v9_(v9) {}
12046 template <
typename T>
12048 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12049 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12050 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12051 static_cast<T>(v9_)};
12070 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12071 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
12075 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12076 v8_(v8), v9_(v9), v10_(v10) {}
12078 template <
typename T>
12080 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12081 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12082 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12083 static_cast<T>(v9_),
static_cast<T>(v10_)};
12103 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12104 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12109 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
12110 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
12112 template <
typename T>
12114 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12115 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12116 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12117 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_)};
12138 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12139 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12140 typename T11,
typename T12>
12144 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
12145 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
12147 template <
typename T>
12149 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12150 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12151 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12152 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12153 static_cast<T>(v12_)};
12175 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12176 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12177 typename T11,
typename T12,
typename T13>
12181 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
12182 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
12183 v12_(v12), v13_(v13) {}
12185 template <
typename T>
12187 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12188 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12189 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12190 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12191 static_cast<T>(v12_),
static_cast<T>(v13_)};
12214 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12215 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12216 typename T11,
typename T12,
typename T13,
typename T14>
12220 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
12221 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12222 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
12224 template <
typename T>
12226 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12227 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12228 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12229 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12230 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_)};
12254 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12255 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12256 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
12260 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
12261 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12262 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
12264 template <
typename T>
12266 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12267 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12268 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12269 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12270 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12271 static_cast<T>(v15_)};
12296 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12297 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12298 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12303 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
12304 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
12305 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
12308 template <
typename T>
12310 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12311 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12312 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12313 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12314 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12315 static_cast<T>(v15_),
static_cast<T>(v16_)};
12341 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12342 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12343 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12344 typename T16,
typename T17>
12348 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
12349 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12350 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12351 v15_(v15), v16_(v16), v17_(v17) {}
12353 template <
typename T>
12355 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12356 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12357 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12358 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12359 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12360 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_)};
12387 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12388 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12389 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12390 typename T16,
typename T17,
typename T18>
12394 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12395 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12396 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12397 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
12399 template <
typename T>
12401 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12402 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12403 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12404 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12405 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12406 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12407 static_cast<T>(v18_)};
12435 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12436 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12437 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12438 typename T16,
typename T17,
typename T18,
typename T19>
12442 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12443 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
12444 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
12445 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
12447 template <
typename T>
12449 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12450 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12451 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12452 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12453 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12454 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12455 static_cast<T>(v18_),
static_cast<T>(v19_)};
12484 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12485 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12486 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12487 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
12491 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12492 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
12493 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
12494 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
12495 v19_(v19), v20_(v20) {}
12497 template <
typename T>
12499 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12500 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12501 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12502 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12503 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12504 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12505 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_)};
12535 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12536 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12537 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12538 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12543 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12544 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
12545 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
12546 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
12547 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
12549 template <
typename T>
12551 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12552 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12553 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12554 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12555 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12556 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12557 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12558 static_cast<T>(v21_)};
12589 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12590 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12591 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12592 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12593 typename T21,
typename T22>
12597 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12598 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
12599 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12600 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
12601 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
12603 template <
typename T>
12605 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12606 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12607 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12608 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12609 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12610 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12611 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12612 static_cast<T>(v21_),
static_cast<T>(v22_)};
12644 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12645 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12646 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12647 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12648 typename T21,
typename T22,
typename T23>
12652 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12653 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
12654 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12655 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
12656 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
12659 template <
typename T>
12661 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12662 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12663 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12664 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12665 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12666 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12667 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12668 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_)};
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>
12709 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12710 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
12711 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
12712 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
12713 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
12714 v22_(v22), v23_(v23), v24_(v24) {}
12716 template <
typename T>
12718 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12719 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12720 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12721 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12722 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12723 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12724 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12725 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
12726 static_cast<T>(v24_)};
12760 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12761 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12762 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12763 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12764 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
12768 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12769 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
12770 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12771 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12772 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
12773 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
12775 template <
typename T>
12777 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12778 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12779 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12780 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12781 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12782 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12783 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12784 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
12785 static_cast<T>(v24_),
static_cast<T>(v25_)};
12820 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12821 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12822 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12823 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12824 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12829 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12830 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12831 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12832 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12833 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
12834 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
12836 template <
typename T>
12838 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12839 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12840 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12841 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12842 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12843 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12844 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12845 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
12846 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_)};
12882 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12883 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12884 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12885 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12886 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12887 typename T26,
typename T27>
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) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
12894 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
12895 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
12896 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
12897 v26_(v26), v27_(v27) {}
12899 template <
typename T>
12901 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12902 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12903 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12904 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12905 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12906 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12907 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12908 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
12909 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
12910 static_cast<T>(v27_)};
12947 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12948 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12949 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12950 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12951 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12952 typename T26,
typename T27,
typename T28>
12956 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12957 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12958 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
12959 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
12960 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
12961 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
12962 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
12964 template <
typename T>
12966 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
12967 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
12968 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
12969 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
12970 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
12971 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
12972 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
12973 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
12974 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
12975 static_cast<T>(v27_),
static_cast<T>(v28_)};
13013 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13014 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13015 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13016 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13017 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13018 typename T26,
typename T27,
typename T28,
typename T29>
13022 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13023 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13024 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
13025 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
13026 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
13027 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
13028 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
13030 template <
typename T>
13032 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13033 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13034 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13035 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13036 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13037 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13038 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13039 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13040 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13041 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_)};
13080 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13081 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13082 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13083 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13084 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13085 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
13089 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13090 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13091 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
13092 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
13093 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
13094 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
13095 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
13096 v29_(v29), v30_(v30) {}
13098 template <
typename T>
13100 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13101 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13102 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13103 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13104 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13105 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13106 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13107 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13108 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13109 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13110 static_cast<T>(v30_)};
13150 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13151 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13152 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13153 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13154 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13155 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13160 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13161 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13162 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
13163 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
13164 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
13165 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
13166 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
13167 v29_(v29), v30_(v30), v31_(v31) {}
13169 template <
typename T>
13171 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13172 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13173 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13174 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13175 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13176 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13177 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13178 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13179 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13180 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13181 static_cast<T>(v30_),
static_cast<T>(v31_)};
13222 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13223 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13224 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13225 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13226 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13227 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13228 typename T31,
typename T32>
13232 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13233 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13234 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
13235 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
13236 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
13237 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
13238 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
13239 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
13241 template <
typename T>
13243 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13244 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13245 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13246 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13247 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13248 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13249 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13250 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13251 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13252 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13253 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_)};
13295 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13296 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13297 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13298 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13299 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13300 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13301 typename T31,
typename T32,
typename T33>
13305 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13306 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13307 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
13308 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
13309 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
13310 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
13311 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
13312 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
13315 template <
typename T>
13317 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13318 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13319 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13320 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13321 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13322 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13323 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13324 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13325 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13326 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13327 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13328 static_cast<T>(v33_)};
13371 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13372 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13373 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13374 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13375 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13376 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13377 typename T31,
typename T32,
typename T33,
typename T34>
13381 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13382 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13383 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13384 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
13385 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
13386 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
13387 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
13388 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
13389 v33_(v33), v34_(v34) {}
13391 template <
typename T>
13393 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13394 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13395 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13396 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13397 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13398 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13399 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13400 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13401 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13402 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13403 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13404 static_cast<T>(v33_),
static_cast<T>(v34_)};
13448 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13449 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13450 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13451 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13452 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13453 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13454 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
13458 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13459 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13460 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13461 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
13462 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
13463 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
13464 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
13465 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
13466 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
13468 template <
typename T>
13470 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13471 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13472 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13473 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13474 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13475 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13476 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13477 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13478 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13479 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13480 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13481 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_)};
13526 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13527 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13528 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13529 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13530 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13531 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13532 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13537 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13538 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13539 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13540 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
13541 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
13542 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
13543 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
13544 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
13545 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
13547 template <
typename T>
13549 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13550 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13551 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13552 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13553 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13554 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13555 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13556 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13557 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13558 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13559 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13560 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13561 static_cast<T>(v36_)};
13607 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13608 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13609 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13610 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13611 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13612 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13613 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13614 typename T36,
typename T37>
13618 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13619 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13620 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13621 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
13622 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
13623 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
13624 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
13625 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
13626 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
13627 v36_(v36), v37_(v37) {}
13629 template <
typename T>
13631 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13632 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13633 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13634 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13635 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13636 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13637 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13638 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13639 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13640 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13641 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13642 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13643 static_cast<T>(v36_),
static_cast<T>(v37_)};
13690 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13691 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13692 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13693 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13694 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13695 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13696 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13697 typename T36,
typename T37,
typename T38>
13701 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13702 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13703 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13704 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
13705 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
13706 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
13707 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
13708 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
13709 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
13710 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
13712 template <
typename T>
13714 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13715 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13716 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13717 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13718 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13719 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13720 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13721 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13722 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13723 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13724 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13725 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13726 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_)};
13774 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13775 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13776 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13777 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13778 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13779 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13780 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13781 typename T36,
typename T37,
typename T38,
typename T39>
13785 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13786 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13787 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13788 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
13789 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
13790 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
13791 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
13792 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
13793 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
13794 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
13796 template <
typename T>
13798 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13799 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13800 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13801 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13802 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13803 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13804 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13805 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13806 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13807 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13808 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13809 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13810 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
13811 static_cast<T>(v39_)};
13860 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13861 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13862 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13863 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13864 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13865 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13866 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13867 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
13871 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13872 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13873 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13874 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
13875 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
13876 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
13877 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
13878 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
13879 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
13880 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
13883 template <
typename T>
13885 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13886 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13887 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13888 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13889 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13890 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13891 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13892 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13893 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13894 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13895 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13896 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13897 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
13898 static_cast<T>(v39_),
static_cast<T>(v40_)};
13948 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13949 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13950 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13951 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13952 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13953 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13954 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13955 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
13960 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13961 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13962 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13963 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
13964 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
13965 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
13966 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
13967 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
13968 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
13969 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
13970 v39_(v39), v40_(v40), v41_(v41) {}
13972 template <
typename T>
13974 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
13975 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
13976 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
13977 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
13978 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
13979 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
13980 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
13981 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
13982 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
13983 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
13984 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
13985 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
13986 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
13987 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_)};
14038 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14039 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14040 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14041 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14042 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14043 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14044 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14045 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14046 typename T41,
typename T42>
14050 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14051 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14052 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14053 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14054 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
14055 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
14056 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
14057 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
14058 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
14059 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
14060 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
14062 template <
typename T>
14064 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14065 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14066 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14067 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14068 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14069 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14070 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14071 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14072 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14073 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14074 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14075 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14076 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14077 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14078 static_cast<T>(v42_)};
14130 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14131 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14132 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14133 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14134 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14135 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14136 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14137 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14138 typename T41,
typename T42,
typename T43>
14142 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14143 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14144 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14145 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14146 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
14147 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
14148 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
14149 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
14150 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
14151 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
14152 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
14154 template <
typename T>
14156 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14157 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14158 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14159 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14160 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14161 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14162 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14163 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14164 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14165 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14166 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14167 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14168 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14169 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14170 static_cast<T>(v42_),
static_cast<T>(v43_)};
14223 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14224 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14225 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14226 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14227 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14228 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14229 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14230 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14231 typename T41,
typename T42,
typename T43,
typename T44>
14235 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14236 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14237 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14238 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14239 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
14240 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
14241 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
14242 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
14243 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
14244 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
14245 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
14246 v43_(v43), v44_(v44) {}
14248 template <
typename T>
14250 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14251 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14252 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14253 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14254 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14255 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14256 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14257 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14258 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14259 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14260 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14261 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14262 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14263 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14264 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_)};
14318 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14319 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14320 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14321 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14322 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14323 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14324 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14325 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14326 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
14330 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14331 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14332 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14333 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14334 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
14335 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
14336 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
14337 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
14338 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
14339 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
14340 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
14341 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
14343 template <
typename T>
14345 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14346 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14347 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14348 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14349 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14350 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14351 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14352 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14353 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14354 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14355 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14356 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14357 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14358 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14359 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14360 static_cast<T>(v45_)};
14415 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14416 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14417 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14418 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14419 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14420 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14421 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14422 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14423 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
14428 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14429 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14430 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14431 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14432 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
14433 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
14434 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
14435 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
14436 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
14437 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
14438 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
14439 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
14441 template <
typename T>
14443 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14444 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14445 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14446 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14447 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14448 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14449 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14450 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14451 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14452 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14453 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14454 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14455 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14456 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14457 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14458 static_cast<T>(v45_),
static_cast<T>(v46_)};
14514 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14515 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14516 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14517 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14518 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14519 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14520 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14521 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14522 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
14523 typename T46,
typename T47>
14527 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14528 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14529 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14530 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14531 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
14532 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
14533 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
14534 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
14535 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
14536 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
14537 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
14538 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
14541 template <
typename T>
14543 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14544 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14545 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14546 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14547 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14548 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14549 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14550 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14551 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14552 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14553 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14554 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14555 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14556 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14557 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14558 static_cast<T>(v45_),
static_cast<T>(v46_),
static_cast<T>(v47_)};
14615 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14616 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14617 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14618 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14619 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14620 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14621 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14622 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14623 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
14624 typename T46,
typename T47,
typename T48>
14628 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14629 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14630 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14631 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14632 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
14633 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
14634 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
14635 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
14636 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
14637 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
14638 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
14639 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
14640 v46_(v46), v47_(v47), v48_(v48) {}
14642 template <
typename T>
14644 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14645 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14646 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14647 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14648 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14649 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14650 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14651 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14652 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14653 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14654 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14655 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14656 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14657 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14658 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14659 static_cast<T>(v45_),
static_cast<T>(v46_),
static_cast<T>(v47_),
14660 static_cast<T>(v48_)};
14718 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14719 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14720 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14721 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14722 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14723 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14724 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14725 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14726 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
14727 typename T46,
typename T47,
typename T48,
typename T49>
14731 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14732 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14733 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14734 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14735 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
14736 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
14737 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
14738 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
14739 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
14740 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
14741 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
14742 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
14743 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
14745 template <
typename T>
14747 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14748 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14749 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14750 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14751 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14752 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14753 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14754 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14755 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14756 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14757 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14758 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14759 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14760 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14761 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14762 static_cast<T>(v45_),
static_cast<T>(v46_),
static_cast<T>(v47_),
14763 static_cast<T>(v48_),
static_cast<T>(v49_)};
14822 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14823 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
14824 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
14825 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
14826 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
14827 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
14828 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
14829 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
14830 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
14831 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
14835 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
14836 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
14837 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
14838 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
14839 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
14840 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
14841 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
14842 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
14843 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
14844 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
14845 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
14846 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
14847 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
14849 template <
typename T>
14851 const T array[] = {
static_cast<T>(v1_),
static_cast<T>(v2_),
14852 static_cast<T>(v3_),
static_cast<T>(v4_),
static_cast<T>(v5_),
14853 static_cast<T>(v6_),
static_cast<T>(v7_),
static_cast<T>(v8_),
14854 static_cast<T>(v9_),
static_cast<T>(v10_),
static_cast<T>(v11_),
14855 static_cast<T>(v12_),
static_cast<T>(v13_),
static_cast<T>(v14_),
14856 static_cast<T>(v15_),
static_cast<T>(v16_),
static_cast<T>(v17_),
14857 static_cast<T>(v18_),
static_cast<T>(v19_),
static_cast<T>(v20_),
14858 static_cast<T>(v21_),
static_cast<T>(v22_),
static_cast<T>(v23_),
14859 static_cast<T>(v24_),
static_cast<T>(v25_),
static_cast<T>(v26_),
14860 static_cast<T>(v27_),
static_cast<T>(v28_),
static_cast<T>(v29_),
14861 static_cast<T>(v30_),
static_cast<T>(v31_),
static_cast<T>(v32_),
14862 static_cast<T>(v33_),
static_cast<T>(v34_),
static_cast<T>(v35_),
14863 static_cast<T>(v36_),
static_cast<T>(v37_),
static_cast<T>(v38_),
14864 static_cast<T>(v39_),
static_cast<T>(v40_),
static_cast<T>(v41_),
14865 static_cast<T>(v42_),
static_cast<T>(v43_),
static_cast<T>(v44_),
14866 static_cast<T>(v45_),
static_cast<T>(v46_),
static_cast<T>(v47_),
14867 static_cast<T>(v48_),
static_cast<T>(v49_),
static_cast<T>(v50_)};
14927 # if GTEST_HAS_COMBINE
14933 template <
typename T1,
typename T2>
14937 typedef ::testing::tuple<T1, T2> ParamType;
14941 : g1_(g1), g2_(g2) {}
14942 virtual ~CartesianProductGenerator2() {}
14944 virtual ParamIteratorInterface<ParamType>* Begin()
const {
14945 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
14947 virtual ParamIteratorInterface<ParamType>* End()
const {
14948 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
14952 class Iterator :
public ParamIteratorInterface<ParamType> {
14954 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
14955 const ParamGenerator<T1>& g1,
14957 const ParamGenerator<T2>& g2,
14960 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
14961 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2) {
14962 ComputeCurrentValue();
14966 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
14971 virtual void Advance() {
14974 if (current2_ == end2_) {
14975 current2_ = begin2_;
14978 ComputeCurrentValue();
14980 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
14983 virtual const ParamType* Current()
const {
return ¤t_value_; }
14984 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
14987 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14988 <<
"The program attempted to compare iterators "
14989 <<
"from different generators." << std::endl;
14991 CheckedDowncastToActualType<const Iterator>(&other);
14995 return (AtEnd() && typed_other->AtEnd()) ||
14997 current1_ == typed_other->current1_ &&
14998 current2_ == typed_other->current2_);
15003 : base_(other.base_),
15004 begin1_(other.begin1_),
15005 end1_(other.end1_),
15006 current1_(other.current1_),
15007 begin2_(other.begin2_),
15008 end2_(other.end2_),
15009 current2_(other.current2_) {
15010 ComputeCurrentValue();
15013 void ComputeCurrentValue() {
15015 current_value_ = ParamType(*current1_, *current2_);
15017 bool AtEnd()
const {
15021 current1_ == end1_ ||
15022 current2_ == end2_;
15026 void operator=(
const Iterator& other);
15028 const ParamGeneratorInterface<ParamType>*
const base_;
15037 ParamType current_value_;
15041 void operator=(
const CartesianProductGenerator2& other);
15043 const ParamGenerator<T1> g1_;
15044 const ParamGenerator<T2> g2_;
15048 template <
typename T1,
typename T2,
typename T3>
15049 class CartesianProductGenerator3
15050 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
15052 typedef ::testing::tuple<T1, T2, T3> ParamType;
15054 CartesianProductGenerator3(
const ParamGenerator<T1>& g1,
15055 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3)
15056 : g1_(g1), g2_(g2), g3_(g3) {}
15057 virtual ~CartesianProductGenerator3() {}
15059 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15060 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15063 virtual ParamIteratorInterface<ParamType>* End()
const {
15064 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
15068 class Iterator :
public ParamIteratorInterface<ParamType> {
15070 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15071 const ParamGenerator<T1>& g1,
15073 const ParamGenerator<T2>& g2,
15075 const ParamGenerator<T3>& g3,
15078 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15079 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15080 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3) {
15081 ComputeCurrentValue();
15085 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15090 virtual void Advance() {
15093 if (current3_ == end3_) {
15094 current3_ = begin3_;
15097 if (current2_ == end2_) {
15098 current2_ = begin2_;
15101 ComputeCurrentValue();
15103 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15106 virtual const ParamType* Current()
const {
return ¤t_value_; }
15107 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15110 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15111 <<
"The program attempted to compare iterators "
15112 <<
"from different generators." << std::endl;
15114 CheckedDowncastToActualType<const Iterator>(&other);
15118 return (AtEnd() && typed_other->AtEnd()) ||
15120 current1_ == typed_other->current1_ &&
15121 current2_ == typed_other->current2_ &&
15122 current3_ == typed_other->current3_);
15127 : base_(other.base_),
15128 begin1_(other.begin1_),
15129 end1_(other.end1_),
15130 current1_(other.current1_),
15131 begin2_(other.begin2_),
15132 end2_(other.end2_),
15133 current2_(other.current2_),
15134 begin3_(other.begin3_),
15135 end3_(other.end3_),
15136 current3_(other.current3_) {
15137 ComputeCurrentValue();
15140 void ComputeCurrentValue() {
15142 current_value_ = ParamType(*current1_, *current2_, *current3_);
15144 bool AtEnd()
const {
15148 current1_ == end1_ ||
15149 current2_ == end2_ ||
15150 current3_ == end3_;
15154 void operator=(
const Iterator& other);
15156 const ParamGeneratorInterface<ParamType>*
const base_;
15168 ParamType current_value_;
15172 void operator=(
const CartesianProductGenerator3& other);
15174 const ParamGenerator<T1> g1_;
15175 const ParamGenerator<T2> g2_;
15176 const ParamGenerator<T3> g3_;
15180 template <
typename T1,
typename T2,
typename T3,
typename T4>
15181 class CartesianProductGenerator4
15182 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
15184 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
15186 CartesianProductGenerator4(
const ParamGenerator<T1>& g1,
15187 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
15188 const ParamGenerator<T4>& g4)
15189 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
15190 virtual ~CartesianProductGenerator4() {}
15192 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15193 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15194 g3_.begin(), g4_, g4_.begin());
15196 virtual ParamIteratorInterface<ParamType>* End()
const {
15197 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
15202 class Iterator :
public ParamIteratorInterface<ParamType> {
15204 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15205 const ParamGenerator<T1>& g1,
15207 const ParamGenerator<T2>& g2,
15209 const ParamGenerator<T3>& g3,
15211 const ParamGenerator<T4>& g4,
15214 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15215 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15216 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
15217 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4) {
15218 ComputeCurrentValue();
15222 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15227 virtual void Advance() {
15230 if (current4_ == end4_) {
15231 current4_ = begin4_;
15234 if (current3_ == end3_) {
15235 current3_ = begin3_;
15238 if (current2_ == end2_) {
15239 current2_ = begin2_;
15242 ComputeCurrentValue();
15244 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15247 virtual const ParamType* Current()
const {
return ¤t_value_; }
15248 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15251 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15252 <<
"The program attempted to compare iterators "
15253 <<
"from different generators." << std::endl;
15255 CheckedDowncastToActualType<const Iterator>(&other);
15259 return (AtEnd() && typed_other->AtEnd()) ||
15261 current1_ == typed_other->current1_ &&
15262 current2_ == typed_other->current2_ &&
15263 current3_ == typed_other->current3_ &&
15264 current4_ == typed_other->current4_);
15269 : base_(other.base_),
15270 begin1_(other.begin1_),
15271 end1_(other.end1_),
15272 current1_(other.current1_),
15273 begin2_(other.begin2_),
15274 end2_(other.end2_),
15275 current2_(other.current2_),
15276 begin3_(other.begin3_),
15277 end3_(other.end3_),
15278 current3_(other.current3_),
15279 begin4_(other.begin4_),
15280 end4_(other.end4_),
15281 current4_(other.current4_) {
15282 ComputeCurrentValue();
15285 void ComputeCurrentValue() {
15287 current_value_ = ParamType(*current1_, *current2_, *current3_,
15290 bool AtEnd()
const {
15294 current1_ == end1_ ||
15295 current2_ == end2_ ||
15296 current3_ == end3_ ||
15297 current4_ == end4_;
15301 void operator=(
const Iterator& other);
15303 const ParamGeneratorInterface<ParamType>*
const base_;
15318 ParamType current_value_;
15322 void operator=(
const CartesianProductGenerator4& other);
15324 const ParamGenerator<T1> g1_;
15325 const ParamGenerator<T2> g2_;
15326 const ParamGenerator<T3> g3_;
15327 const ParamGenerator<T4> g4_;
15331 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
15332 class CartesianProductGenerator5
15333 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
15335 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
15337 CartesianProductGenerator5(
const ParamGenerator<T1>& g1,
15338 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
15339 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5)
15340 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
15341 virtual ~CartesianProductGenerator5() {}
15343 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15344 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15345 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
15347 virtual ParamIteratorInterface<ParamType>* End()
const {
15348 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
15349 g4_, g4_.end(), g5_, g5_.end());
15353 class Iterator :
public ParamIteratorInterface<ParamType> {
15355 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15356 const ParamGenerator<T1>& g1,
15358 const ParamGenerator<T2>& g2,
15360 const ParamGenerator<T3>& g3,
15362 const ParamGenerator<T4>& g4,
15364 const ParamGenerator<T5>& g5,
15367 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15368 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15369 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
15370 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
15371 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5) {
15372 ComputeCurrentValue();
15376 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15381 virtual void Advance() {
15384 if (current5_ == end5_) {
15385 current5_ = begin5_;
15388 if (current4_ == end4_) {
15389 current4_ = begin4_;
15392 if (current3_ == end3_) {
15393 current3_ = begin3_;
15396 if (current2_ == end2_) {
15397 current2_ = begin2_;
15400 ComputeCurrentValue();
15402 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15405 virtual const ParamType* Current()
const {
return ¤t_value_; }
15406 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15409 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15410 <<
"The program attempted to compare iterators "
15411 <<
"from different generators." << std::endl;
15413 CheckedDowncastToActualType<const Iterator>(&other);
15417 return (AtEnd() && typed_other->AtEnd()) ||
15419 current1_ == typed_other->current1_ &&
15420 current2_ == typed_other->current2_ &&
15421 current3_ == typed_other->current3_ &&
15422 current4_ == typed_other->current4_ &&
15423 current5_ == typed_other->current5_);
15428 : base_(other.base_),
15429 begin1_(other.begin1_),
15430 end1_(other.end1_),
15431 current1_(other.current1_),
15432 begin2_(other.begin2_),
15433 end2_(other.end2_),
15434 current2_(other.current2_),
15435 begin3_(other.begin3_),
15436 end3_(other.end3_),
15437 current3_(other.current3_),
15438 begin4_(other.begin4_),
15439 end4_(other.end4_),
15440 current4_(other.current4_),
15441 begin5_(other.begin5_),
15442 end5_(other.end5_),
15443 current5_(other.current5_) {
15444 ComputeCurrentValue();
15447 void ComputeCurrentValue() {
15449 current_value_ = ParamType(*current1_, *current2_, *current3_,
15450 *current4_, *current5_);
15452 bool AtEnd()
const {
15456 current1_ == end1_ ||
15457 current2_ == end2_ ||
15458 current3_ == end3_ ||
15459 current4_ == end4_ ||
15460 current5_ == end5_;
15464 void operator=(
const Iterator& other);
15466 const ParamGeneratorInterface<ParamType>*
const base_;
15484 ParamType current_value_;
15488 void operator=(
const CartesianProductGenerator5& other);
15490 const ParamGenerator<T1> g1_;
15491 const ParamGenerator<T2> g2_;
15492 const ParamGenerator<T3> g3_;
15493 const ParamGenerator<T4> g4_;
15494 const ParamGenerator<T5> g5_;
15498 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15500 class CartesianProductGenerator6
15501 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
15504 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
15506 CartesianProductGenerator6(
const ParamGenerator<T1>& g1,
15507 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
15508 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
15509 const ParamGenerator<T6>& g6)
15510 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
15511 virtual ~CartesianProductGenerator6() {}
15513 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15514 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15515 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
15517 virtual ParamIteratorInterface<ParamType>* End()
const {
15518 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
15519 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
15523 class Iterator :
public ParamIteratorInterface<ParamType> {
15525 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15526 const ParamGenerator<T1>& g1,
15528 const ParamGenerator<T2>& g2,
15530 const ParamGenerator<T3>& g3,
15532 const ParamGenerator<T4>& g4,
15534 const ParamGenerator<T5>& g5,
15536 const ParamGenerator<T6>& g6,
15539 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15540 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15541 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
15542 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
15543 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5),
15544 begin6_(g6.
begin()), end6_(g6.
end()), current6_(current6) {
15545 ComputeCurrentValue();
15549 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15554 virtual void Advance() {
15557 if (current6_ == end6_) {
15558 current6_ = begin6_;
15561 if (current5_ == end5_) {
15562 current5_ = begin5_;
15565 if (current4_ == end4_) {
15566 current4_ = begin4_;
15569 if (current3_ == end3_) {
15570 current3_ = begin3_;
15573 if (current2_ == end2_) {
15574 current2_ = begin2_;
15577 ComputeCurrentValue();
15579 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15582 virtual const ParamType* Current()
const {
return ¤t_value_; }
15583 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15586 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15587 <<
"The program attempted to compare iterators "
15588 <<
"from different generators." << std::endl;
15590 CheckedDowncastToActualType<const Iterator>(&other);
15594 return (AtEnd() && typed_other->AtEnd()) ||
15596 current1_ == typed_other->current1_ &&
15597 current2_ == typed_other->current2_ &&
15598 current3_ == typed_other->current3_ &&
15599 current4_ == typed_other->current4_ &&
15600 current5_ == typed_other->current5_ &&
15601 current6_ == typed_other->current6_);
15606 : base_(other.base_),
15607 begin1_(other.begin1_),
15608 end1_(other.end1_),
15609 current1_(other.current1_),
15610 begin2_(other.begin2_),
15611 end2_(other.end2_),
15612 current2_(other.current2_),
15613 begin3_(other.begin3_),
15614 end3_(other.end3_),
15615 current3_(other.current3_),
15616 begin4_(other.begin4_),
15617 end4_(other.end4_),
15618 current4_(other.current4_),
15619 begin5_(other.begin5_),
15620 end5_(other.end5_),
15621 current5_(other.current5_),
15622 begin6_(other.begin6_),
15623 end6_(other.end6_),
15624 current6_(other.current6_) {
15625 ComputeCurrentValue();
15628 void ComputeCurrentValue() {
15630 current_value_ = ParamType(*current1_, *current2_, *current3_,
15631 *current4_, *current5_, *current6_);
15633 bool AtEnd()
const {
15637 current1_ == end1_ ||
15638 current2_ == end2_ ||
15639 current3_ == end3_ ||
15640 current4_ == end4_ ||
15641 current5_ == end5_ ||
15642 current6_ == end6_;
15646 void operator=(
const Iterator& other);
15648 const ParamGeneratorInterface<ParamType>*
const base_;
15669 ParamType current_value_;
15673 void operator=(
const CartesianProductGenerator6& other);
15675 const ParamGenerator<T1> g1_;
15676 const ParamGenerator<T2> g2_;
15677 const ParamGenerator<T3> g3_;
15678 const ParamGenerator<T4> g4_;
15679 const ParamGenerator<T5> g5_;
15680 const ParamGenerator<T6> g6_;
15684 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15685 typename T6,
typename T7>
15686 class CartesianProductGenerator7
15687 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
15690 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
15692 CartesianProductGenerator7(
const ParamGenerator<T1>& g1,
15693 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
15694 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
15695 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7)
15696 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
15697 virtual ~CartesianProductGenerator7() {}
15699 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15700 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15701 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
15704 virtual ParamIteratorInterface<ParamType>* End()
const {
15705 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
15706 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
15710 class Iterator :
public ParamIteratorInterface<ParamType> {
15712 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15713 const ParamGenerator<T1>& g1,
15715 const ParamGenerator<T2>& g2,
15717 const ParamGenerator<T3>& g3,
15719 const ParamGenerator<T4>& g4,
15721 const ParamGenerator<T5>& g5,
15723 const ParamGenerator<T6>& g6,
15725 const ParamGenerator<T7>& g7,
15728 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15729 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15730 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
15731 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
15732 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5),
15733 begin6_(g6.
begin()), end6_(g6.
end()), current6_(current6),
15734 begin7_(g7.
begin()), end7_(g7.
end()), current7_(current7) {
15735 ComputeCurrentValue();
15739 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15744 virtual void Advance() {
15747 if (current7_ == end7_) {
15748 current7_ = begin7_;
15751 if (current6_ == end6_) {
15752 current6_ = begin6_;
15755 if (current5_ == end5_) {
15756 current5_ = begin5_;
15759 if (current4_ == end4_) {
15760 current4_ = begin4_;
15763 if (current3_ == end3_) {
15764 current3_ = begin3_;
15767 if (current2_ == end2_) {
15768 current2_ = begin2_;
15771 ComputeCurrentValue();
15773 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15776 virtual const ParamType* Current()
const {
return ¤t_value_; }
15777 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15780 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15781 <<
"The program attempted to compare iterators "
15782 <<
"from different generators." << std::endl;
15784 CheckedDowncastToActualType<const Iterator>(&other);
15788 return (AtEnd() && typed_other->AtEnd()) ||
15790 current1_ == typed_other->current1_ &&
15791 current2_ == typed_other->current2_ &&
15792 current3_ == typed_other->current3_ &&
15793 current4_ == typed_other->current4_ &&
15794 current5_ == typed_other->current5_ &&
15795 current6_ == typed_other->current6_ &&
15796 current7_ == typed_other->current7_);
15801 : base_(other.base_),
15802 begin1_(other.begin1_),
15803 end1_(other.end1_),
15804 current1_(other.current1_),
15805 begin2_(other.begin2_),
15806 end2_(other.end2_),
15807 current2_(other.current2_),
15808 begin3_(other.begin3_),
15809 end3_(other.end3_),
15810 current3_(other.current3_),
15811 begin4_(other.begin4_),
15812 end4_(other.end4_),
15813 current4_(other.current4_),
15814 begin5_(other.begin5_),
15815 end5_(other.end5_),
15816 current5_(other.current5_),
15817 begin6_(other.begin6_),
15818 end6_(other.end6_),
15819 current6_(other.current6_),
15820 begin7_(other.begin7_),
15821 end7_(other.end7_),
15822 current7_(other.current7_) {
15823 ComputeCurrentValue();
15826 void ComputeCurrentValue() {
15828 current_value_ = ParamType(*current1_, *current2_, *current3_,
15829 *current4_, *current5_, *current6_, *current7_);
15831 bool AtEnd()
const {
15835 current1_ == end1_ ||
15836 current2_ == end2_ ||
15837 current3_ == end3_ ||
15838 current4_ == end4_ ||
15839 current5_ == end5_ ||
15840 current6_ == end6_ ||
15841 current7_ == end7_;
15845 void operator=(
const Iterator& other);
15847 const ParamGeneratorInterface<ParamType>*
const base_;
15871 ParamType current_value_;
15875 void operator=(
const CartesianProductGenerator7& other);
15877 const ParamGenerator<T1> g1_;
15878 const ParamGenerator<T2> g2_;
15879 const ParamGenerator<T3> g3_;
15880 const ParamGenerator<T4> g4_;
15881 const ParamGenerator<T5> g5_;
15882 const ParamGenerator<T6> g6_;
15883 const ParamGenerator<T7> g7_;
15887 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15888 typename T6,
typename T7,
typename T8>
15889 class CartesianProductGenerator8
15890 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
15893 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
15895 CartesianProductGenerator8(
const ParamGenerator<T1>& g1,
15896 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
15897 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
15898 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
15899 const ParamGenerator<T8>& g8)
15900 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
15902 virtual ~CartesianProductGenerator8() {}
15904 virtual ParamIteratorInterface<ParamType>* Begin()
const {
15905 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
15906 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
15907 g7_.begin(), g8_, g8_.begin());
15909 virtual ParamIteratorInterface<ParamType>* End()
const {
15910 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
15911 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
15916 class Iterator :
public ParamIteratorInterface<ParamType> {
15918 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
15919 const ParamGenerator<T1>& g1,
15921 const ParamGenerator<T2>& g2,
15923 const ParamGenerator<T3>& g3,
15925 const ParamGenerator<T4>& g4,
15927 const ParamGenerator<T5>& g5,
15929 const ParamGenerator<T6>& g6,
15931 const ParamGenerator<T7>& g7,
15933 const ParamGenerator<T8>& g8,
15936 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
15937 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
15938 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
15939 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
15940 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5),
15941 begin6_(g6.
begin()), end6_(g6.
end()), current6_(current6),
15942 begin7_(g7.
begin()), end7_(g7.
end()), current7_(current7),
15943 begin8_(g8.
begin()), end8_(g8.
end()), current8_(current8) {
15944 ComputeCurrentValue();
15948 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
15953 virtual void Advance() {
15956 if (current8_ == end8_) {
15957 current8_ = begin8_;
15960 if (current7_ == end7_) {
15961 current7_ = begin7_;
15964 if (current6_ == end6_) {
15965 current6_ = begin6_;
15968 if (current5_ == end5_) {
15969 current5_ = begin5_;
15972 if (current4_ == end4_) {
15973 current4_ = begin4_;
15976 if (current3_ == end3_) {
15977 current3_ = begin3_;
15980 if (current2_ == end2_) {
15981 current2_ = begin2_;
15984 ComputeCurrentValue();
15986 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
15989 virtual const ParamType* Current()
const {
return ¤t_value_; }
15990 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
15993 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
15994 <<
"The program attempted to compare iterators "
15995 <<
"from different generators." << std::endl;
15997 CheckedDowncastToActualType<const Iterator>(&other);
16001 return (AtEnd() && typed_other->AtEnd()) ||
16003 current1_ == typed_other->current1_ &&
16004 current2_ == typed_other->current2_ &&
16005 current3_ == typed_other->current3_ &&
16006 current4_ == typed_other->current4_ &&
16007 current5_ == typed_other->current5_ &&
16008 current6_ == typed_other->current6_ &&
16009 current7_ == typed_other->current7_ &&
16010 current8_ == typed_other->current8_);
16015 : base_(other.base_),
16016 begin1_(other.begin1_),
16017 end1_(other.end1_),
16018 current1_(other.current1_),
16019 begin2_(other.begin2_),
16020 end2_(other.end2_),
16021 current2_(other.current2_),
16022 begin3_(other.begin3_),
16023 end3_(other.end3_),
16024 current3_(other.current3_),
16025 begin4_(other.begin4_),
16026 end4_(other.end4_),
16027 current4_(other.current4_),
16028 begin5_(other.begin5_),
16029 end5_(other.end5_),
16030 current5_(other.current5_),
16031 begin6_(other.begin6_),
16032 end6_(other.end6_),
16033 current6_(other.current6_),
16034 begin7_(other.begin7_),
16035 end7_(other.end7_),
16036 current7_(other.current7_),
16037 begin8_(other.begin8_),
16038 end8_(other.end8_),
16039 current8_(other.current8_) {
16040 ComputeCurrentValue();
16043 void ComputeCurrentValue() {
16045 current_value_ = ParamType(*current1_, *current2_, *current3_,
16046 *current4_, *current5_, *current6_, *current7_, *current8_);
16048 bool AtEnd()
const {
16052 current1_ == end1_ ||
16053 current2_ == end2_ ||
16054 current3_ == end3_ ||
16055 current4_ == end4_ ||
16056 current5_ == end5_ ||
16057 current6_ == end6_ ||
16058 current7_ == end7_ ||
16059 current8_ == end8_;
16063 void operator=(
const Iterator& other);
16065 const ParamGeneratorInterface<ParamType>*
const base_;
16092 ParamType current_value_;
16096 void operator=(
const CartesianProductGenerator8& other);
16098 const ParamGenerator<T1> g1_;
16099 const ParamGenerator<T2> g2_;
16100 const ParamGenerator<T3> g3_;
16101 const ParamGenerator<T4> g4_;
16102 const ParamGenerator<T5> g5_;
16103 const ParamGenerator<T6> g6_;
16104 const ParamGenerator<T7> g7_;
16105 const ParamGenerator<T8> g8_;
16109 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16110 typename T6,
typename T7,
typename T8,
typename T9>
16111 class CartesianProductGenerator9
16112 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
16115 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
16117 CartesianProductGenerator9(
const ParamGenerator<T1>& g1,
16118 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
16119 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
16120 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
16121 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9)
16122 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
16124 virtual ~CartesianProductGenerator9() {}
16126 virtual ParamIteratorInterface<ParamType>* Begin()
const {
16127 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
16128 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
16129 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
16131 virtual ParamIteratorInterface<ParamType>* End()
const {
16132 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
16133 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
16134 g8_.end(), g9_, g9_.end());
16138 class Iterator :
public ParamIteratorInterface<ParamType> {
16140 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
16141 const ParamGenerator<T1>& g1,
16143 const ParamGenerator<T2>& g2,
16145 const ParamGenerator<T3>& g3,
16147 const ParamGenerator<T4>& g4,
16149 const ParamGenerator<T5>& g5,
16151 const ParamGenerator<T6>& g6,
16153 const ParamGenerator<T7>& g7,
16155 const ParamGenerator<T8>& g8,
16157 const ParamGenerator<T9>& g9,
16160 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
16161 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
16162 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
16163 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
16164 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5),
16165 begin6_(g6.
begin()), end6_(g6.
end()), current6_(current6),
16166 begin7_(g7.
begin()), end7_(g7.
end()), current7_(current7),
16167 begin8_(g8.
begin()), end8_(g8.
end()), current8_(current8),
16168 begin9_(g9.
begin()), end9_(g9.
end()), current9_(current9) {
16169 ComputeCurrentValue();
16173 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
16178 virtual void Advance() {
16181 if (current9_ == end9_) {
16182 current9_ = begin9_;
16185 if (current8_ == end8_) {
16186 current8_ = begin8_;
16189 if (current7_ == end7_) {
16190 current7_ = begin7_;
16193 if (current6_ == end6_) {
16194 current6_ = begin6_;
16197 if (current5_ == end5_) {
16198 current5_ = begin5_;
16201 if (current4_ == end4_) {
16202 current4_ = begin4_;
16205 if (current3_ == end3_) {
16206 current3_ = begin3_;
16209 if (current2_ == end2_) {
16210 current2_ = begin2_;
16213 ComputeCurrentValue();
16215 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
16218 virtual const ParamType* Current()
const {
return ¤t_value_; }
16219 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
16222 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
16223 <<
"The program attempted to compare iterators "
16224 <<
"from different generators." << std::endl;
16226 CheckedDowncastToActualType<const Iterator>(&other);
16230 return (AtEnd() && typed_other->AtEnd()) ||
16232 current1_ == typed_other->current1_ &&
16233 current2_ == typed_other->current2_ &&
16234 current3_ == typed_other->current3_ &&
16235 current4_ == typed_other->current4_ &&
16236 current5_ == typed_other->current5_ &&
16237 current6_ == typed_other->current6_ &&
16238 current7_ == typed_other->current7_ &&
16239 current8_ == typed_other->current8_ &&
16240 current9_ == typed_other->current9_);
16245 : base_(other.base_),
16246 begin1_(other.begin1_),
16247 end1_(other.end1_),
16248 current1_(other.current1_),
16249 begin2_(other.begin2_),
16250 end2_(other.end2_),
16251 current2_(other.current2_),
16252 begin3_(other.begin3_),
16253 end3_(other.end3_),
16254 current3_(other.current3_),
16255 begin4_(other.begin4_),
16256 end4_(other.end4_),
16257 current4_(other.current4_),
16258 begin5_(other.begin5_),
16259 end5_(other.end5_),
16260 current5_(other.current5_),
16261 begin6_(other.begin6_),
16262 end6_(other.end6_),
16263 current6_(other.current6_),
16264 begin7_(other.begin7_),
16265 end7_(other.end7_),
16266 current7_(other.current7_),
16267 begin8_(other.begin8_),
16268 end8_(other.end8_),
16269 current8_(other.current8_),
16270 begin9_(other.begin9_),
16271 end9_(other.end9_),
16272 current9_(other.current9_) {
16273 ComputeCurrentValue();
16276 void ComputeCurrentValue() {
16278 current_value_ = ParamType(*current1_, *current2_, *current3_,
16279 *current4_, *current5_, *current6_, *current7_, *current8_,
16282 bool AtEnd()
const {
16286 current1_ == end1_ ||
16287 current2_ == end2_ ||
16288 current3_ == end3_ ||
16289 current4_ == end4_ ||
16290 current5_ == end5_ ||
16291 current6_ == end6_ ||
16292 current7_ == end7_ ||
16293 current8_ == end8_ ||
16294 current9_ == end9_;
16298 void operator=(
const Iterator& other);
16300 const ParamGeneratorInterface<ParamType>*
const base_;
16330 ParamType current_value_;
16334 void operator=(
const CartesianProductGenerator9& other);
16336 const ParamGenerator<T1> g1_;
16337 const ParamGenerator<T2> g2_;
16338 const ParamGenerator<T3> g3_;
16339 const ParamGenerator<T4> g4_;
16340 const ParamGenerator<T5> g5_;
16341 const ParamGenerator<T6> g6_;
16342 const ParamGenerator<T7> g7_;
16343 const ParamGenerator<T8> g8_;
16344 const ParamGenerator<T9> g9_;
16348 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16349 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
16350 class CartesianProductGenerator10
16351 :
public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
16352 T7, T8, T9, T10> > {
16354 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
16356 CartesianProductGenerator10(
const ParamGenerator<T1>& g1,
16357 const ParamGenerator<T2>& g2,
const ParamGenerator<T3>& g3,
16358 const ParamGenerator<T4>& g4,
const ParamGenerator<T5>& g5,
16359 const ParamGenerator<T6>& g6,
const ParamGenerator<T7>& g7,
16360 const ParamGenerator<T8>& g8,
const ParamGenerator<T9>& g9,
16361 const ParamGenerator<T10>& g10)
16362 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
16363 g9_(g9), g10_(g10) {}
16364 virtual ~CartesianProductGenerator10() {}
16366 virtual ParamIteratorInterface<ParamType>* Begin()
const {
16367 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
16368 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
16369 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
16371 virtual ParamIteratorInterface<ParamType>* End()
const {
16372 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
16373 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
16374 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
16378 class Iterator :
public ParamIteratorInterface<ParamType> {
16380 Iterator(
const ParamGeneratorInterface<ParamType>*
base,
16381 const ParamGenerator<T1>& g1,
16383 const ParamGenerator<T2>& g2,
16385 const ParamGenerator<T3>& g3,
16387 const ParamGenerator<T4>& g4,
16389 const ParamGenerator<T5>& g5,
16391 const ParamGenerator<T6>& g6,
16393 const ParamGenerator<T7>& g7,
16395 const ParamGenerator<T8>& g8,
16397 const ParamGenerator<T9>& g9,
16399 const ParamGenerator<T10>& g10,
16402 begin1_(g1.
begin()), end1_(g1.
end()), current1_(current1),
16403 begin2_(g2.
begin()), end2_(g2.
end()), current2_(current2),
16404 begin3_(g3.
begin()), end3_(g3.
end()), current3_(current3),
16405 begin4_(g4.
begin()), end4_(g4.
end()), current4_(current4),
16406 begin5_(g5.
begin()), end5_(g5.
end()), current5_(current5),
16407 begin6_(g6.
begin()), end6_(g6.
end()), current6_(current6),
16408 begin7_(g7.
begin()), end7_(g7.
end()), current7_(current7),
16409 begin8_(g8.
begin()), end8_(g8.
end()), current8_(current8),
16410 begin9_(g9.
begin()), end9_(g9.
end()), current9_(current9),
16411 begin10_(g10.
begin()), end10_(g10.
end()), current10_(current10) {
16412 ComputeCurrentValue();
16416 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator()
const {
16421 virtual void Advance() {
16424 if (current10_ == end10_) {
16425 current10_ = begin10_;
16428 if (current9_ == end9_) {
16429 current9_ = begin9_;
16432 if (current8_ == end8_) {
16433 current8_ = begin8_;
16436 if (current7_ == end7_) {
16437 current7_ = begin7_;
16440 if (current6_ == end6_) {
16441 current6_ = begin6_;
16444 if (current5_ == end5_) {
16445 current5_ = begin5_;
16448 if (current4_ == end4_) {
16449 current4_ = begin4_;
16452 if (current3_ == end3_) {
16453 current3_ = begin3_;
16456 if (current2_ == end2_) {
16457 current2_ = begin2_;
16460 ComputeCurrentValue();
16462 virtual ParamIteratorInterface<ParamType>*
Clone()
const {
16465 virtual const ParamType* Current()
const {
return ¤t_value_; }
16466 virtual bool Equals(
const ParamIteratorInterface<ParamType>& other)
const {
16469 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
16470 <<
"The program attempted to compare iterators "
16471 <<
"from different generators." << std::endl;
16473 CheckedDowncastToActualType<const Iterator>(&other);
16477 return (AtEnd() && typed_other->AtEnd()) ||
16479 current1_ == typed_other->current1_ &&
16480 current2_ == typed_other->current2_ &&
16481 current3_ == typed_other->current3_ &&
16482 current4_ == typed_other->current4_ &&
16483 current5_ == typed_other->current5_ &&
16484 current6_ == typed_other->current6_ &&
16485 current7_ == typed_other->current7_ &&
16486 current8_ == typed_other->current8_ &&
16487 current9_ == typed_other->current9_ &&
16488 current10_ == typed_other->current10_);
16493 : base_(other.base_),
16494 begin1_(other.begin1_),
16495 end1_(other.end1_),
16496 current1_(other.current1_),
16497 begin2_(other.begin2_),
16498 end2_(other.end2_),
16499 current2_(other.current2_),
16500 begin3_(other.begin3_),
16501 end3_(other.end3_),
16502 current3_(other.current3_),
16503 begin4_(other.begin4_),
16504 end4_(other.end4_),
16505 current4_(other.current4_),
16506 begin5_(other.begin5_),
16507 end5_(other.end5_),
16508 current5_(other.current5_),
16509 begin6_(other.begin6_),
16510 end6_(other.end6_),
16511 current6_(other.current6_),
16512 begin7_(other.begin7_),
16513 end7_(other.end7_),
16514 current7_(other.current7_),
16515 begin8_(other.begin8_),
16516 end8_(other.end8_),
16517 current8_(other.current8_),
16518 begin9_(other.begin9_),
16519 end9_(other.end9_),
16520 current9_(other.current9_),
16521 begin10_(other.begin10_),
16522 end10_(other.end10_),
16523 current10_(other.current10_) {
16524 ComputeCurrentValue();
16527 void ComputeCurrentValue() {
16529 current_value_ = ParamType(*current1_, *current2_, *current3_,
16530 *current4_, *current5_, *current6_, *current7_, *current8_,
16531 *current9_, *current10_);
16533 bool AtEnd()
const {
16537 current1_ == end1_ ||
16538 current2_ == end2_ ||
16539 current3_ == end3_ ||
16540 current4_ == end4_ ||
16541 current5_ == end5_ ||
16542 current6_ == end6_ ||
16543 current7_ == end7_ ||
16544 current8_ == end8_ ||
16545 current9_ == end9_ ||
16546 current10_ == end10_;
16550 void operator=(
const Iterator& other);
16552 const ParamGeneratorInterface<ParamType>*
const base_;
16585 ParamType current_value_;
16589 void operator=(
const CartesianProductGenerator10& other);
16591 const ParamGenerator<T1> g1_;
16592 const ParamGenerator<T2> g2_;
16593 const ParamGenerator<T3> g3_;
16594 const ParamGenerator<T4> g4_;
16595 const ParamGenerator<T5> g5_;
16596 const ParamGenerator<T6> g6_;
16597 const ParamGenerator<T7> g7_;
16598 const ParamGenerator<T8> g8_;
16599 const ParamGenerator<T9> g9_;
16600 const ParamGenerator<T10> g10_;
16610 template <
class Generator1,
class Generator2>
16611 class CartesianProductHolder2 {
16613 CartesianProductHolder2(
const Generator1& g1,
const Generator2& g2)
16614 : g1_(g1), g2_(g2) {}
16615 template <
typename T1,
typename T2>
16616 operator ParamGenerator< ::testing::tuple<T1, T2> >()
const {
16617 return ParamGenerator< ::testing::tuple<T1, T2> >(
16618 new CartesianProductGenerator2<T1, T2>(
16619 static_cast<ParamGenerator<T1>
>(g1_),
16620 static_cast<ParamGenerator<T2>
>(g2_)));
16625 void operator=(
const CartesianProductHolder2& other);
16627 const Generator1 g1_;
16628 const Generator2 g2_;
16631 template <
class Generator1,
class Generator2,
class Generator3>
16632 class CartesianProductHolder3 {
16634 CartesianProductHolder3(
const Generator1& g1,
const Generator2& g2,
16635 const Generator3& g3)
16636 : g1_(g1), g2_(g2), g3_(g3) {}
16637 template <
typename T1,
typename T2,
typename T3>
16638 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >()
const {
16639 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
16640 new CartesianProductGenerator3<T1, T2, T3>(
16641 static_cast<ParamGenerator<T1>
>(g1_),
16642 static_cast<ParamGenerator<T2>
>(g2_),
16643 static_cast<ParamGenerator<T3>
>(g3_)));
16648 void operator=(
const CartesianProductHolder3& other);
16650 const Generator1 g1_;
16651 const Generator2 g2_;
16652 const Generator3 g3_;
16655 template <
class Generator1,
class Generator2,
class Generator3,
16657 class CartesianProductHolder4 {
16659 CartesianProductHolder4(
const Generator1& g1,
const Generator2& g2,
16660 const Generator3& g3,
const Generator4& g4)
16661 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
16662 template <
typename T1,
typename T2,
typename T3,
typename T4>
16663 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >()
const {
16664 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
16665 new CartesianProductGenerator4<T1, T2, T3, T4>(
16666 static_cast<ParamGenerator<T1>
>(g1_),
16667 static_cast<ParamGenerator<T2>
>(g2_),
16668 static_cast<ParamGenerator<T3>
>(g3_),
16669 static_cast<ParamGenerator<T4>
>(g4_)));
16674 void operator=(
const CartesianProductHolder4& other);
16676 const Generator1 g1_;
16677 const Generator2 g2_;
16678 const Generator3 g3_;
16679 const Generator4 g4_;
16682 template <
class Generator1,
class Generator2,
class Generator3,
16683 class Generator4,
class Generator5>
16684 class CartesianProductHolder5 {
16686 CartesianProductHolder5(
const Generator1& g1,
const Generator2& g2,
16687 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
16688 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
16689 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
16690 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >()
const {
16691 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
16692 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
16693 static_cast<ParamGenerator<T1>
>(g1_),
16694 static_cast<ParamGenerator<T2>
>(g2_),
16695 static_cast<ParamGenerator<T3>
>(g3_),
16696 static_cast<ParamGenerator<T4>
>(g4_),
16697 static_cast<ParamGenerator<T5>
>(g5_)));
16702 void operator=(
const CartesianProductHolder5& other);
16704 const Generator1 g1_;
16705 const Generator2 g2_;
16706 const Generator3 g3_;
16707 const Generator4 g4_;
16708 const Generator5 g5_;
16711 template <
class Generator1,
class Generator2,
class Generator3,
16712 class Generator4,
class Generator5,
class Generator6>
16713 class CartesianProductHolder6 {
16715 CartesianProductHolder6(
const Generator1& g1,
const Generator2& g2,
16716 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
16717 const Generator6& g6)
16718 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
16719 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16721 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >()
const {
16722 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
16723 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
16724 static_cast<ParamGenerator<T1>
>(g1_),
16725 static_cast<ParamGenerator<T2>
>(g2_),
16726 static_cast<ParamGenerator<T3>
>(g3_),
16727 static_cast<ParamGenerator<T4>
>(g4_),
16728 static_cast<ParamGenerator<T5>
>(g5_),
16729 static_cast<ParamGenerator<T6>
>(g6_)));
16734 void operator=(
const CartesianProductHolder6& other);
16736 const Generator1 g1_;
16737 const Generator2 g2_;
16738 const Generator3 g3_;
16739 const Generator4 g4_;
16740 const Generator5 g5_;
16741 const Generator6 g6_;
16744 template <
class Generator1,
class Generator2,
class Generator3,
16745 class Generator4,
class Generator5,
class Generator6,
class Generator7>
16746 class CartesianProductHolder7 {
16748 CartesianProductHolder7(
const Generator1& g1,
const Generator2& g2,
16749 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
16750 const Generator6& g6,
const Generator7& g7)
16751 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
16752 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16753 typename T6,
typename T7>
16754 operator ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6,
16756 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
16757 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
16758 static_cast<ParamGenerator<T1>
>(g1_),
16759 static_cast<ParamGenerator<T2>
>(g2_),
16760 static_cast<ParamGenerator<T3>
>(g3_),
16761 static_cast<ParamGenerator<T4>
>(g4_),
16762 static_cast<ParamGenerator<T5>
>(g5_),
16763 static_cast<ParamGenerator<T6>
>(g6_),
16764 static_cast<ParamGenerator<T7>
>(g7_)));
16769 void operator=(
const CartesianProductHolder7& other);
16771 const Generator1 g1_;
16772 const Generator2 g2_;
16773 const Generator3 g3_;
16774 const Generator4 g4_;
16775 const Generator5 g5_;
16776 const Generator6 g6_;
16777 const Generator7 g7_;
16780 template <
class Generator1,
class Generator2,
class Generator3,
16781 class Generator4,
class Generator5,
class Generator6,
class Generator7,
16783 class CartesianProductHolder8 {
16785 CartesianProductHolder8(
const Generator1& g1,
const Generator2& g2,
16786 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
16787 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
16788 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
16790 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16791 typename T6,
typename T7,
typename T8>
16792 operator ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6, T7,
16794 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
16795 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
16796 static_cast<ParamGenerator<T1>
>(g1_),
16797 static_cast<ParamGenerator<T2>
>(g2_),
16798 static_cast<ParamGenerator<T3>
>(g3_),
16799 static_cast<ParamGenerator<T4>
>(g4_),
16800 static_cast<ParamGenerator<T5>
>(g5_),
16801 static_cast<ParamGenerator<T6>
>(g6_),
16802 static_cast<ParamGenerator<T7>
>(g7_),
16803 static_cast<ParamGenerator<T8>
>(g8_)));
16808 void operator=(
const CartesianProductHolder8& other);
16810 const Generator1 g1_;
16811 const Generator2 g2_;
16812 const Generator3 g3_;
16813 const Generator4 g4_;
16814 const Generator5 g5_;
16815 const Generator6 g6_;
16816 const Generator7 g7_;
16817 const Generator8 g8_;
16820 template <
class Generator1,
class Generator2,
class Generator3,
16821 class Generator4,
class Generator5,
class Generator6,
class Generator7,
16822 class Generator8,
class Generator9>
16823 class CartesianProductHolder9 {
16825 CartesianProductHolder9(
const Generator1& g1,
const Generator2& g2,
16826 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
16827 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
16828 const Generator9& g9)
16829 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
16831 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16832 typename T6,
typename T7,
typename T8,
typename T9>
16833 operator ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6, T7, T8,
16835 return ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6, T7, T8,
16837 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
16838 static_cast<ParamGenerator<T1>
>(g1_),
16839 static_cast<ParamGenerator<T2>
>(g2_),
16840 static_cast<ParamGenerator<T3>
>(g3_),
16841 static_cast<ParamGenerator<T4>
>(g4_),
16842 static_cast<ParamGenerator<T5>
>(g5_),
16843 static_cast<ParamGenerator<T6>
>(g6_),
16844 static_cast<ParamGenerator<T7>
>(g7_),
16845 static_cast<ParamGenerator<T8>
>(g8_),
16846 static_cast<ParamGenerator<T9>
>(g9_)));
16851 void operator=(
const CartesianProductHolder9& other);
16853 const Generator1 g1_;
16854 const Generator2 g2_;
16855 const Generator3 g3_;
16856 const Generator4 g4_;
16857 const Generator5 g5_;
16858 const Generator6 g6_;
16859 const Generator7 g7_;
16860 const Generator8 g8_;
16861 const Generator9 g9_;
16864 template <
class Generator1,
class Generator2,
class Generator3,
16865 class Generator4,
class Generator5,
class Generator6,
class Generator7,
16866 class Generator8,
class Generator9,
class Generator10>
16867 class CartesianProductHolder10 {
16869 CartesianProductHolder10(
const Generator1& g1,
const Generator2& g2,
16870 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
16871 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
16872 const Generator9& g9,
const Generator10& g10)
16873 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
16874 g9_(g9), g10_(g10) {}
16875 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16876 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
16877 operator ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9,
16879 return ParamGenerator< ::testing::tuple<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9,
16881 new CartesianProductGenerator10<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9,
16883 static_cast<ParamGenerator<T1>
>(g1_),
16884 static_cast<ParamGenerator<T2>
>(g2_),
16885 static_cast<ParamGenerator<T3>
>(g3_),
16886 static_cast<ParamGenerator<T4>
>(g4_),
16887 static_cast<ParamGenerator<T5>
>(g5_),
16888 static_cast<ParamGenerator<T6>
>(g6_),
16889 static_cast<ParamGenerator<T7>
>(g7_),
16890 static_cast<ParamGenerator<T8>
>(g8_),
16891 static_cast<ParamGenerator<T9>
>(g9_),
16892 static_cast<ParamGenerator<T10>
>(g10_)));
16897 void operator=(
const CartesianProductHolder10& other);
16899 const Generator1 g1_;
16900 const Generator2 g2_;
16901 const Generator3 g3_;
16902 const Generator4 g4_;
16903 const Generator5 g5_;
16904 const Generator6 g6_;
16905 const Generator7 g7_;
16906 const Generator8 g8_;
16907 const Generator9 g9_;
16908 const Generator10 g10_;
16911 # endif // GTEST_HAS_COMBINE
16916 #endif // GTEST_HAS_PARAM_TEST
16918 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
16920 #if GTEST_HAS_PARAM_TEST
16966 template <
typename T,
typename IncrementT>
16968 return internal::ParamGenerator<T>(
16969 new internal::RangeGenerator<T, IncrementT>(
start,
end,
step));
16972 template <
typename T>
17032 template <
typename ForwardIterator>
17033 internal::ParamGenerator<
17036 typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
17038 return internal::ParamGenerator<ParamType>(
17039 new internal::ValuesInIteratorRangeGenerator<ParamType>(
begin,
end));
17042 template <
typename T,
size_t N>
17047 template <
class Container>
17048 internal::ParamGenerator<typename Container::value_type>
ValuesIn(
17072 template <
typename T1>
17077 template <
typename T1,
typename T2>
17082 template <
typename T1,
typename T2,
typename T3>
17087 template <
typename T1,
typename T2,
typename T3,
typename T4>
17092 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
17098 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17101 T4 v4,
T5 v5, T6 v6) {
17102 return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
17105 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17106 typename T6,
typename T7>
17108 T4 v4,
T5 v5, T6 v6, T7 v7) {
17109 return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
17113 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17114 typename T6,
typename T7,
typename T8>
17116 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8) {
17117 return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
17121 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17122 typename T6,
typename T7,
typename T8,
typename T9>
17123 internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(
T1 v1,
T2 v2,
17124 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
17125 return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
17126 v4, v5, v6, v7, v8, v9);
17129 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17130 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
17131 internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(
T1 v1,
17132 T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
17133 return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
17134 v2, v3, v4, v5, v6, v7, v8, v9, v10);
17137 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17138 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17140 internal::ValueArray11<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10,
17142 T10 v10, T11 v11) {
17143 return internal::ValueArray11<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10,
17144 T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
17147 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17148 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17149 typename T11,
typename T12>
17150 internal::ValueArray12<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17152 T10 v10, T11 v11, T12 v12) {
17153 return internal::ValueArray12<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17154 T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
17157 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17158 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17159 typename T11,
typename T12,
typename T13>
17160 internal::ValueArray13<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12,
17162 T10 v10, T11 v11, T12 v12, T13 v13) {
17163 return internal::ValueArray13<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17164 T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
17167 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17168 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17169 typename T11,
typename T12,
typename T13,
typename T14>
17170 internal::ValueArray14<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17172 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
17173 return internal::ValueArray14<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17174 T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
17178 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17179 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17180 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
17181 internal::ValueArray15<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17183 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
17184 return internal::ValueArray15<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17185 T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
17189 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17190 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17191 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17193 internal::ValueArray16<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17195 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17197 return internal::ValueArray16<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17198 T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
17199 v12, v13, v14, v15, v16);
17202 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17203 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17204 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17205 typename T16,
typename T17>
17206 internal::ValueArray17<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17207 T14, T15, T16, T17>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7,
17208 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17209 T16 v16, T17 v17) {
17210 return internal::ValueArray17<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17211 T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
17212 v11, v12, v13, v14, v15, v16, v17);
17215 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17216 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17217 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17218 typename T16,
typename T17,
typename T18>
17219 internal::ValueArray18<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17220 T14, T15, T16, T17, T18>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6,
17221 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17222 T16 v16, T17 v17, T18 v18) {
17223 return internal::ValueArray18<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17224 T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
17225 v10, v11, v12, v13, v14, v15, v16, v17, v18);
17228 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17229 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17230 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17231 typename T16,
typename T17,
typename T18,
typename T19>
17232 internal::ValueArray19<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17233 T14, T15, T16, T17, T18, T19>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5,
17234 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
17235 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
17236 return internal::ValueArray19<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17237 T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
17238 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
17241 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17242 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17243 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17244 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
17245 internal::ValueArray20<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17246 T14, T15, T16, T17, T18, T19, T20>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
17247 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
17248 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
17249 return internal::ValueArray20<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17250 T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
17251 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
17254 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17255 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17256 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17257 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17259 internal::ValueArray21<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17260 T14, T15, T16, T17, T18, T19, T20, T21>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
17261 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
17262 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
17263 return internal::ValueArray21<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17264 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
17265 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
17268 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17269 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17270 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17271 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17272 typename T21,
typename T22>
17273 internal::ValueArray22<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17274 T14, T15, T16, T17, T18, T19, T20, T21, T22>
Values(
T1 v1,
T2 v2,
T3 v3,
17275 T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17276 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17277 T21 v21, T22 v22) {
17278 return internal::ValueArray22<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17279 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
17280 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
17284 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17285 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17286 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17287 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17288 typename T21,
typename T22,
typename T23>
17289 internal::ValueArray23<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17290 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>
Values(
T1 v1,
T2 v2,
17291 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17292 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17293 T21 v21, T22 v22, T23 v23) {
17294 return internal::ValueArray23<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17295 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
17296 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
17297 v20, v21, v22, v23);
17300 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17301 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17302 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17303 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17304 typename T21,
typename T22,
typename T23,
typename T24>
17305 internal::ValueArray24<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17306 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>
Values(
T1 v1,
T2 v2,
17307 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17308 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17309 T21 v21, T22 v22, T23 v23, T24 v24) {
17310 return internal::ValueArray24<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17311 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
17312 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
17313 v19, v20, v21, v22, v23, v24);
17316 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17317 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17318 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17319 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17320 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
17321 internal::ValueArray25<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17322 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>
Values(
T1 v1,
17323 T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
17324 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
17325 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
17326 return internal::ValueArray25<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17327 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
17328 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
17329 v18, v19, v20, v21, v22, v23, v24, v25);
17332 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17333 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17334 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17335 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17336 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17338 internal::ValueArray26<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17339 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17341 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17342 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17344 return internal::ValueArray26<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17345 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17346 T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
17347 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
17350 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17351 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17352 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17353 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17354 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17355 typename T26,
typename T27>
17356 internal::ValueArray27<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17357 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
17359 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17360 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17361 T26 v26, T27 v27) {
17362 return internal::ValueArray27<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17363 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17364 T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
17365 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
17368 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17369 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17370 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17371 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17372 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17373 typename T26,
typename T27,
typename T28>
17374 internal::ValueArray28<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17375 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
17377 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17378 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17379 T26 v26, T27 v27, T28 v28) {
17380 return internal::ValueArray28<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17381 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17382 T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
17383 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
17387 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17388 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17389 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17390 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17391 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17392 typename T26,
typename T27,
typename T28,
typename T29>
17393 internal::ValueArray29<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17394 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17396 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17397 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17398 T26 v26, T27 v27, T28 v28, T29 v29) {
17399 return internal::ValueArray29<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17400 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17401 T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
17402 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
17406 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17407 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17408 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17409 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17410 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17411 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
17412 internal::ValueArray30<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17413 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17415 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
17416 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
17417 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
17418 return internal::ValueArray30<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17419 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17420 T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
17421 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
17422 v26, v27, v28, v29, v30);
17425 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17426 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17427 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17428 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17429 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17430 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17432 internal::ValueArray31<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17433 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17435 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17436 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17437 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
17438 return internal::ValueArray31<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17439 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17440 T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
17441 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
17442 v25, v26, v27, v28, v29, v30, v31);
17445 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17446 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17447 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17448 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17449 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17450 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17451 typename T31,
typename T32>
17452 internal::ValueArray32<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17453 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17454 T29, T30, T31, T32>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7,
17455 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17456 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17457 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
17459 return internal::ValueArray32<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17460 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17461 T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
17462 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
17463 v24, v25, v26, v27, v28, v29, v30, v31, v32);
17466 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17467 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17468 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17469 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17470 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17471 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17472 typename T31,
typename T32,
typename T33>
17473 internal::ValueArray33<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17474 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17475 T29, T30, T31, T32, T33>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6,
17476 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17477 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17478 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
17479 T32 v32, T33 v33) {
17480 return internal::ValueArray33<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17481 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17482 T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
17483 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
17484 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
17487 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17488 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17489 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17490 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17491 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17492 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17493 typename T31,
typename T32,
typename T33,
typename T34>
17494 internal::ValueArray34<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17495 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17496 T29, T30, T31, T32, T33, T34>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5,
17497 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
17498 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
17499 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
17500 T31 v31, T32 v32, T33 v33, T34 v34) {
17501 return internal::ValueArray34<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17502 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17503 T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
17504 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
17505 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
17508 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17509 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17510 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17511 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17512 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17513 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17514 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
17515 internal::ValueArray35<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17516 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17517 T29, T30, T31, T32, T33, T34, T35>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
17518 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
17519 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
17520 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
17521 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
17522 return internal::ValueArray35<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17523 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17524 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
17525 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
17526 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
17529 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17530 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17531 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17532 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17533 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17534 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17535 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17537 internal::ValueArray36<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17538 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17539 T29, T30, T31, T32, T33, T34, T35, T36>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
17540 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
17541 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
17542 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
17543 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
17544 return internal::ValueArray36<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17545 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17546 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
17547 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
17548 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
17552 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17553 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17554 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17555 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17556 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17557 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17558 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17559 typename T36,
typename T37>
17560 internal::ValueArray37<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17561 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17562 T29, T30, T31, T32, T33, T34, T35, T36, T37>
Values(
T1 v1,
T2 v2,
T3 v3,
17563 T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17564 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17565 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
17566 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
17568 return internal::ValueArray37<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17569 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17570 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
17571 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
17572 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
17573 v34, v35, v36, v37);
17576 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17577 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17578 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17579 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17580 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17581 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17582 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17583 typename T36,
typename T37,
typename T38>
17584 internal::ValueArray38<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17585 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17586 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>
Values(
T1 v1,
T2 v2,
17587 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17588 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17589 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
17590 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
17591 T37 v37, T38 v38) {
17592 return internal::ValueArray38<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17593 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17594 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
17595 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
17596 v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
17597 v33, v34, v35, v36, v37, v38);
17600 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17601 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17602 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17603 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17604 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17605 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17606 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17607 typename T36,
typename T37,
typename T38,
typename T39>
17608 internal::ValueArray39<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17609 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17610 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>
Values(
T1 v1,
T2 v2,
17611 T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
17612 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
17613 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
17614 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
17615 T37 v37, T38 v38, T39 v39) {
17616 return internal::ValueArray39<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17617 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17618 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
17619 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
17620 v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
17621 v32, v33, v34, v35, v36, v37, v38, v39);
17624 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17625 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17626 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17627 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17628 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17629 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17630 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17631 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
17632 internal::ValueArray40<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17633 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17634 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40>
Values(
T1 v1,
17635 T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
17636 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
17637 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
17638 T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
17639 T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
17640 return internal::ValueArray40<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17641 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17642 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17643 T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
17644 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
17645 v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
17648 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17649 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17650 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17651 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17652 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17653 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17654 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17655 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17657 internal::ValueArray41<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17658 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17659 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
17661 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17662 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17663 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
17664 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
17665 return internal::ValueArray41<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17666 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17667 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17668 T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
17669 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
17670 v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
17673 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17674 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17675 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17676 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17677 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17678 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17679 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17680 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17681 typename T41,
typename T42>
17682 internal::ValueArray42<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17683 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17684 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
17686 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17687 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17688 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
17689 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
17691 return internal::ValueArray42<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17692 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17693 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17694 T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
17695 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
17696 v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
17700 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17701 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17702 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17703 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17704 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17705 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17706 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17707 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17708 typename T41,
typename T42,
typename T43>
17709 internal::ValueArray43<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17710 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17711 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
17713 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17714 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17715 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
17716 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
17717 T42 v42, T43 v43) {
17718 return internal::ValueArray43<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17719 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17720 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17721 T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
17722 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
17723 v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
17727 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17728 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17729 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17730 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17731 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17732 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17733 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17734 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17735 typename T41,
typename T42,
typename T43,
typename T44>
17736 internal::ValueArray44<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17737 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17738 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17740 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
17741 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
17742 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
17743 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
17744 T42 v42, T43 v43, T44 v44) {
17745 return internal::ValueArray44<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17746 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17747 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17748 T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
17749 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
17750 v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
17751 v40, v41, v42, v43, v44);
17754 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17755 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17756 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17757 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17758 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17759 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17760 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17761 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17762 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
17763 internal::ValueArray45<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17764 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17765 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17767 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
17768 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
17769 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
17770 T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
17771 T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
17772 return internal::ValueArray45<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17773 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17774 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17775 T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
17776 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
17777 v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
17778 v39, v40, v41, v42, v43, v44, v45);
17781 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17782 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17783 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17784 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17785 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17786 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17787 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17788 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17789 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
17791 internal::ValueArray46<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17792 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17793 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17795 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17796 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17797 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
17798 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
17799 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
17800 return internal::ValueArray46<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17801 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17802 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17803 T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
17804 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
17805 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
17806 v38, v39, v40, v41, v42, v43, v44, v45, v46);
17809 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17810 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17811 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17812 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17813 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17814 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17815 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17816 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17817 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
17818 typename T46,
typename T47>
17819 internal::ValueArray47<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17820 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17821 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17822 T44, T45, T46, T47>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6, T7 v7,
17823 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17824 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17825 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
17826 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
17827 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
17828 return internal::ValueArray47<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17829 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17830 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17831 T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
17832 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
17833 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
17834 v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
17837 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17838 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17839 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17840 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17841 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17842 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17843 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17844 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17845 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
17846 typename T46,
typename T47,
typename T48>
17847 internal::ValueArray48<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17848 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17849 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17850 T44, T45, T46, T47, T48>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5, T6 v6,
17851 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
17852 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
17853 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
17854 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
17855 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
17857 return internal::ValueArray48<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17858 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17859 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17860 T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
17861 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
17862 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
17863 v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
17866 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17867 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17868 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17869 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17870 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17871 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17872 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17873 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17874 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
17875 typename T46,
typename T47,
typename T48,
typename T49>
17876 internal::ValueArray49<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17877 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17878 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17879 T44, T45, T46, T47, T48, T49>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
T5 v5,
17880 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
17881 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
17882 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
17883 T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
17884 T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
17885 T47 v47, T48 v48, T49 v49) {
17886 return internal::ValueArray49<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17887 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17888 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17889 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
17890 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
17891 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
17892 v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
17895 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
17896 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
17897 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
17898 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
17899 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
17900 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
17901 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
17902 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
17903 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
17904 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
17905 internal::ValueArray50<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11, T12, T13,
17906 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
17907 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
17908 T44, T45, T46, T47, T48, T49, T50>
Values(
T1 v1,
T2 v2,
T3 v3,
T4 v4,
17909 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
17910 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
17911 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
17912 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
17913 T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
17914 T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
17915 return internal::ValueArray50<
T1,
T2,
T3,
T4,
T5, T6, T7, T8, T9, T10, T11,
17916 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
17917 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
17918 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
17919 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
17920 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
17921 v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
17945 inline internal::ParamGenerator<bool>
Bool() {
17946 return Values(
false,
true);
17949 # if GTEST_HAS_COMBINE
17998 template <
typename Generator1,
typename Generator2>
17999 internal::CartesianProductHolder2<Generator1, Generator2>
Combine(
18000 const Generator1& g1,
const Generator2& g2) {
18001 return internal::CartesianProductHolder2<Generator1, Generator2>(
18005 template <
typename Generator1,
typename Generator2,
typename Generator3>
18006 internal::CartesianProductHolder3<Generator1, Generator2, Generator3>
Combine(
18007 const Generator1& g1,
const Generator2& g2,
const Generator3& g3) {
18008 return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
18012 template <
typename Generator1,
typename Generator2,
typename Generator3,
18013 typename Generator4>
18014 internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
18016 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18017 const Generator4& g4) {
18018 return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
18023 template <
typename Generator1,
typename Generator2,
typename Generator3,
18024 typename Generator4,
typename Generator5>
18025 internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
18026 Generator4, Generator5>
Combine(
18027 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18028 const Generator4& g4,
const Generator5& g5) {
18029 return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
18030 Generator4, Generator5>(
18031 g1, g2, g3, g4, g5);
18034 template <
typename Generator1,
typename Generator2,
typename Generator3,
18035 typename Generator4,
typename Generator5,
typename Generator6>
18036 internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
18037 Generator4, Generator5, Generator6>
Combine(
18038 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18039 const Generator4& g4,
const Generator5& g5,
const Generator6& g6) {
18040 return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
18041 Generator4, Generator5, Generator6>(
18042 g1, g2, g3, g4, g5, g6);
18045 template <
typename Generator1,
typename Generator2,
typename Generator3,
18046 typename Generator4,
typename Generator5,
typename Generator6,
18047 typename Generator7>
18048 internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
18049 Generator4, Generator5, Generator6, Generator7>
Combine(
18050 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18051 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
18052 const Generator7& g7) {
18053 return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
18054 Generator4, Generator5, Generator6, Generator7>(
18055 g1, g2, g3, g4, g5, g6, g7);
18058 template <
typename Generator1,
typename Generator2,
typename Generator3,
18059 typename Generator4,
typename Generator5,
typename Generator6,
18060 typename Generator7,
typename Generator8>
18061 internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
18062 Generator4, Generator5, Generator6, Generator7, Generator8>
Combine(
18063 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18064 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
18065 const Generator7& g7,
const Generator8& g8) {
18066 return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
18067 Generator4, Generator5, Generator6, Generator7, Generator8>(
18068 g1, g2, g3, g4, g5, g6, g7, g8);
18071 template <
typename Generator1,
typename Generator2,
typename Generator3,
18072 typename Generator4,
typename Generator5,
typename Generator6,
18073 typename Generator7,
typename Generator8,
typename Generator9>
18074 internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
18075 Generator4, Generator5, Generator6, Generator7, Generator8,
18077 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18078 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
18079 const Generator7& g7,
const Generator8& g8,
const Generator9& g9) {
18080 return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
18081 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
18082 g1, g2, g3, g4, g5, g6, g7, g8, g9);
18085 template <
typename Generator1,
typename Generator2,
typename Generator3,
18086 typename Generator4,
typename Generator5,
typename Generator6,
18087 typename Generator7,
typename Generator8,
typename Generator9,
18088 typename Generator10>
18089 internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
18090 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
18092 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
18093 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
18094 const Generator7& g7,
const Generator8& g8,
const Generator9& g9,
18095 const Generator10& g10) {
18096 return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
18097 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
18099 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
18101 # endif // GTEST_HAS_COMBINE
18105 # define TEST_P(test_case_name, test_name) \
18106 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
18107 : public test_case_name { \
18109 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
18110 virtual void TestBody(); \
18112 static int AddToRegistry() { \
18113 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
18114 GetTestCasePatternHolder<test_case_name>(\
18116 ::testing::internal::CodeLocation(\
18117 __FILE__, __LINE__))->AddTestPattern(\
18120 new ::testing::internal::TestMetaFactory< \
18121 GTEST_TEST_CLASS_NAME_(\
18122 test_case_name, test_name)>()); \
18125 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
18126 GTEST_DISALLOW_COPY_AND_ASSIGN_(\
18127 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
18129 int GTEST_TEST_CLASS_NAME_(test_case_name, \
18130 test_name)::gtest_registering_dummy_ = \
18131 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
18132 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
18146 # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
18147 ::testing::internal::ParamGenerator<test_case_name::ParamType> \
18148 gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
18149 ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
18150 const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
18151 return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
18152 (__VA_ARGS__)(info); \
18154 int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
18155 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
18156 GetTestCasePatternHolder<test_case_name>(\
18158 ::testing::internal::CodeLocation(\
18159 __FILE__, __LINE__))->AddTestCaseInstantiation(\
18161 >est_##prefix##test_case_name##_EvalGenerator_, \
18162 >est_##prefix##test_case_name##_EvalGenerateName_, \
18163 __FILE__, __LINE__)
18167 #endif // GTEST_HAS_PARAM_TEST
18169 #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
18203 #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
18204 #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
18224 #define FRIEND_TEST(test_case_name, test_name)\
18225 friend class test_case_name##_##test_name##_Test
18227 #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_
18260 #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
18261 #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
18286 const char* a_file_name,
18288 const char* a_message)
18290 file_name_(a_file_name == NULL ?
"" : a_file_name),
18291 line_number_(a_line_number),
18292 summary_(ExtractSummary(a_message)),
18293 message_(a_message) {
18302 return file_name_.empty() ? NULL : file_name_.c_str();
18310 const char*
summary()
const {
return summary_.c_str(); }
18313 const char*
message()
const {
return message_.c_str(); }
18404 #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
18436 #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
18437 #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
18449 template <
typename T>
18453 typedef std::list<T> List;
18478 n += TestFixture::shared_;
18482 typename TestFixture::List
values;
18509 template <
typename T>
18534 DoesBlah, HasPropertyA);
18556 #if GTEST_HAS_TYPED_TEST
18562 # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_
18567 # define TYPED_TEST_CASE(CaseName, Types) \
18568 typedef ::testing::internal::TypeList< Types >::type \
18569 GTEST_TYPE_PARAMS_(CaseName)
18571 # define TYPED_TEST(CaseName, TestName) \
18572 template <typename gtest_TypeParam_> \
18573 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
18574 : public CaseName<gtest_TypeParam_> { \
18576 typedef CaseName<gtest_TypeParam_> TestFixture; \
18577 typedef gtest_TypeParam_ TypeParam; \
18578 virtual void TestBody(); \
18580 bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \
18581 ::testing::internal::TypeParameterizedTest< \
18583 ::testing::internal::TemplateSel< \
18584 GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \
18585 GTEST_TYPE_PARAMS_(CaseName)>::Register(\
18586 "", ::testing::internal::CodeLocation(__FILE__, __LINE__), \
18587 #CaseName, #TestName, 0); \
18588 template <typename gtest_TypeParam_> \
18589 void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody()
18591 #endif // GTEST_HAS_TYPED_TEST
18595 #if GTEST_HAS_TYPED_TEST_P
18602 # define GTEST_CASE_NAMESPACE_(TestCaseName) \
18603 gtest_case_##TestCaseName##_
18609 # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \
18610 gtest_typed_test_case_p_state_##TestCaseName##_
18616 # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \
18617 gtest_registered_test_names_##TestCaseName##_
18622 # define TYPED_TEST_CASE_P(CaseName) \
18623 static ::testing::internal::TypedTestCasePState \
18624 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName)
18626 # define TYPED_TEST_P(CaseName, TestName) \
18627 namespace GTEST_CASE_NAMESPACE_(CaseName) { \
18628 template <typename gtest_TypeParam_> \
18629 class TestName : public CaseName<gtest_TypeParam_> { \
18631 typedef CaseName<gtest_TypeParam_> TestFixture; \
18632 typedef gtest_TypeParam_ TypeParam; \
18633 virtual void TestBody(); \
18635 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
18636 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\
18637 __FILE__, __LINE__, #CaseName, #TestName); \
18639 template <typename gtest_TypeParam_> \
18640 void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody()
18642 # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \
18643 namespace GTEST_CASE_NAMESPACE_(CaseName) { \
18644 typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
18646 static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \
18647 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
18648 __FILE__, __LINE__, #__VA_ARGS__)
18653 # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \
18654 bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \
18655 ::testing::internal::TypeParameterizedTestCase<CaseName, \
18656 GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \
18657 ::testing::internal::TypeList< Types >::type>::Register(\
18659 ::testing::internal::CodeLocation(__FILE__, __LINE__), \
18660 >EST_TYPED_TEST_CASE_P_STATE_(CaseName), \
18661 #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName))
18663 #endif // GTEST_HAS_TYPED_TEST_P
18665 #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
18750 class AssertHelper;
18751 class DefaultGlobalTestPartResultReporter;
18752 class ExecDeathTest;
18753 class NoExecDeathTest;
18754 class FinalSuccessChecker;
18755 class GTestFlagSaver;
18756 class StreamingListenerTest;
18757 class TestResultAccessor;
18758 class TestEventListenersAccessor;
18759 class TestEventRepeater;
18760 class UnitTestRecordPropertyTestHelper;
18761 class WindowsDeathTest;
18870 template <
typename T>
18876 : success_(success) {}
18887 operator bool()
const {
return success_; }
18897 return message_.get() != NULL ? message_->c_str() :
"";
18912 ::std::ostream& (*basic_manipulator)(::std::ostream&
stream)) {
18913 AppendMessage(
Message() << basic_manipulator);
18920 if (message_.get() == NULL)
18922 message_->append(a_message.
GetString().c_str());
18999 static bool HasFatalFailure();
19002 static bool HasNonfatalFailure();
19006 static bool HasFailure() {
return HasFatalFailure() || HasNonfatalFailure(); }
19029 virtual void SetUp();
19032 virtual void TearDown();
19037 static bool HasSameFixtureClass();
19045 virtual void TestBody() = 0;
19085 class TestProperty {
19096 return key_.c_str();
19132 int total_part_count()
const;
19135 int test_property_count()
const;
19141 bool Failed()
const;
19144 bool HasFatalFailure()
const;
19147 bool HasNonfatalFailure()
const;
19167 friend class internal::ExecDeathTest;
19170 friend class internal::WindowsDeathTest;
19174 return test_part_results_;
19179 return test_properties_;
19191 void RecordProperty(
const std::string& xml_element,
19197 static bool ValidateTestProperty(
const std::string& xml_element,
19210 void ClearTestPartResults();
19220 std::vector<TestPartResult> test_part_results_;
19222 std::vector<TestProperty> test_properties_;
19224 int death_test_count_;
19258 if (type_param_.get() != NULL)
19259 return type_param_->c_str();
19266 if (value_param_.get() != NULL)
19267 return value_param_->c_str();
19272 const char*
file()
const {
return location_.file.c_str(); }
19275 int line()
const {
return location_.line; }
19300 return matches_filter_;
19307 #if GTEST_HAS_DEATH_TEST
19308 friend class internal::DefaultDeathTestFactory;
19309 #endif // GTEST_HAS_DEATH_TEST
19313 friend class internal::StreamingListenerTest;
19315 const char* test_case_name,
19317 const char* type_param,
19318 const char* value_param,
19329 const char* a_type_param,
19330 const char* a_value_param,
19338 return result_.increment_death_test_count();
19362 bool matches_filter_;
19404 if (type_param_.get() != NULL)
19405 return type_param_->c_str();
19413 int successful_test_count()
const;
19416 int failed_test_count()
const;
19419 int reportable_disabled_test_count()
const;
19422 int disabled_test_count()
const;
19425 int reportable_test_count()
const;
19428 int test_to_run_count()
const;
19431 int total_test_count()
const;
19437 bool Failed()
const {
return failed_test_count() > 0; }
19444 const TestInfo* GetTestInfo(
int i)
const;
19459 return test_info_list_;
19464 TestInfo* GetMutableTestInfo(
int i);
19471 void AddTestInfo(
TestInfo * test_info);
19474 void ClearResult();
19527 void UnshuffleTests();
19584 struct Setup_should_be_spelled_SetUp {};
19590 class TestEventListener {
19595 virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
19600 virtual void OnTestIterationStart(
const UnitTest& unit_test,
19601 int iteration) = 0;
19604 virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
19607 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
19610 virtual void OnTestCaseStart(
const TestCase& test_case) = 0;
19613 virtual void OnTestStart(
const TestInfo& test_info) = 0;
19616 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
19619 virtual void OnTestEnd(
const TestInfo& test_info) = 0;
19622 virtual void OnTestCaseEnd(
const TestCase& test_case) = 0;
19625 virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
19628 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
19631 virtual void OnTestIterationEnd(
const UnitTest& unit_test,
19632 int iteration) = 0;
19635 virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
19643 class EmptyTestEventListener :
public TestEventListener {
19665 TestEventListeners();
19666 ~TestEventListeners();
19671 void Append(TestEventListener* listener);
19676 TestEventListener* Release(TestEventListener* listener);
19684 return default_result_printer_;
19695 return default_xml_generator_;
19702 friend class internal::NoExecDeathTest;
19726 bool EventForwardingEnabled()
const;
19727 void SuppressEventForwarding();
19780 int random_seed()
const;
19782 #if GTEST_HAS_PARAM_TEST
19789 #endif // GTEST_HAS_PARAM_TEST
19792 int successful_test_case_count()
const;
19795 int failed_test_case_count()
const;
19798 int total_test_case_count()
const;
19802 int test_case_to_run_count()
const;
19805 int successful_test_count()
const;
19808 int failed_test_count()
const;
19811 int reportable_disabled_test_count()
const;
19814 int disabled_test_count()
const;
19817 int reportable_test_count()
const;
19820 int total_test_count()
const;
19823 int test_to_run_count()
const;
19833 bool Passed()
const;
19837 bool Failed()
const;
19841 const TestCase* GetTestCase(
int i)
const;
19845 const TestResult& ad_hoc_test_result()
const;
19868 const char* file_name,
19883 TestCase* GetMutableTestCase(
int i);
19894 friend class internal::StreamingListenerTest;
19914 void PopGTestTrace()
19950 return UnitTest::GetInstance()->AddEnvironment(
env);
19973 template <
typename T1,
typename T2>
19975 const char* rhs_expression,
19976 const T1& lhs,
const T2& rhs) {
19985 template <
typename T1,
typename T2>
19986 AssertionResult
CmpHelperEQ(
const char* lhs_expression,
19987 const char* rhs_expression,
20003 const char* rhs_expression,
20011 template <
bool lhs_is_null_literal>
20015 template <
typename T1,
typename T2>
20017 const char* rhs_expression,
20020 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
20030 const char* rhs_expression,
20033 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
20040 class EqHelper<
true> {
20046 template <
typename T1,
typename T2>
20048 const char* lhs_expression,
20049 const char* rhs_expression,
20058 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
20063 template <
typename T>
20065 const char* lhs_expression,
20066 const char* rhs_expression,
20076 return CmpHelperEQ(lhs_expression, rhs_expression,
20077 static_cast<T*
>(NULL), rhs);
20084 template <
typename T1,
typename T2>
20089 <<
"Expected: (" << expr1 <<
") " <<
op <<
" (" << expr2
20105 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\
20106 template <typename T1, typename T2>\
20107 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
20108 const T1& val1, const T2& val2) {\
20109 if (val1 op val2) {\
20110 return AssertionSuccess();\
20112 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\
20115 GTEST_API_ AssertionResult CmpHelper##op_name(\
20116 const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)
20131 #undef GTEST_IMPL_CMP_HELPER_
20137 const char* s2_expression,
20145 const char* s2_expression,
20153 const char* s2_expression,
20161 const char* s2_expression,
20170 const char* s2_expression,
20172 const wchar_t* s2);
20178 const char* s2_expression,
20180 const wchar_t* s2);
20193 const char* needle_expr,
const char* haystack_expr,
20194 const char* needle,
const char* haystack);
20196 const char* needle_expr,
const char* haystack_expr,
20197 const wchar_t* needle,
const wchar_t* haystack);
20199 const char* needle_expr,
const char* haystack_expr,
20200 const char* needle,
const char* haystack);
20202 const char* needle_expr,
const char* haystack_expr,
20203 const wchar_t* needle,
const wchar_t* haystack);
20205 const char* needle_expr,
const char* haystack_expr,
20208 const char* needle_expr,
const char* haystack_expr,
20211 #if GTEST_HAS_STD_WSTRING
20213 const char* needle_expr,
const char* haystack_expr,
20216 const char* needle_expr,
const char* haystack_expr,
20218 #endif // GTEST_HAS_STD_WSTRING
20229 template <
typename RawType>
20231 const char* rhs_expression,
20233 RawType rhs_value) {
20234 const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value);
20236 if (lhs.AlmostEquals(rhs)) {
20240 ::std::stringstream lhs_ss;
20241 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
20244 ::std::stringstream rhs_ss;
20245 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
20260 const char* abs_error_expr,
20285 struct AssertHelperData {
20287 const char* srcfile,
20293 const char*
const file;
20301 AssertHelperData*
const data_;
20308 #if GTEST_HAS_PARAM_TEST
20343 template <
typename T>
20344 class WithParamInterface {
20356 <<
"GetParam() can only be called inside a value-parameterized test "
20357 <<
"-- did you intend to write TEST_P instead of TEST_F?";
20375 template <
typename T>
20381 template <
typename T>
20385 #endif // GTEST_HAS_PARAM_TEST
20407 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
20411 #define ADD_FAILURE_AT(file, line) \
20412 GTEST_MESSAGE_AT_(file, line, "Failed", \
20413 ::testing::TestPartResult::kNonFatalFailure)
20416 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed")
20420 #if !GTEST_DONT_DEFINE_FAIL
20421 # define FAIL() GTEST_FAIL()
20425 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded")
20429 #if !GTEST_DONT_DEFINE_SUCCEED
20430 # define SUCCEED() GTEST_SUCCEED()
20442 #define EXPECT_THROW(statement, expected_exception) \
20443 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
20444 #define EXPECT_NO_THROW(statement) \
20445 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
20446 #define EXPECT_ANY_THROW(statement) \
20447 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
20448 #define ASSERT_THROW(statement, expected_exception) \
20449 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
20450 #define ASSERT_NO_THROW(statement) \
20451 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
20452 #define ASSERT_ANY_THROW(statement) \
20453 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
20458 #define EXPECT_TRUE(condition) \
20459 GTEST_TEST_BOOLEAN_((condition), #condition, false, true, \
20460 GTEST_NONFATAL_FAILURE_)
20461 #define EXPECT_FALSE(condition) \
20462 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
20463 GTEST_NONFATAL_FAILURE_)
20464 #define ASSERT_TRUE(condition) \
20465 GTEST_TEST_BOOLEAN_((condition), #condition, false, true, \
20466 GTEST_FATAL_FAILURE_)
20467 #define ASSERT_FALSE(condition) \
20468 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
20469 GTEST_FATAL_FAILURE_)
20507 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
20508 #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
20511 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_
20512 # error Do not include gtest_pred_impl.h directly. Include gtest.h instead.
20513 #endif // GTEST_INCLUDE_GTEST_GTEST_H_
20547 #define GTEST_ASSERT_(expression, on_failure) \
20548 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
20549 if (const ::testing::AssertionResult gtest_ar = (expression)) \
20552 on_failure(gtest_ar.failure_message())
20557 template <
typename Pred,
20566 << e1 <<
") evaluates to false, where"
20567 <<
"\n" << e1 <<
" evaluates to " << v1;
20572 #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
20573 GTEST_ASSERT_(pred_format(#v1, v1), \
20578 #define GTEST_PRED1_(pred, v1, on_failure)\
20579 GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
20585 #define EXPECT_PRED_FORMAT1(pred_format, v1) \
20586 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
20587 #define EXPECT_PRED1(pred, v1) \
20588 GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
20589 #define ASSERT_PRED_FORMAT1(pred_format, v1) \
20590 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
20591 #define ASSERT_PRED1(pred, v1) \
20592 GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
20598 template <
typename Pred,
20611 << e2 <<
") evaluates to false, where"
20612 <<
"\n" << e1 <<
" evaluates to " << v1
20613 <<
"\n" << e2 <<
" evaluates to " << v2;
20618 #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
20619 GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \
20624 #define GTEST_PRED2_(pred, v1, v2, on_failure)\
20625 GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
20633 #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
20634 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
20635 #define EXPECT_PRED2(pred, v1, v2) \
20636 GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
20637 #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
20638 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
20639 #define ASSERT_PRED2(pred, v1, v2) \
20640 GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
20646 template <
typename Pred,
20663 << e3 <<
") evaluates to false, where"
20664 <<
"\n" << e1 <<
" evaluates to " << v1
20665 <<
"\n" << e2 <<
" evaluates to " << v2
20666 <<
"\n" << e3 <<
" evaluates to " << v3;
20671 #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
20672 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \
20677 #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
20678 GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
20688 #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
20689 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
20690 #define EXPECT_PRED3(pred, v1, v2, v3) \
20691 GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
20692 #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
20693 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
20694 #define ASSERT_PRED3(pred, v1, v2, v3) \
20695 GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
20701 template <
typename Pred,
20722 << e4 <<
") evaluates to false, where"
20723 <<
"\n" << e1 <<
" evaluates to " << v1
20724 <<
"\n" << e2 <<
" evaluates to " << v2
20725 <<
"\n" << e3 <<
" evaluates to " << v3
20726 <<
"\n" << e4 <<
" evaluates to " << v4;
20731 #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
20732 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \
20737 #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
20738 GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
20750 #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
20751 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
20752 #define EXPECT_PRED4(pred, v1, v2, v3, v4) \
20753 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
20754 #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
20755 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
20756 #define ASSERT_PRED4(pred, v1, v2, v3, v4) \
20757 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
20763 template <
typename Pred,
20788 << e5 <<
") evaluates to false, where"
20789 <<
"\n" << e1 <<
" evaluates to " << v1
20790 <<
"\n" << e2 <<
" evaluates to " << v2
20791 <<
"\n" << e3 <<
" evaluates to " << v3
20792 <<
"\n" << e4 <<
" evaluates to " << v4
20793 <<
"\n" << e5 <<
" evaluates to " << v5;
20798 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
20799 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
20804 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
20805 GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
20819 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
20820 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
20821 #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
20822 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
20823 #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
20824 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
20825 #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
20826 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
20830 #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
20878 #define EXPECT_EQ(val1, val2) \
20879 EXPECT_PRED_FORMAT2(::testing::internal:: \
20880 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \
20882 #define EXPECT_NE(val1, val2) \
20883 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
20884 #define EXPECT_LE(val1, val2) \
20885 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
20886 #define EXPECT_LT(val1, val2) \
20887 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
20888 #define EXPECT_GE(val1, val2) \
20889 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
20890 #define EXPECT_GT(val1, val2) \
20891 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
20893 #define GTEST_ASSERT_EQ(val1, val2) \
20894 ASSERT_PRED_FORMAT2(::testing::internal:: \
20895 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \
20897 #define GTEST_ASSERT_NE(val1, val2) \
20898 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
20899 #define GTEST_ASSERT_LE(val1, val2) \
20900 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
20901 #define GTEST_ASSERT_LT(val1, val2) \
20902 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
20903 #define GTEST_ASSERT_GE(val1, val2) \
20904 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
20905 #define GTEST_ASSERT_GT(val1, val2) \
20906 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
20911 #if !GTEST_DONT_DEFINE_ASSERT_EQ
20912 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
20915 #if !GTEST_DONT_DEFINE_ASSERT_NE
20916 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)
20919 #if !GTEST_DONT_DEFINE_ASSERT_LE
20920 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)
20923 #if !GTEST_DONT_DEFINE_ASSERT_LT
20924 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)
20927 #if !GTEST_DONT_DEFINE_ASSERT_GE
20928 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)
20931 #if !GTEST_DONT_DEFINE_ASSERT_GT
20932 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
20951 #define EXPECT_STREQ(s1, s2) \
20952 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
20953 #define EXPECT_STRNE(s1, s2) \
20954 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
20955 #define EXPECT_STRCASEEQ(s1, s2) \
20956 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
20957 #define EXPECT_STRCASENE(s1, s2)\
20958 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
20960 #define ASSERT_STREQ(s1, s2) \
20961 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
20962 #define ASSERT_STRNE(s1, s2) \
20963 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
20964 #define ASSERT_STRCASEEQ(s1, s2) \
20965 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
20966 #define ASSERT_STRCASENE(s1, s2)\
20967 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
20983 #define EXPECT_FLOAT_EQ(val1, val2)\
20984 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
20987 #define EXPECT_DOUBLE_EQ(val1, val2)\
20988 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
20991 #define ASSERT_FLOAT_EQ(val1, val2)\
20992 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
20995 #define ASSERT_DOUBLE_EQ(val1, val2)\
20996 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
20999 #define EXPECT_NEAR(val1, val2, abs_error)\
21000 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
21001 val1, val2, abs_error)
21003 #define ASSERT_NEAR(val1, val2, abs_error)\
21004 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
21005 val1, val2, abs_error)
21020 #if GTEST_OS_WINDOWS
21031 # define EXPECT_HRESULT_SUCCEEDED(expr) \
21032 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
21034 # define ASSERT_HRESULT_SUCCEEDED(expr) \
21035 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
21037 # define EXPECT_HRESULT_FAILED(expr) \
21038 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
21040 # define ASSERT_HRESULT_FAILED(expr) \
21041 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
21043 #endif // GTEST_OS_WINDOWS
21055 #define ASSERT_NO_FATAL_FAILURE(statement) \
21056 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)
21057 #define EXPECT_NO_FATAL_FAILURE(statement) \
21058 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
21071 #define SCOPED_TRACE(message) \
21072 ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
21073 __FILE__, __LINE__, ::testing::Message() << (message))
21105 template <
typename T1,
typename T2>
21107 (void)internal::StaticAssertTypeEqHelper<T1, T2>();
21136 #define GTEST_TEST(test_case_name, test_name)\
21137 GTEST_TEST_(test_case_name, test_name, \
21138 ::testing::Test, ::testing::internal::GetTestTypeId())
21142 #if !GTEST_DONT_DEFINE_TEST
21143 # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)
21172 #define TEST_F(test_fixture, test_name)\
21173 GTEST_TEST_(test_fixture, test_name, test_fixture, \
21174 ::testing::internal::GetTypeId<test_fixture>())
21189 return ::testing::UnitTest::GetInstance()->Run();
21192 #endif // GTEST_INCLUDE_GTEST_GTEST_H_