52 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 53 #define GTEST_INCLUDE_GTEST_GTEST_H_ 96 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 97 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 141 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 142 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 351 #include <type_traits> 354 # include <sys/types.h> 355 # include <sys/stat.h> 356 #endif // !_WIN32_WCE 358 #if defined __APPLE__ 359 # include <AvailabilityMacros.h> 360 # include <TargetConditionals.h> 407 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ 408 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ 412 # define GTEST_OS_CYGWIN 1 413 # elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__) 414 # define GTEST_OS_WINDOWS_MINGW 1 415 # define GTEST_OS_WINDOWS 1 417 # define GTEST_OS_WINDOWS 1 419 # define GTEST_OS_WINDOWS_MOBILE 1 420 # elif defined(WINAPI_FAMILY) 421 # include <winapifamily.h> 422 # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 423 # define GTEST_OS_WINDOWS_DESKTOP 1 424 # elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) 425 # define GTEST_OS_WINDOWS_PHONE 1 426 # elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) 427 # define GTEST_OS_WINDOWS_RT 1 428 # elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE) 429 # define GTEST_OS_WINDOWS_PHONE 1 430 # define GTEST_OS_WINDOWS_TV_TITLE 1 434 # define GTEST_OS_WINDOWS_DESKTOP 1 437 # define GTEST_OS_WINDOWS_DESKTOP 1 438 # endif // _WIN32_WCE 439 #elif defined __OS2__ 440 # define GTEST_OS_OS2 1 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 __Fuchsia__ 449 # define GTEST_OS_FUCHSIA 1 450 #elif defined __linux__ 451 # define GTEST_OS_LINUX 1 452 # if defined __ANDROID__ 453 # define GTEST_OS_LINUX_ANDROID 1 455 #elif defined __MVS__ 456 # define GTEST_OS_ZOS 1 457 #elif defined(__sun) && defined(__SVR4) 458 # define GTEST_OS_SOLARIS 1 460 # define GTEST_OS_AIX 1 461 #elif defined(__hpux) 462 # define GTEST_OS_HPUX 1 463 #elif defined __native_client__ 464 # define GTEST_OS_NACL 1 465 #elif defined __NetBSD__ 466 # define GTEST_OS_NETBSD 1 467 #elif defined __OpenBSD__ 468 # define GTEST_OS_OPENBSD 1 469 #elif defined __QNX__ 470 # define GTEST_OS_QNX 1 473 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ 507 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ 508 #define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ 510 #endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ 512 #if !defined(GTEST_DEV_EMAIL_) 513 # define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" 514 # define GTEST_FLAG_PREFIX_ "gtest_" 515 # define GTEST_FLAG_PREFIX_DASH_ "gtest-" 516 # define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" 517 # define GTEST_NAME_ "Google Test" 518 # define GTEST_PROJECT_URL_ "https://github.com/google/googletest/" 519 #endif // !defined(GTEST_DEV_EMAIL_) 521 #if !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 522 # define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest" 523 #endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 528 # define GTEST_GCC_VER_ \ 529 (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) 537 #if defined(_MSC_VER) 538 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ 539 __pragma(warning(push)) \ 540 __pragma(warning(disable: warnings)) 541 # define GTEST_DISABLE_MSC_WARNINGS_POP_() \ 542 __pragma(warning(pop)) 545 # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) 546 # define GTEST_DISABLE_MSC_WARNINGS_POP_() 552 # define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 553 _Pragma("clang diagnostic push") \ 554 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ 555 _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") 556 #define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ 557 _Pragma("clang diagnostic pop") 559 # define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 560 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) 561 # define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ 562 GTEST_DISABLE_MSC_WARNINGS_POP_() 569 # if !GTEST_OS_WINDOWS_MOBILE 574 #if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR) 577 typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
582 typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
589 # include <strings.h> 590 #endif // GTEST_OS_WINDOWS 592 #if GTEST_OS_LINUX_ANDROID 594 # include <android/api-level.h> 598 #ifndef GTEST_HAS_POSIX_RE 599 # if GTEST_OS_LINUX_ANDROID 601 # define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) 603 # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) 610 #elif GTEST_HAS_POSIX_RE 618 # define GTEST_USES_POSIX_RE 1 620 #elif GTEST_OS_WINDOWS 624 # define GTEST_USES_SIMPLE_RE 1 630 # define GTEST_USES_SIMPLE_RE 1 632 #endif // GTEST_USES_PCRE 634 #ifndef GTEST_HAS_EXCEPTIONS 637 # if defined(_MSC_VER) && defined(_CPPUNWIND) 639 # define GTEST_HAS_EXCEPTIONS 1 640 # elif defined(__BORLANDC__) 644 # ifndef _HAS_EXCEPTIONS 645 # define _HAS_EXCEPTIONS 1 646 # endif // _HAS_EXCEPTIONS 647 # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS 648 # elif defined(__clang__) 656 # define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) 657 # elif defined(__GNUC__) && __EXCEPTIONS 659 # define GTEST_HAS_EXCEPTIONS 1 660 # elif defined(__SUNPRO_CC) 664 # define GTEST_HAS_EXCEPTIONS 1 665 # elif defined(__IBMCPP__) && __EXCEPTIONS 667 # define GTEST_HAS_EXCEPTIONS 1 668 # elif defined(__HP_aCC) 671 # define GTEST_HAS_EXCEPTIONS 1 675 # define GTEST_HAS_EXCEPTIONS 0 676 # endif // defined(_MSC_VER) || defined(__BORLANDC__) 677 #endif // GTEST_HAS_EXCEPTIONS 679 #if !defined(GTEST_HAS_STD_STRING) 682 # define GTEST_HAS_STD_STRING 1 683 #elif !GTEST_HAS_STD_STRING 685 # error "::std::string isn't available." 686 #endif // !defined(GTEST_HAS_STD_STRING) 688 #ifndef GTEST_HAS_GLOBAL_STRING 689 # define GTEST_HAS_GLOBAL_STRING 0 690 #endif // GTEST_HAS_GLOBAL_STRING 692 #ifndef GTEST_HAS_STD_WSTRING 698 # define GTEST_HAS_STD_WSTRING \ 699 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) 701 #endif // GTEST_HAS_STD_WSTRING 703 #ifndef GTEST_HAS_GLOBAL_WSTRING 706 # define GTEST_HAS_GLOBAL_WSTRING \ 707 (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) 708 #endif // GTEST_HAS_GLOBAL_WSTRING 711 #ifndef GTEST_HAS_RTTI 717 # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. 718 # define GTEST_HAS_RTTI 1 720 # define GTEST_HAS_RTTI 0 724 # elif defined(__GNUC__) 731 # if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ 732 !defined(__EXCEPTIONS) 733 # define GTEST_HAS_RTTI 0 735 # define GTEST_HAS_RTTI 1 736 # endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS 738 # define GTEST_HAS_RTTI 0 739 # endif // __GXX_RTTI 744 # elif defined(__clang__) 746 # define GTEST_HAS_RTTI __has_feature(cxx_rtti) 750 # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) 753 # define GTEST_HAS_RTTI 1 755 # define GTEST_HAS_RTTI 0 761 # define GTEST_HAS_RTTI 1 765 #endif // GTEST_HAS_RTTI 774 #ifndef GTEST_HAS_PTHREAD 780 #define GTEST_HAS_PTHREAD \ 781 (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ 782 GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) 783 #endif // GTEST_HAS_PTHREAD 785 #if GTEST_HAS_PTHREAD 788 # include <pthread.h> 798 #ifndef GTEST_HAS_CLONE 801 # if GTEST_OS_LINUX && !defined(__ia64__) 802 # if GTEST_OS_LINUX_ANDROID 805 # if defined(__LP64__) || \ 806 (defined(__arm__) && __ANDROID_API__ >= 9) || \ 807 (defined(__mips__) && __ANDROID_API__ >= 12) || \ 808 (defined(__i386__) && __ANDROID_API__ >= 17) 809 # define GTEST_HAS_CLONE 1 811 # define GTEST_HAS_CLONE 0 814 # define GTEST_HAS_CLONE 1 817 # define GTEST_HAS_CLONE 0 818 # endif // GTEST_OS_LINUX && !defined(__ia64__) 820 #endif // GTEST_HAS_CLONE 824 #ifndef GTEST_HAS_STREAM_REDIRECTION 827 # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT 828 # define GTEST_HAS_STREAM_REDIRECTION 0 830 # define GTEST_HAS_STREAM_REDIRECTION 1 831 # endif // !GTEST_OS_WINDOWS_MOBILE 832 #endif // GTEST_HAS_STREAM_REDIRECTION 836 #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ 837 (GTEST_OS_MAC && !GTEST_OS_IOS) || \ 838 (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) || \ 839 GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ 840 GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || \ 841 GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) 842 # define GTEST_HAS_DEATH_TEST 1 849 #if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \ 850 defined(__IBMCPP__) || defined(__HP_aCC) 851 # define GTEST_HAS_TYPED_TEST 1 852 # define GTEST_HAS_TYPED_TEST_P 1 856 #define GTEST_WIDE_STRING_USES_UTF16_ \ 857 (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2) 861 # define GTEST_CAN_STREAM_RESULTS_ 1 874 #ifdef __INTEL_COMPILER 875 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ 877 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT 891 #if defined(__GNUC__) && !defined(COMPILER_ICC) 892 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 893 #elif defined(__clang__) 894 # if __has_attribute(unused) 895 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 898 #ifndef GTEST_ATTRIBUTE_UNUSED_ 899 # define GTEST_ATTRIBUTE_UNUSED_ 903 #if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC) 904 # if defined(__MINGW_PRINTF_FORMAT) 908 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 909 __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \ 912 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 913 __attribute__((__format__(__printf__, string_index, first_to_check))) 916 # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) 922 #define GTEST_DISALLOW_ASSIGN_(type) \ 923 void operator=(type const &) = delete 927 #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \ 928 type(type const &) = delete; \ 929 GTEST_DISALLOW_ASSIGN_(type) 936 #if defined(__GNUC__) && !defined(COMPILER_ICC) 937 # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) 939 # define GTEST_MUST_USE_RESULT_ 940 #endif // __GNUC__ && !COMPILER_ICC 950 # define GTEST_INTENTIONAL_CONST_COND_PUSH_() \ 951 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127) 952 # define GTEST_INTENTIONAL_CONST_COND_POP_() \ 953 GTEST_DISABLE_MSC_WARNINGS_POP_() 958 #ifndef GTEST_HAS_SEH 961 # if defined(_MSC_VER) || defined(__BORLANDC__) 963 # define GTEST_HAS_SEH 1 966 # define GTEST_HAS_SEH 0 969 #endif // GTEST_HAS_SEH 971 #ifndef GTEST_IS_THREADSAFE 973 #define GTEST_IS_THREADSAFE \ 974 (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \ 975 (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \ 978 #endif // GTEST_IS_THREADSAFE 986 # if GTEST_LINKED_AS_SHARED_LIBRARY 987 # define GTEST_API_ __declspec(dllimport) 988 # elif GTEST_CREATE_SHARED_LIBRARY 989 # define GTEST_API_ __declspec(dllexport) 991 #elif __GNUC__ >= 4 || defined(__clang__) 992 # define GTEST_API_ __attribute__((visibility ("default"))) 1001 #ifndef GTEST_DEFAULT_DEATH_TEST_STYLE 1002 # define GTEST_DEFAULT_DEATH_TEST_STYLE "fast" 1003 #endif // GTEST_DEFAULT_DEATH_TEST_STYLE 1007 # define GTEST_NO_INLINE_ __attribute__((noinline)) 1009 # define GTEST_NO_INLINE_ 1013 #if !defined(GTEST_HAS_CXXABI_H_) 1014 # if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) 1015 # define GTEST_HAS_CXXABI_H_ 1 1017 # define GTEST_HAS_CXXABI_H_ 0 1023 #if defined(__clang__) 1024 # if __has_feature(memory_sanitizer) 1025 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \ 1026 __attribute__((no_sanitize_memory)) 1028 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ 1029 # endif // __has_feature(memory_sanitizer) 1031 # define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ 1035 #if defined(__clang__) 1036 # if __has_feature(address_sanitizer) 1037 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \ 1038 __attribute__((no_sanitize_address)) 1040 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ 1041 # endif // __has_feature(address_sanitizer) 1043 # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ 1047 #if defined(__clang__) 1048 # if __has_feature(thread_sanitizer) 1049 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \ 1050 __attribute__((no_sanitize_thread)) 1052 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ 1053 # endif // __has_feature(thread_sanitizer) 1055 # define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ 1065 using std::make_tuple;
1067 using std::tuple_element;
1068 using std::tuple_size;
1070 namespace internal {
1086 #define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) 1091 template <
typename T1,
typename T2>
1094 template <
typename T>
1096 enum { value =
true };
1100 template <
typename T,
typename U>
1104 template <
typename T>
1110 #define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0])) 1112 #if GTEST_HAS_GLOBAL_STRING 1116 #endif // GTEST_HAS_GLOBAL_STRING 1118 #if GTEST_HAS_GLOBAL_WSTRING 1120 #elif GTEST_HAS_STD_WSTRING 1122 #endif // GTEST_HAS_GLOBAL_WSTRING 1132 #elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE 1145 # if GTEST_HAS_GLOBAL_STRING 1149 # endif // GTEST_HAS_GLOBAL_STRING 1151 RE(
const char* regex) { Init(regex); }
1162 return FullMatch(str.c_str(), re);
1165 return PartialMatch(str.c_str(), re);
1168 # if GTEST_HAS_GLOBAL_STRING 1171 return FullMatch(str.c_str(), re);
1174 return PartialMatch(str.c_str(), re);
1177 # endif // GTEST_HAS_GLOBAL_STRING 1179 static bool FullMatch(
const char* str,
const RE& re);
1180 static bool PartialMatch(
const char* str,
const RE& re);
1183 void Init(
const char* regex);
1184 const char* pattern_;
1187 # if GTEST_USES_POSIX_RE 1189 regex_t full_regex_;
1190 regex_t partial_regex_;
1192 # else // GTEST_USES_SIMPLE_RE 1194 const char* full_pattern_;
1201 #endif // GTEST_USES_PCRE 1244 #if !defined(GTEST_LOG_) 1246 # define GTEST_LOG_(severity) \ 1247 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ 1248 __FILE__, __LINE__).GetStream() 1253 #endif // !defined(GTEST_LOG_) 1255 #if !defined(GTEST_CHECK_) 1270 # define GTEST_CHECK_(condition) \ 1271 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1272 if (::testing::internal::IsTrue(condition)) \ 1275 GTEST_LOG_(FATAL) << "Condition " #condition " failed. " 1276 #endif // !defined(GTEST_CHECK_) 1283 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ 1284 if (const int gtest_error = (posix_call)) \ 1285 GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ 1291 template <
typename T>
1293 template <
typename T>
1298 #define GTEST_ADD_REFERENCE_(T) \ 1299 typename ::testing::internal::AddReference<T>::type 1312 template <
typename T>
1314 template <
typename T>
1318 #define GTEST_REFERENCE_TO_CONST_(T) \ 1319 typename ::testing::internal::ConstRef<T>::type 1341 template<
typename To>
1365 template<
typename To,
typename From>
1374 const To to =
nullptr;
1375 ::testing::internal::ImplicitCast_<From*>(to);
1380 GTEST_CHECK_(f ==
nullptr || dynamic_cast<To>(f) !=
nullptr);
1382 return static_cast<To
>(f);
1390 template <
class Derived,
class Base>
1396 #if GTEST_HAS_DOWNCAST_ 1397 return ::down_cast<Derived*>(base);
1398 #elif GTEST_HAS_RTTI 1399 return dynamic_cast<Derived*
>(base);
1401 return static_cast<Derived*
>(base);
1405 #if GTEST_HAS_STREAM_REDIRECTION 1418 #endif // GTEST_HAS_STREAM_REDIRECTION 1428 #if GTEST_HAS_DEATH_TEST 1430 std::vector<std::string> GetInjectableArgvs();
1432 void SetInjectableArgvs(
const std::vector<std::string>* new_argvs);
1433 void SetInjectableArgvs(
const std::vector<std::string>& new_argvs);
1434 #if GTEST_HAS_GLOBAL_STRING 1435 void SetInjectableArgvs(
const std::vector< ::string>& new_argvs);
1436 #endif // GTEST_HAS_GLOBAL_STRING 1437 void ClearInjectableArgvs();
1439 #endif // GTEST_HAS_DEATH_TEST 1442 #if GTEST_IS_THREADSAFE 1443 # if GTEST_HAS_PTHREAD 1447 inline void SleepMilliseconds(
int n) {
1448 const timespec time = {
1452 nanosleep(&time,
nullptr);
1454 # endif // GTEST_HAS_PTHREAD 1456 # if GTEST_HAS_NOTIFICATION_ 1460 # elif GTEST_HAS_PTHREAD 1467 class Notification {
1469 Notification() : notified_(false) {
1473 pthread_mutex_destroy(&mutex_);
1479 pthread_mutex_lock(&mutex_);
1481 pthread_mutex_unlock(&mutex_);
1486 void WaitForNotification() {
1488 pthread_mutex_lock(&mutex_);
1489 const bool notified = notified_;
1490 pthread_mutex_unlock(&mutex_);
1493 SleepMilliseconds(10);
1498 pthread_mutex_t mutex_;
1504 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 1517 typedef void* Handle;
1519 explicit AutoHandle(Handle handle);
1525 void Reset(Handle handle);
1529 bool IsCloseable()
const;
1546 void WaitForNotification();
1553 # endif // GTEST_HAS_NOTIFICATION_ 1558 # if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW 1565 class ThreadWithParamBase {
1567 virtual ~ThreadWithParamBase() {}
1568 virtual void Run() = 0;
1577 extern "C" inline void* ThreadFuncWithCLinkage(
void* thread) {
1578 static_cast<ThreadWithParamBase*
>(thread)->Run();
1594 template <
typename T>
1595 class ThreadWithParam :
public ThreadWithParamBase {
1597 typedef void UserThreadFunc(T);
1599 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1602 thread_can_start_(thread_can_start),
1604 ThreadWithParamBase*
const base =
this;
1608 pthread_create(&thread_,
nullptr, &ThreadFuncWithCLinkage, base));
1610 ~ThreadWithParam()
override { Join(); }
1619 void Run()
override {
1620 if (thread_can_start_ !=
nullptr) thread_can_start_->WaitForNotification();
1625 UserThreadFunc*
const func_;
1629 Notification*
const thread_can_start_;
1635 # endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD || 1638 # if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 1642 # elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 1660 enum MutexType { kStatic = 0, kDynamic = 1 };
1664 enum StaticConstructorSelector { kStaticMutex = 0 };
1669 explicit Mutex(StaticConstructorSelector ) {}
1684 void ThreadSafeLazyInit();
1688 unsigned int owner_thread_id_;
1693 long critical_section_init_phase_;
1694 GTEST_CRITICAL_SECTION* critical_section_;
1699 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1700 extern ::testing::internal::Mutex mutex 1702 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 1703 ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex) 1710 class GTestMutexLock {
1713 : mutex_(mutex) { mutex_->Lock(); }
1718 Mutex*
const mutex_;
1727 class ThreadLocalValueHolderBase {
1729 virtual ~ThreadLocalValueHolderBase() {}
1734 class ThreadLocalBase {
1740 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const = 0;
1743 ThreadLocalBase() {}
1744 virtual ~ThreadLocalBase() {}
1757 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
1758 const ThreadLocalBase* thread_local_instance);
1761 static void OnThreadLocalDestroyed(
1762 const ThreadLocalBase* thread_local_instance);
1772 virtual ~Runnable() {}
1773 virtual void Run() = 0;
1776 ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start);
1777 virtual ~ThreadWithParamBase();
1784 template <
typename T>
1785 class ThreadWithParam :
public ThreadWithParamBase {
1787 typedef void UserThreadFunc(T);
1789 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1790 : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) {
1792 virtual ~ThreadWithParam() {}
1795 class RunnableImpl :
public Runnable {
1797 RunnableImpl(UserThreadFunc* func, T param)
1801 virtual ~RunnableImpl() {}
1802 virtual void Run() {
1807 UserThreadFunc*
const func_;
1843 template <
typename T>
1844 class ThreadLocal :
public ThreadLocalBase {
1846 ThreadLocal() : default_factory_(new DefaultValueHolderFactory()) {}
1848 : default_factory_(new InstanceValueHolderFactory(value)) {}
1850 ~
ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed(
this); }
1852 T*
pointer() {
return GetOrCreateValue(); }
1853 const T*
pointer()
const {
return GetOrCreateValue(); }
1854 const T&
get()
const {
return *
pointer(); }
1855 void set(
const T& value) { *
pointer() = value; }
1860 class ValueHolder :
public ThreadLocalValueHolderBase {
1862 ValueHolder() : value_() {}
1863 explicit ValueHolder(
const T& value) : value_(value) {}
1865 T*
pointer() {
return &value_; }
1873 T* GetOrCreateValue()
const {
1874 return static_cast<ValueHolder*
>(
1875 ThreadLocalRegistry::GetValueOnCurrentThread(
this))->
pointer();
1878 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const {
1879 return default_factory_->MakeNewHolder();
1882 class ValueHolderFactory {
1884 ValueHolderFactory() {}
1885 virtual ~ValueHolderFactory() {}
1886 virtual ValueHolder* MakeNewHolder()
const = 0;
1892 class DefaultValueHolderFactory :
public ValueHolderFactory {
1894 DefaultValueHolderFactory() {}
1895 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
1901 class InstanceValueHolderFactory :
public ValueHolderFactory {
1903 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
1904 virtual ValueHolder* MakeNewHolder()
const {
1905 return new ValueHolder(value_);
1914 std::unique_ptr<ValueHolderFactory> default_factory_;
1919 # elif GTEST_HAS_PTHREAD 1927 owner_ = pthread_self();
1943 void AssertHeld()
const {
1944 GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
1945 <<
"The current thread is not holding the mutex @" <<
this;
1954 pthread_mutex_t mutex_;
1966 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1967 extern ::testing::internal::MutexBase mutex 1975 #define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 1976 ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0} 1980 class Mutex :
public MutexBase {
1999 class GTestMutexLock {
2002 : mutex_(mutex) { mutex_->Lock(); }
2007 MutexBase*
const mutex_;
2020 class ThreadLocalValueHolderBase {
2022 virtual ~ThreadLocalValueHolderBase() {}
2027 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
2028 delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
2032 template <
typename T>
2036 : key_(CreateKey()), default_factory_(new DefaultValueHolderFactory()) {}
2037 explicit ThreadLocal(
const T& value)
2038 : key_(CreateKey()),
2039 default_factory_(new InstanceValueHolderFactory(value)) {}
2043 DeleteThreadLocalValue(pthread_getspecific(key_));
2050 T* pointer() {
return GetOrCreateValue(); }
2051 const T* pointer()
const {
return GetOrCreateValue(); }
2052 const T&
get()
const {
return *pointer(); }
2053 void set(
const T& value) { *pointer() = value; }
2057 class ValueHolder :
public ThreadLocalValueHolderBase {
2059 ValueHolder() : value_() {}
2060 explicit ValueHolder(
const T& value) : value_(value) {}
2062 T* pointer() {
return &value_; }
2069 static pthread_key_t CreateKey() {
2074 pthread_key_create(&key, &DeleteThreadLocalValue));
2078 T* GetOrCreateValue()
const {
2079 ThreadLocalValueHolderBase*
const holder =
2080 static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(key_));
2081 if (holder !=
nullptr) {
2082 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
2085 ValueHolder*
const new_holder = default_factory_->MakeNewHolder();
2086 ThreadLocalValueHolderBase*
const holder_base = new_holder;
2088 return new_holder->pointer();
2091 class ValueHolderFactory {
2093 ValueHolderFactory() {}
2094 virtual ~ValueHolderFactory() {}
2095 virtual ValueHolder* MakeNewHolder()
const = 0;
2101 class DefaultValueHolderFactory :
public ValueHolderFactory {
2103 DefaultValueHolderFactory() {}
2104 virtual ValueHolder* MakeNewHolder()
const {
return new ValueHolder(); }
2110 class InstanceValueHolderFactory :
public ValueHolderFactory {
2112 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
2113 virtual ValueHolder* MakeNewHolder()
const {
2114 return new ValueHolder(value_);
2124 const pthread_key_t key_;
2125 std::unique_ptr<ValueHolderFactory> default_factory_;
2130 # endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 2132 #else // GTEST_IS_THREADSAFE 2147 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 2148 extern ::testing::internal::Mutex mutex 2150 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex 2164 template <
typename T>
2171 const T&
get()
const {
return value_; }
2172 void set(
const T& value) { value_ = value; }
2177 #endif // GTEST_IS_THREADSAFE 2183 template <
bool bool_value>
2193 template <
typename T,
typename U>
2196 template <
typename T>
2199 template <
typename Iterator>
2205 template <
typename T>
2210 template <
typename T>
2215 #if GTEST_OS_WINDOWS 2216 # define GTEST_PATH_SEP_ "\\" 2217 # define GTEST_HAS_ALT_PATH_SEP_ 1 2221 # define GTEST_PATH_SEP_ "/" 2222 # define GTEST_HAS_ALT_PATH_SEP_ 0 2224 #endif // GTEST_OS_WINDOWS 2234 return isalpha(static_cast<unsigned char>(ch)) != 0;
2237 return isalnum(static_cast<unsigned char>(ch)) != 0;
2240 return isdigit(static_cast<unsigned char>(ch)) != 0;
2243 return islower(static_cast<unsigned char>(ch)) != 0;
2246 return isspace(static_cast<unsigned char>(ch)) != 0;
2249 return isupper(static_cast<unsigned char>(ch)) != 0;
2252 return isxdigit(static_cast<unsigned char>(ch)) != 0;
2255 const unsigned char low_byte =
static_cast<unsigned char>(ch);
2256 return ch == low_byte && isxdigit(low_byte) != 0;
2260 return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
2263 return static_cast<char>(toupper(static_cast<unsigned char>(ch)));
2267 std::string::iterator it = str.end();
2268 while (it != str.begin() &&
IsSpace(*--it))
2283 #if GTEST_OS_WINDOWS 2287 # ifdef __BORLANDC__ 2288 inline int IsATTY(
int fd) {
return isatty(fd); }
2289 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2290 return stricmp(s1, s2);
2292 inline char*
StrDup(
const char* src) {
return strdup(src); }
2293 # else // !__BORLANDC__ 2294 # if GTEST_OS_WINDOWS_MOBILE 2295 inline int IsATTY(
int ) {
return 0; }
2297 inline int IsATTY(
int fd) {
return _isatty(fd); }
2298 # endif // GTEST_OS_WINDOWS_MOBILE 2299 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2300 return _stricmp(s1, s2);
2302 inline char*
StrDup(
const char* src) {
return _strdup(src); }
2303 # endif // __BORLANDC__ 2305 # if GTEST_OS_WINDOWS_MOBILE 2306 inline int FileNo(FILE* file) {
return reinterpret_cast<int>(_fileno(file)); }
2310 inline int FileNo(FILE* file) {
return _fileno(file); }
2311 inline int Stat(
const char* path,
StatStruct* buf) {
return _stat(path, buf); }
2312 inline int RmDir(
const char* dir) {
return _rmdir(dir); }
2314 return (_S_IFDIR & st.st_mode) != 0;
2316 # endif // GTEST_OS_WINDOWS_MOBILE 2322 inline int FileNo(FILE* file) {
return fileno(file); }
2323 inline int IsATTY(
int fd) {
return isatty(fd); }
2326 return strcasecmp(s1, s2);
2328 inline char*
StrDup(
const char* src) {
return strdup(src); }
2329 inline int RmDir(
const char* dir) {
return rmdir(dir); }
2332 #endif // GTEST_OS_WINDOWS 2338 inline const
char*
StrNCpy(
char* dest, const
char* src,
size_t n) {
2339 return strncpy(dest, src, n);
2346 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 2347 inline int ChDir(
const char* dir) {
return chdir(dir); }
2349 inline FILE*
FOpen(
const char* path,
const char* mode) {
2350 return fopen(path, mode);
2352 #if !GTEST_OS_WINDOWS_MOBILE 2353 inline FILE *
FReopen(
const char* path,
const char* mode, FILE* stream) {
2354 return freopen(path, mode, stream);
2356 inline FILE*
FDOpen(
int fd,
const char* mode) {
return fdopen(fd, mode); }
2358 inline int FClose(FILE* fp) {
return fclose(fp); }
2359 #if !GTEST_OS_WINDOWS_MOBILE 2361 return static_cast<int>(read(fd, buf,
count));
2364 return static_cast<int>(write(fd, buf,
count));
2366 inline int Close(
int fd) {
return close(fd); }
2367 inline const char*
StrError(
int errnum) {
return strerror(errnum); }
2369 inline const char*
GetEnv(
const char* name) {
2370 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT 2372 static_cast<void>(name);
2374 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 2377 const char*
const env = getenv(name);
2378 return (env !=
nullptr && env[0] !=
'\0') ? env :
nullptr;
2380 return getenv(name);
2386 #if GTEST_OS_WINDOWS_MOBILE 2390 [[noreturn]]
void Abort();
2392 [[noreturn]]
inline void Abort() { abort(); }
2393 #endif // GTEST_OS_WINDOWS_MOBILE 2402 #if _MSC_VER && !GTEST_OS_WINDOWS_MOBILE 2404 # define GTEST_SNPRINTF_(buffer, size, format, ...) \ 2405 _snprintf_s(buffer, size, size, format, __VA_ARGS__) 2406 #elif defined(_MSC_VER) 2408 # define GTEST_SNPRINTF_ _snprintf 2410 # define GTEST_SNPRINTF_ snprintf 2441 template <
size_t size>
2465 #if GTEST_OS_WINDOWS 2466 typedef __int64
Int;
2467 typedef unsigned __int64
UInt;
2471 #endif // GTEST_OS_WINDOWS 2484 #if !defined(GTEST_FLAG) 2485 # define GTEST_FLAG(name) FLAGS_gtest_##name 2486 #endif // !defined(GTEST_FLAG) 2488 #if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) 2489 # define GTEST_USE_OWN_FLAGFILE_FLAG_ 1 2490 #endif // !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) 2492 #if !defined(GTEST_DECLARE_bool_) 2493 # define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver 2496 # define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) 2497 # define GTEST_DECLARE_int32_(name) \ 2498 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) 2499 # define GTEST_DECLARE_string_(name) \ 2500 GTEST_API_ extern ::std::string GTEST_FLAG(name) 2503 # define GTEST_DEFINE_bool_(name, default_val, doc) \ 2504 GTEST_API_ bool GTEST_FLAG(name) = (default_val) 2505 # define GTEST_DEFINE_int32_(name, default_val, doc) \ 2506 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) 2507 # define GTEST_DEFINE_string_(name, default_val, doc) \ 2508 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) 2510 #endif // !defined(GTEST_DECLARE_bool_) 2513 #if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2514 # define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) 2515 # define GTEST_LOCK_EXCLUDED_(locks) 2516 #endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2521 bool ParseInt32(
const Message& src_text,
const char* str,
Int32* value);
2533 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 2536 # include <stdlib.h> 2537 # include <sys/types.h> 2538 # include <sys/wait.h> 2539 # include <unistd.h> 2540 #endif // GTEST_OS_LINUX 2542 #if GTEST_HAS_EXCEPTIONS 2543 # include <stdexcept> 2602 #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 2603 #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 2614 void operator<<(const
testing::internal::Secret&,
int);
2648 typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
2660 explicit Message(
const char* str) : ss_(new ::std::stringstream) {
2665 template <
typename T>
2681 using ::operator <<;
2699 template <
typename T>
2701 if (pointer ==
nullptr) {
2722 return *
this << (b ?
"true" :
"false");
2730 #if GTEST_HAS_STD_WSTRING 2734 #endif // GTEST_HAS_STD_WSTRING 2736 #if GTEST_HAS_GLOBAL_WSTRING 2740 #endif // GTEST_HAS_GLOBAL_WSTRING 2750 const std::unique_ptr< ::std::stringstream> ss_;
2754 void operator=(
const Message&);
2762 namespace internal {
2768 template <
typename T>
2770 return (
Message() << streamable).GetString();
2778 #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ 2818 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 2819 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 2861 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 2862 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 2874 namespace internal {
2888 static const char* CloneCString(
const char* c_str);
2890 #if GTEST_OS_WINDOWS_MOBILE 2903 static LPCWSTR AnsiToUtf16(
const char* c_str);
2913 static const char* Utf16ToAnsi(LPCWSTR utf16_str);
2921 static bool CStringEquals(
const char* lhs,
const char* rhs);
2927 static std::string ShowWideCString(
const wchar_t* wide_c_str);
2935 static bool WideCStringEquals(
const wchar_t* lhs,
const wchar_t* rhs);
2943 static bool CaseInsensitiveCStringEquals(
const char* lhs,
2958 static bool CaseInsensitiveWideCStringEquals(
const wchar_t* lhs,
2959 const wchar_t* rhs);
2963 static bool EndsWithCaseInsensitive(
2973 static std::string FormatByte(
unsigned char value);
2986 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ 2992 namespace internal {
3007 FilePath() : pathname_(
"") { }
3008 FilePath(
const FilePath& rhs) : pathname_(rhs.pathname_) { }
3010 explicit FilePath(
const std::string& pathname) : pathname_(pathname) {
3014 FilePath& operator=(
const FilePath& rhs) {
3019 void Set(
const FilePath& rhs) {
3020 pathname_ = rhs.pathname_;
3024 const char* c_str()
const {
return pathname_.c_str(); }
3027 static FilePath GetCurrentDir();
3033 static FilePath MakeFileName(
const FilePath& directory,
3034 const FilePath& base_name,
3036 const char* extension);
3041 static FilePath ConcatPaths(
const FilePath& directory,
3042 const FilePath& relative_path);
3052 static FilePath GenerateUniqueFileName(
const FilePath& directory,
3053 const FilePath& base_name,
3054 const char* extension);
3057 bool IsEmpty()
const {
return pathname_.empty(); }
3062 FilePath RemoveTrailingPathSeparator()
const;
3070 FilePath RemoveDirectoryName()
const;
3078 FilePath RemoveFileName()
const;
3084 FilePath RemoveExtension(
const char* extension)
const;
3090 bool CreateDirectoriesRecursively()
const;
3096 bool CreateFolder()
const;
3100 bool FileOrDirectoryExists()
const;
3104 bool DirectoryExists()
const;
3109 bool IsDirectory()
const;
3113 bool IsRootDirectory()
const;
3116 bool IsAbsolutePath()
const;
3144 const char* FindLastPathSeparator()
const;
3154 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ 3198 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 3199 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 3204 # if GTEST_HAS_CXXABI_H_ 3205 # include <cxxabi.h> 3206 # elif defined(__HP_aCC) 3207 # include <acxx_demangle.h> 3208 # endif // GTEST_HASH_CXXABI_H_ 3211 namespace internal {
3218 static const char prefix[] =
"std::__";
3219 if (s.compare(0, strlen(prefix), prefix) == 0) {
3220 std::string::size_type end = s.find(
"::", strlen(prefix));
3221 if (end != s.npos) {
3223 s.erase(strlen(
"std"), end - strlen(
"std"));
3232 template <
typename T>
3236 const char*
const name =
typeid(T).name();
3237 # if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) 3241 # if GTEST_HAS_CXXABI_H_ 3242 using abi::__cxa_demangle;
3243 # endif // GTEST_HAS_CXXABI_H_ 3244 char*
const readable_name = __cxa_demangle(name,
nullptr,
nullptr, &status);
3245 const std::string name_str(status == 0 ? readable_name : name);
3246 free(readable_name);
3247 return CanonicalizeForStdLibVersioning(name_str);
3250 # endif // GTEST_HAS_CXXABI_H_ || __HP_aCC 3256 # endif // GTEST_HAS_RTTI 3259 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 3265 template <
typename T1,
typename T2>
3266 struct AssertTypeEq;
3268 template <
typename T>
3269 struct AssertTypeEq<T, T> {
3291 template <
typename T1>
3294 typedef Types0 Tail;
3296 template <
typename T1,
typename T2>
3299 typedef Types1<T2> Tail;
3302 template <
typename T1,
typename T2,
typename T3>
3305 typedef Types2<T2, T3> Tail;
3308 template <
typename T1,
typename T2,
typename T3,
typename T4>
3311 typedef Types3<T2, T3, T4> Tail;
3314 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
3317 typedef Types4<T2, T3, T4, T5> Tail;
3320 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3324 typedef Types5<T2, T3, T4, T5, T6> Tail;
3327 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3328 typename T6,
typename T7>
3331 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
3334 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3335 typename T6,
typename T7,
typename T8>
3338 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
3341 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3342 typename T6,
typename T7,
typename T8,
typename T9>
3345 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
3348 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3349 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
3352 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
3355 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3356 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3360 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
3363 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3364 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3365 typename T11,
typename T12>
3368 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
3371 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3372 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3373 typename T11,
typename T12,
typename T13>
3376 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
3379 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3380 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3381 typename T11,
typename T12,
typename T13,
typename T14>
3384 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
3387 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3388 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3389 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
3392 typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3396 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3397 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3398 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3402 typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3406 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3407 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3408 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3409 typename T16,
typename T17>
3412 typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3416 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3417 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3418 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3419 typename T16,
typename T17,
typename T18>
3422 typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3423 T16, T17, T18> Tail;
3426 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3427 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3428 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3429 typename T16,
typename T17,
typename T18,
typename T19>
3432 typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3433 T16, T17, T18, T19> Tail;
3436 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3437 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3438 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3439 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
3442 typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3443 T16, T17, T18, T19, T20> Tail;
3446 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3447 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3448 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3449 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3453 typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3454 T16, T17, T18, T19, T20, T21> Tail;
3457 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3458 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3459 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3460 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3461 typename T21,
typename T22>
3464 typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3465 T16, T17, T18, T19, T20, T21, T22> Tail;
3468 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3469 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3470 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3471 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3472 typename T21,
typename T22,
typename T23>
3475 typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3476 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
3479 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3480 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3481 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3482 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3483 typename T21,
typename T22,
typename T23,
typename T24>
3486 typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3487 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
3490 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3491 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3492 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3493 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3494 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
3497 typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3498 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
3501 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3502 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3503 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3504 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3505 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3509 typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3510 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
3513 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3514 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3515 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3516 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3517 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3518 typename T26,
typename T27>
3521 typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3522 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
3525 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3526 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3527 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3528 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3529 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3530 typename T26,
typename T27,
typename T28>
3533 typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3534 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
3537 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3538 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3539 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3540 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3541 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3542 typename T26,
typename T27,
typename T28,
typename T29>
3545 typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3546 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3550 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3551 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3552 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3553 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3554 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3555 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
3558 typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3559 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3563 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3564 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3565 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3566 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3567 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3568 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3572 typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3573 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3577 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3578 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3579 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3580 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3581 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3582 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3583 typename T31,
typename T32>
3586 typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3587 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3588 T30, T31, T32> Tail;
3591 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3592 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3593 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3594 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3595 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3596 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3597 typename T31,
typename T32,
typename T33>
3600 typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3601 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3602 T30, T31, T32, T33> Tail;
3605 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3606 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3607 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3608 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3609 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3610 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3611 typename T31,
typename T32,
typename T33,
typename T34>
3614 typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3615 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3616 T30, T31, T32, T33, T34> Tail;
3619 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3620 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3621 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3622 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3623 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3624 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3625 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
3628 typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3629 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3630 T30, T31, T32, T33, T34, T35> Tail;
3633 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3634 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3635 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3636 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3637 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3638 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3639 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3643 typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3644 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3645 T30, T31, T32, T33, T34, T35, T36> Tail;
3648 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3649 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3650 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3651 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3652 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3653 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3654 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3655 typename T36,
typename T37>
3658 typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3659 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3660 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
3663 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3664 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3665 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3666 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3667 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3668 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3669 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3670 typename T36,
typename T37,
typename T38>
3673 typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3674 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3675 T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
3678 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3679 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3680 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3681 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3682 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3683 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3684 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3685 typename T36,
typename T37,
typename T38,
typename T39>
3688 typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3689 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3690 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
3693 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3694 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3695 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3696 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3697 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3698 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3699 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3700 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
3703 typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3704 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3705 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
3708 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3709 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3710 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3711 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3712 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3713 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3714 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3715 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3719 typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3720 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3721 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
3724 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3725 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3726 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3727 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3728 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3729 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3730 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3731 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3732 typename T41,
typename T42>
3735 typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3736 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3737 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
3740 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3741 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3742 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3743 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3744 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3745 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3746 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3747 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3748 typename T41,
typename T42,
typename T43>
3751 typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3752 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3753 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
3757 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3758 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3759 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3760 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3761 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3762 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3763 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3764 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3765 typename T41,
typename T42,
typename T43,
typename T44>
3768 typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3769 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3770 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3774 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3775 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3776 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3777 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3778 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3779 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3780 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3781 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3782 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
3785 typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3786 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3787 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3791 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3792 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3793 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3794 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3795 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3796 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3797 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3798 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3799 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3803 typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3804 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3805 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3806 T44, T45, T46> Tail;
3809 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3810 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3811 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3812 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3813 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3814 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3815 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3816 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3817 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3818 typename T46,
typename T47>
3821 typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3822 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3823 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3824 T44, T45, T46, T47> Tail;
3827 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3828 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3829 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3830 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3831 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3832 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3833 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3834 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3835 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3836 typename T46,
typename T47,
typename T48>
3839 typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3840 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3841 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3842 T44, T45, T46, T47, T48> Tail;
3845 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3846 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3847 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3848 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3849 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3850 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3851 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3852 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3853 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3854 typename T46,
typename T47,
typename T48,
typename T49>
3857 typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3858 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3859 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3860 T44, T45, T46, T47, T48, T49> Tail;
3863 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3864 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3865 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3866 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3867 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3868 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3869 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3870 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3871 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
3872 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
3875 typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3876 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3877 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3878 T44, T45, T46, T47, T48, T49, T50> Tail;
3897 template <
typename T1 = internal::None,
typename T2 = internal::None,
3898 typename T3 = internal::None,
typename T4 = internal::None,
3899 typename T5 = internal::None,
typename T6 = internal::None,
3900 typename T7 = internal::None,
typename T8 = internal::None,
3901 typename T9 = internal::None,
typename T10 = internal::None,
3902 typename T11 = internal::None,
typename T12 = internal::None,
3903 typename T13 = internal::None,
typename T14 = internal::None,
3904 typename T15 = internal::None,
typename T16 = internal::None,
3905 typename T17 = internal::None,
typename T18 = internal::None,
3906 typename T19 = internal::None,
typename T20 = internal::None,
3907 typename T21 = internal::None,
typename T22 = internal::None,
3908 typename T23 = internal::None,
typename T24 = internal::None,
3909 typename T25 = internal::None,
typename T26 = internal::None,
3910 typename T27 = internal::None,
typename T28 = internal::None,
3911 typename T29 = internal::None,
typename T30 = internal::None,
3912 typename T31 = internal::None,
typename T32 = internal::None,
3913 typename T33 = internal::None,
typename T34 = internal::None,
3914 typename T35 = internal::None,
typename T36 = internal::None,
3915 typename T37 = internal::None,
typename T38 = internal::None,
3916 typename T39 = internal::None,
typename T40 = internal::None,
3917 typename T41 = internal::None,
typename T42 = internal::None,
3918 typename T43 = internal::None,
typename T44 = internal::None,
3919 typename T45 = internal::None,
typename T46 = internal::None,
3920 typename T47 = internal::None,
typename T48 = internal::None,
3921 typename T49 = internal::None,
typename T50 = internal::None>
3923 typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
3924 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
3925 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3926 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
3930 struct Types<internal::None, internal::None, internal::None, internal::None,
3931 internal::None, internal::None, internal::None, internal::None,
3932 internal::None, internal::None, internal::None, internal::None,
3933 internal::None, internal::None, internal::None, internal::None,
3934 internal::None, internal::None, internal::None, internal::None,
3935 internal::None, internal::None, internal::None, internal::None,
3936 internal::None, internal::None, internal::None, internal::None,
3937 internal::None, internal::None, internal::None, internal::None,
3938 internal::None, internal::None, internal::None, internal::None,
3939 internal::None, internal::None, internal::None, internal::None,
3940 internal::None, internal::None, internal::None, internal::None,
3941 internal::None, internal::None, internal::None, internal::None,
3942 internal::None, internal::None> {
3943 typedef internal::Types0 type;
3945 template <
typename T1>
3946 struct Types<T1, internal::None, internal::None, internal::None,
3947 internal::None, internal::None, internal::None, internal::None,
3948 internal::None, internal::None, internal::None, internal::None,
3949 internal::None, internal::None, internal::None, internal::None,
3950 internal::None, internal::None, internal::None, internal::None,
3951 internal::None, internal::None, internal::None, internal::None,
3952 internal::None, internal::None, internal::None, internal::None,
3953 internal::None, internal::None, internal::None, internal::None,
3954 internal::None, internal::None, internal::None, internal::None,
3955 internal::None, internal::None, internal::None, internal::None,
3956 internal::None, internal::None, internal::None, internal::None,
3957 internal::None, internal::None, internal::None, internal::None,
3958 internal::None, internal::None> {
3959 typedef internal::Types1<T1> type;
3961 template <
typename T1,
typename T2>
3962 struct Types<T1, T2, internal::None, internal::None, internal::None,
3963 internal::None, internal::None, internal::None, internal::None,
3964 internal::None, internal::None, internal::None, internal::None,
3965 internal::None, internal::None, internal::None, internal::None,
3966 internal::None, internal::None, internal::None, internal::None,
3967 internal::None, internal::None, internal::None, internal::None,
3968 internal::None, internal::None, internal::None, internal::None,
3969 internal::None, internal::None, internal::None, internal::None,
3970 internal::None, internal::None, internal::None, internal::None,
3971 internal::None, internal::None, internal::None, internal::None,
3972 internal::None, internal::None, internal::None, internal::None,
3973 internal::None, internal::None, internal::None, internal::None,
3975 typedef internal::Types2<T1, T2> type;
3977 template <
typename T1,
typename T2,
typename T3>
3978 struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
3979 internal::None, internal::None, internal::None, internal::None,
3980 internal::None, internal::None, internal::None, internal::None,
3981 internal::None, internal::None, internal::None, internal::None,
3982 internal::None, internal::None, internal::None, internal::None,
3983 internal::None, internal::None, internal::None, internal::None,
3984 internal::None, internal::None, internal::None, internal::None,
3985 internal::None, internal::None, internal::None, internal::None,
3986 internal::None, internal::None, internal::None, internal::None,
3987 internal::None, internal::None, internal::None, internal::None,
3988 internal::None, internal::None, internal::None, internal::None,
3989 internal::None, internal::None, internal::None, internal::None> {
3990 typedef internal::Types3<T1, T2, T3> type;
3992 template <
typename T1,
typename T2,
typename T3,
typename T4>
3993 struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
3994 internal::None, internal::None, internal::None, internal::None,
3995 internal::None, internal::None, internal::None, internal::None,
3996 internal::None, internal::None, internal::None, internal::None,
3997 internal::None, internal::None, internal::None, internal::None,
3998 internal::None, internal::None, internal::None, internal::None,
3999 internal::None, internal::None, internal::None, internal::None,
4000 internal::None, internal::None, internal::None, internal::None,
4001 internal::None, internal::None, internal::None, internal::None,
4002 internal::None, internal::None, internal::None, internal::None,
4003 internal::None, internal::None, internal::None, internal::None,
4004 internal::None, internal::None, internal::None> {
4005 typedef internal::Types4<T1, T2, T3, T4> type;
4007 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4008 struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
4009 internal::None, internal::None, internal::None, internal::None,
4010 internal::None, internal::None, internal::None, internal::None,
4011 internal::None, internal::None, internal::None, internal::None,
4012 internal::None, internal::None, internal::None, internal::None,
4013 internal::None, internal::None, internal::None, internal::None,
4014 internal::None, internal::None, internal::None, internal::None,
4015 internal::None, internal::None, internal::None, internal::None,
4016 internal::None, internal::None, internal::None, internal::None,
4017 internal::None, internal::None, internal::None, internal::None,
4018 internal::None, internal::None, internal::None, internal::None,
4019 internal::None, internal::None, internal::None> {
4020 typedef internal::Types5<T1, T2, T3, T4, T5> type;
4022 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4024 struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
4025 internal::None, internal::None, internal::None, internal::None,
4026 internal::None, internal::None, internal::None, internal::None,
4027 internal::None, internal::None, internal::None, internal::None,
4028 internal::None, internal::None, internal::None, internal::None,
4029 internal::None, internal::None, internal::None, internal::None,
4030 internal::None, internal::None, internal::None, internal::None,
4031 internal::None, internal::None, internal::None, internal::None,
4032 internal::None, internal::None, internal::None, internal::None,
4033 internal::None, internal::None, internal::None, internal::None,
4034 internal::None, internal::None, internal::None, internal::None,
4035 internal::None, internal::None> {
4036 typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
4038 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4039 typename T6,
typename T7>
4040 struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
4041 internal::None, internal::None, internal::None, internal::None,
4042 internal::None, internal::None, internal::None, internal::None,
4043 internal::None, internal::None, internal::None, internal::None,
4044 internal::None, internal::None, internal::None, internal::None,
4045 internal::None, internal::None, internal::None, internal::None,
4046 internal::None, internal::None, internal::None, internal::None,
4047 internal::None, internal::None, internal::None, internal::None,
4048 internal::None, internal::None, internal::None, internal::None,
4049 internal::None, internal::None, internal::None, internal::None,
4050 internal::None, internal::None, internal::None, internal::None,
4052 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
4054 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4055 typename T6,
typename T7,
typename T8>
4056 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
4057 internal::None, internal::None, internal::None, internal::None,
4058 internal::None, internal::None, internal::None, internal::None,
4059 internal::None, internal::None, internal::None, internal::None,
4060 internal::None, internal::None, internal::None, internal::None,
4061 internal::None, internal::None, internal::None, internal::None,
4062 internal::None, internal::None, internal::None, internal::None,
4063 internal::None, internal::None, internal::None, internal::None,
4064 internal::None, internal::None, internal::None, internal::None,
4065 internal::None, internal::None, internal::None, internal::None,
4066 internal::None, internal::None, internal::None, internal::None> {
4067 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
4069 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4070 typename T6,
typename T7,
typename T8,
typename T9>
4071 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
4072 internal::None, internal::None, internal::None, internal::None,
4073 internal::None, internal::None, internal::None, internal::None,
4074 internal::None, internal::None, internal::None, internal::None,
4075 internal::None, internal::None, internal::None, internal::None,
4076 internal::None, internal::None, internal::None, internal::None,
4077 internal::None, internal::None, internal::None, internal::None,
4078 internal::None, internal::None, internal::None, internal::None,
4079 internal::None, internal::None, internal::None, internal::None,
4080 internal::None, internal::None, internal::None, internal::None,
4081 internal::None, internal::None, internal::None, internal::None> {
4082 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
4084 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4085 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4086 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
4087 internal::None, internal::None, internal::None, internal::None,
4088 internal::None, internal::None, internal::None, internal::None,
4089 internal::None, internal::None, internal::None, internal::None,
4090 internal::None, internal::None, internal::None, internal::None,
4091 internal::None, internal::None, internal::None, internal::None,
4092 internal::None, internal::None, internal::None, internal::None,
4093 internal::None, internal::None, internal::None, internal::None,
4094 internal::None, internal::None, internal::None, internal::None,
4095 internal::None, internal::None, internal::None, internal::None,
4096 internal::None, internal::None, internal::None> {
4097 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
4099 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4100 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4102 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
4103 internal::None, internal::None, internal::None, internal::None,
4104 internal::None, internal::None, internal::None, internal::None,
4105 internal::None, internal::None, internal::None, internal::None,
4106 internal::None, internal::None, internal::None, internal::None,
4107 internal::None, internal::None, internal::None, internal::None,
4108 internal::None, internal::None, internal::None, internal::None,
4109 internal::None, internal::None, internal::None, internal::None,
4110 internal::None, internal::None, internal::None, internal::None,
4111 internal::None, internal::None, internal::None, internal::None,
4112 internal::None, internal::None> {
4113 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
4115 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4116 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4117 typename T11,
typename T12>
4118 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
4119 internal::None, internal::None, internal::None, internal::None,
4120 internal::None, internal::None, internal::None, internal::None,
4121 internal::None, internal::None, internal::None, internal::None,
4122 internal::None, internal::None, internal::None, internal::None,
4123 internal::None, internal::None, internal::None, internal::None,
4124 internal::None, internal::None, internal::None, internal::None,
4125 internal::None, internal::None, internal::None, internal::None,
4126 internal::None, internal::None, internal::None, internal::None,
4127 internal::None, internal::None, internal::None, internal::None,
4129 typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
4132 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4133 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4134 typename T11,
typename T12,
typename T13>
4135 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
4136 internal::None, internal::None, internal::None, internal::None,
4137 internal::None, internal::None, internal::None, internal::None,
4138 internal::None, internal::None, internal::None, internal::None,
4139 internal::None, internal::None, internal::None, internal::None,
4140 internal::None, internal::None, internal::None, internal::None,
4141 internal::None, internal::None, internal::None, internal::None,
4142 internal::None, internal::None, internal::None, internal::None,
4143 internal::None, internal::None, internal::None, internal::None,
4144 internal::None, internal::None, internal::None, internal::None,
4146 typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4149 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4150 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4151 typename T11,
typename T12,
typename T13,
typename T14>
4152 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4153 internal::None, internal::None, internal::None, internal::None,
4154 internal::None, internal::None, internal::None, internal::None,
4155 internal::None, internal::None, internal::None, internal::None,
4156 internal::None, internal::None, internal::None, internal::None,
4157 internal::None, internal::None, internal::None, internal::None,
4158 internal::None, internal::None, internal::None, internal::None,
4159 internal::None, internal::None, internal::None, internal::None,
4160 internal::None, internal::None, internal::None, internal::None,
4161 internal::None, internal::None, internal::None, internal::None> {
4162 typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4165 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4166 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4167 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
4168 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4169 internal::None, internal::None, internal::None, internal::None,
4170 internal::None, internal::None, internal::None, internal::None,
4171 internal::None, internal::None, internal::None, internal::None,
4172 internal::None, internal::None, internal::None, internal::None,
4173 internal::None, internal::None, internal::None, internal::None,
4174 internal::None, internal::None, internal::None, internal::None,
4175 internal::None, internal::None, internal::None, internal::None,
4176 internal::None, internal::None, internal::None, internal::None,
4177 internal::None, internal::None, internal::None> {
4178 typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4179 T13, T14, T15> type;
4181 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4182 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4183 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4185 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4186 T16, internal::None, internal::None, internal::None, internal::None,
4187 internal::None, internal::None, internal::None, internal::None,
4188 internal::None, internal::None, internal::None, internal::None,
4189 internal::None, internal::None, internal::None, internal::None,
4190 internal::None, internal::None, internal::None, internal::None,
4191 internal::None, internal::None, internal::None, internal::None,
4192 internal::None, internal::None, internal::None, internal::None,
4193 internal::None, internal::None, internal::None, internal::None,
4194 internal::None, internal::None> {
4195 typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4196 T13, T14, T15, T16> type;
4198 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4199 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4200 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4201 typename T16,
typename T17>
4202 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4203 T16, T17, internal::None, internal::None, internal::None, internal::None,
4204 internal::None, internal::None, internal::None, internal::None,
4205 internal::None, internal::None, internal::None, internal::None,
4206 internal::None, internal::None, internal::None, internal::None,
4207 internal::None, internal::None, internal::None, internal::None,
4208 internal::None, internal::None, internal::None, internal::None,
4209 internal::None, internal::None, internal::None, internal::None,
4210 internal::None, internal::None, internal::None, internal::None,
4212 typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4213 T13, T14, T15, T16, T17> type;
4215 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4216 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4217 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4218 typename T16,
typename T17,
typename T18>
4219 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4220 T16, T17, T18, internal::None, internal::None, internal::None,
4221 internal::None, internal::None, internal::None, internal::None,
4222 internal::None, internal::None, internal::None, internal::None,
4223 internal::None, internal::None, internal::None, internal::None,
4224 internal::None, internal::None, internal::None, internal::None,
4225 internal::None, internal::None, internal::None, internal::None,
4226 internal::None, internal::None, internal::None, internal::None,
4227 internal::None, internal::None, internal::None, internal::None,
4229 typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4230 T13, T14, T15, T16, T17, T18> type;
4232 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4233 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4234 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4235 typename T16,
typename T17,
typename T18,
typename T19>
4236 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4237 T16, T17, T18, T19, internal::None, internal::None, internal::None,
4238 internal::None, internal::None, internal::None, internal::None,
4239 internal::None, internal::None, internal::None, internal::None,
4240 internal::None, internal::None, internal::None, internal::None,
4241 internal::None, internal::None, internal::None, internal::None,
4242 internal::None, internal::None, internal::None, internal::None,
4243 internal::None, internal::None, internal::None, internal::None,
4244 internal::None, internal::None, internal::None, internal::None> {
4245 typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4246 T13, T14, T15, T16, T17, T18, T19> type;
4248 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4249 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4250 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4251 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
4252 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4253 T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
4254 internal::None, internal::None, internal::None, internal::None,
4255 internal::None, internal::None, internal::None, internal::None,
4256 internal::None, internal::None, internal::None, internal::None,
4257 internal::None, internal::None, internal::None, internal::None,
4258 internal::None, internal::None, internal::None, internal::None,
4259 internal::None, internal::None, internal::None, internal::None,
4260 internal::None, internal::None, internal::None> {
4261 typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4262 T13, T14, T15, T16, T17, T18, T19, T20> type;
4264 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4265 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4266 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4267 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4269 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4270 T16, T17, T18, T19, T20, T21, internal::None, internal::None,
4271 internal::None, internal::None, internal::None, internal::None,
4272 internal::None, internal::None, internal::None, internal::None,
4273 internal::None, internal::None, internal::None, internal::None,
4274 internal::None, internal::None, internal::None, internal::None,
4275 internal::None, internal::None, internal::None, internal::None,
4276 internal::None, internal::None, internal::None, internal::None,
4277 internal::None, internal::None, internal::None> {
4278 typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4279 T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
4281 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4282 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4283 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4284 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4285 typename T21,
typename T22>
4286 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4287 T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
4288 internal::None, internal::None, internal::None, internal::None,
4289 internal::None, internal::None, internal::None, internal::None,
4290 internal::None, internal::None, internal::None, internal::None,
4291 internal::None, internal::None, internal::None, internal::None,
4292 internal::None, internal::None, internal::None, internal::None,
4293 internal::None, internal::None, internal::None, internal::None,
4294 internal::None, internal::None> {
4295 typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4296 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
4298 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4299 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4300 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4301 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4302 typename T21,
typename T22,
typename T23>
4303 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4304 T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
4305 internal::None, internal::None, internal::None, internal::None,
4306 internal::None, internal::None, internal::None, internal::None,
4307 internal::None, internal::None, internal::None, internal::None,
4308 internal::None, internal::None, internal::None, internal::None,
4309 internal::None, internal::None, internal::None, internal::None,
4310 internal::None, internal::None, internal::None, internal::None,
4312 typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4313 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
4315 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4316 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4317 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4318 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4319 typename T21,
typename T22,
typename T23,
typename T24>
4320 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4321 T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
4322 internal::None, internal::None, internal::None, internal::None,
4323 internal::None, internal::None, internal::None, internal::None,
4324 internal::None, internal::None, internal::None, internal::None,
4325 internal::None, internal::None, internal::None, internal::None,
4326 internal::None, internal::None, internal::None, internal::None,
4327 internal::None, internal::None, internal::None, internal::None,
4329 typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4330 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
4332 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4333 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4334 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4335 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4336 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
4337 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4338 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
4339 internal::None, internal::None, internal::None, internal::None,
4340 internal::None, internal::None, internal::None, internal::None,
4341 internal::None, internal::None, internal::None, internal::None,
4342 internal::None, internal::None, internal::None, internal::None,
4343 internal::None, internal::None, internal::None, internal::None,
4344 internal::None, internal::None, internal::None, internal::None> {
4345 typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4346 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
4348 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4349 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4350 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4351 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4352 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4354 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4355 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
4356 internal::None, internal::None, internal::None, internal::None,
4357 internal::None, internal::None, internal::None, internal::None,
4358 internal::None, internal::None, internal::None, internal::None,
4359 internal::None, internal::None, internal::None, internal::None,
4360 internal::None, internal::None, internal::None, internal::None,
4361 internal::None, internal::None, internal::None> {
4362 typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4363 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
4366 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4367 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4368 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4369 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4370 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4371 typename T26,
typename T27>
4372 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4373 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
4374 internal::None, internal::None, internal::None, internal::None,
4375 internal::None, internal::None, internal::None, internal::None,
4376 internal::None, internal::None, internal::None, internal::None,
4377 internal::None, internal::None, internal::None, internal::None,
4378 internal::None, internal::None, internal::None, internal::None,
4379 internal::None, internal::None> {
4380 typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4381 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4384 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4385 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4386 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4387 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4388 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4389 typename T26,
typename T27,
typename T28>
4390 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4391 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
4392 internal::None, internal::None, internal::None, internal::None,
4393 internal::None, internal::None, internal::None, internal::None,
4394 internal::None, internal::None, internal::None, internal::None,
4395 internal::None, internal::None, internal::None, internal::None,
4396 internal::None, internal::None, internal::None, internal::None,
4397 internal::None, internal::None> {
4398 typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4399 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4402 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4403 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4404 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4405 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4406 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4407 typename T26,
typename T27,
typename T28,
typename T29>
4408 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4409 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4410 internal::None, internal::None, internal::None, internal::None,
4411 internal::None, internal::None, internal::None, internal::None,
4412 internal::None, internal::None, internal::None, internal::None,
4413 internal::None, internal::None, internal::None, internal::None,
4414 internal::None, internal::None, internal::None, internal::None,
4416 typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4417 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4418 T27, T28, T29> type;
4420 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4421 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4422 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4423 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4424 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4425 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
4426 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4427 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4428 internal::None, internal::None, internal::None, internal::None,
4429 internal::None, internal::None, internal::None, internal::None,
4430 internal::None, internal::None, internal::None, internal::None,
4431 internal::None, internal::None, internal::None, internal::None,
4432 internal::None, internal::None, internal::None, internal::None> {
4433 typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4434 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4435 T27, T28, T29, T30> type;
4437 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4438 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4439 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4440 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4441 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4442 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4444 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4445 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4446 T31, internal::None, internal::None, internal::None, internal::None,
4447 internal::None, internal::None, internal::None, internal::None,
4448 internal::None, internal::None, internal::None, internal::None,
4449 internal::None, internal::None, internal::None, internal::None,
4450 internal::None, internal::None, internal::None> {
4451 typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4452 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4453 T27, T28, T29, T30, T31> type;
4455 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4456 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4457 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4458 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4459 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4460 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4461 typename T31,
typename T32>
4462 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4463 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4464 T31, T32, internal::None, internal::None, internal::None, internal::None,
4465 internal::None, internal::None, internal::None, internal::None,
4466 internal::None, internal::None, internal::None, internal::None,
4467 internal::None, internal::None, internal::None, internal::None,
4468 internal::None, internal::None> {
4469 typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4470 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4471 T27, T28, T29, T30, T31, T32> type;
4473 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4474 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4475 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4476 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4477 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4478 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4479 typename T31,
typename T32,
typename T33>
4480 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4481 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4482 T31, T32, T33, internal::None, internal::None, internal::None,
4483 internal::None, internal::None, internal::None, internal::None,
4484 internal::None, internal::None, internal::None, internal::None,
4485 internal::None, internal::None, internal::None, internal::None,
4486 internal::None, internal::None> {
4487 typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4488 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4489 T27, T28, T29, T30, T31, T32, T33> type;
4491 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4492 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4493 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4494 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4495 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4496 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4497 typename T31,
typename T32,
typename T33,
typename T34>
4498 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4499 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4500 T31, T32, T33, T34, internal::None, internal::None, internal::None,
4501 internal::None, internal::None, internal::None, internal::None,
4502 internal::None, internal::None, internal::None, internal::None,
4503 internal::None, internal::None, internal::None, internal::None,
4505 typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4506 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4507 T27, T28, T29, T30, T31, T32, T33, T34> type;
4509 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4510 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4511 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4512 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4513 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4514 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4515 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
4516 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4517 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4518 T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
4519 internal::None, internal::None, internal::None, internal::None,
4520 internal::None, internal::None, internal::None, internal::None,
4521 internal::None, internal::None, internal::None, internal::None> {
4522 typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4523 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4524 T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
4526 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4527 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4528 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4529 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4530 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4531 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4532 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4534 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4535 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4536 T31, T32, T33, T34, T35, T36, internal::None, internal::None,
4537 internal::None, internal::None, internal::None, internal::None,
4538 internal::None, internal::None, internal::None, internal::None,
4539 internal::None, internal::None, internal::None, internal::None> {
4540 typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4541 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4542 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
4544 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4545 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4546 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4547 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4548 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4549 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4550 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4551 typename T36,
typename T37>
4552 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4553 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4554 T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
4555 internal::None, internal::None, internal::None, internal::None,
4556 internal::None, internal::None, internal::None, internal::None,
4557 internal::None, internal::None, internal::None> {
4558 typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4559 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4560 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
4562 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4563 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4564 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4565 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4566 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4567 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4568 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4569 typename T36,
typename T37,
typename T38>
4570 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4571 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4572 T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
4573 internal::None, internal::None, internal::None, internal::None,
4574 internal::None, internal::None, internal::None, internal::None,
4575 internal::None, internal::None> {
4576 typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4577 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4578 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
4580 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4581 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4582 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4583 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4584 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4585 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4586 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4587 typename T36,
typename T37,
typename T38,
typename T39>
4588 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4589 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4590 T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
4591 internal::None, internal::None, internal::None, internal::None,
4592 internal::None, internal::None, internal::None, internal::None,
4593 internal::None, internal::None> {
4594 typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4595 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4596 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
4598 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4599 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4600 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4601 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4602 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4603 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4604 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4605 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
4606 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4607 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4608 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
4609 internal::None, internal::None, internal::None, internal::None,
4610 internal::None, internal::None, internal::None, internal::None,
4612 typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4613 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4614 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
4617 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4618 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4619 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4620 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4621 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4622 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4623 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4624 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4626 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4627 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4628 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
4629 internal::None, internal::None, internal::None, internal::None,
4630 internal::None, internal::None, internal::None, internal::None> {
4631 typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4632 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4633 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4636 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4637 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4638 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4639 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4640 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4641 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4642 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4643 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4644 typename T41,
typename T42>
4645 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4646 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4647 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
4648 internal::None, internal::None, internal::None, internal::None,
4649 internal::None, internal::None, internal::None> {
4650 typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4651 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4652 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4655 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4656 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4657 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4658 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4659 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4660 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4661 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4662 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4663 typename T41,
typename T42,
typename T43>
4664 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4665 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4666 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4667 internal::None, internal::None, internal::None, internal::None,
4668 internal::None, internal::None, internal::None> {
4669 typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4670 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4671 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4672 T41, T42, T43> type;
4674 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4675 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4676 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4677 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4678 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4679 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4680 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4681 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4682 typename T41,
typename T42,
typename T43,
typename T44>
4683 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4684 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4685 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
4686 internal::None, internal::None, internal::None, internal::None,
4687 internal::None, internal::None> {
4688 typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4689 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4690 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4691 T41, T42, T43, T44> type;
4693 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4694 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4695 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4696 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4697 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4698 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4699 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4700 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4701 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
4702 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4703 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4704 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4705 internal::None, internal::None, internal::None, internal::None,
4707 typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4708 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4709 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4710 T41, T42, T43, T44, T45> type;
4712 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4713 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4714 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4715 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4716 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4717 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4718 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4719 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4720 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4722 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4723 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4724 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4725 T46, internal::None, internal::None, internal::None, internal::None> {
4726 typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4727 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4728 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4729 T41, T42, T43, T44, T45, T46> type;
4731 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4732 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4733 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4734 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4735 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4736 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4737 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4738 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4739 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4740 typename T46,
typename T47>
4741 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4742 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4743 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4744 T46, T47, internal::None, internal::None, internal::None> {
4745 typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4746 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4747 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4748 T41, T42, T43, T44, T45, T46, T47> type;
4750 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4751 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4752 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4753 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4754 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4755 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4756 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4757 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4758 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4759 typename T46,
typename T47,
typename T48>
4760 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4761 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4762 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4763 T46, T47, T48, internal::None, internal::None> {
4764 typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4765 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4766 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4767 T41, T42, T43, T44, T45, T46, T47, T48> type;
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,
typename T24,
typename T25,
4774 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4775 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4776 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4777 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4778 typename T46,
typename T47,
typename T48,
typename T49>
4779 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4780 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4781 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4782 T46, T47, T48, T49, internal::None> {
4783 typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4784 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4785 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4786 T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
4789 namespace internal {
4791 # define GTEST_TEMPLATE_ template <typename T> class 4801 template <GTEST_TEMPLATE_ Tmpl>
4802 struct TemplateSel {
4803 template <
typename T>
4805 typedef Tmpl<T> type;
4809 # define GTEST_BIND_(TmplSel, T) \ 4810 TmplSel::template Bind<T>::type 4816 template <
typename T>
4827 struct Templates0 {};
4831 template <GTEST_TEMPLATE_ T1>
4833 typedef TemplateSel<T1> Head;
4834 typedef Templates0 Tail;
4836 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
4838 typedef TemplateSel<T1> Head;
4839 typedef Templates1<T2> Tail;
4842 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
4844 typedef TemplateSel<T1> Head;
4845 typedef Templates2<T2, T3> Tail;
4848 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4851 typedef TemplateSel<T1> Head;
4852 typedef Templates3<T2, T3, T4> Tail;
4855 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4856 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
4858 typedef TemplateSel<T1> Head;
4859 typedef Templates4<T2, T3, T4, T5> Tail;
4862 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4863 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
4865 typedef TemplateSel<T1> Head;
4866 typedef Templates5<T2, T3, T4, T5, T6> Tail;
4869 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4870 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4873 typedef TemplateSel<T1> Head;
4874 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
4877 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4878 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4879 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
4881 typedef TemplateSel<T1> Head;
4882 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
4885 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4886 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4887 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
4889 typedef TemplateSel<T1> Head;
4890 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
4893 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4894 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4895 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4896 GTEST_TEMPLATE_ T10>
4897 struct Templates10 {
4898 typedef TemplateSel<T1> Head;
4899 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
4902 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4903 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4904 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4905 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
4906 struct Templates11 {
4907 typedef TemplateSel<T1> Head;
4908 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
4911 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4912 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4913 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4914 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
4915 struct Templates12 {
4916 typedef TemplateSel<T1> Head;
4917 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
4920 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4921 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4922 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4923 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4924 GTEST_TEMPLATE_ T13>
4925 struct Templates13 {
4926 typedef TemplateSel<T1> Head;
4927 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
4930 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4931 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4932 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4933 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4934 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
4935 struct Templates14 {
4936 typedef TemplateSel<T1> Head;
4937 typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
4941 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4942 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4943 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4944 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4945 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
4946 struct Templates15 {
4947 typedef TemplateSel<T1> Head;
4948 typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4952 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4953 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4954 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4955 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4956 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4957 GTEST_TEMPLATE_ T16>
4958 struct Templates16 {
4959 typedef TemplateSel<T1> Head;
4960 typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4964 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4965 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4966 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4967 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4968 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4969 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
4970 struct Templates17 {
4971 typedef TemplateSel<T1> Head;
4972 typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4973 T15, T16, T17> Tail;
4976 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4977 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4978 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4979 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4980 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4981 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
4982 struct Templates18 {
4983 typedef TemplateSel<T1> Head;
4984 typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4985 T15, T16, T17, T18> Tail;
4988 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4989 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4990 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4991 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4992 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4993 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4994 GTEST_TEMPLATE_ T19>
4995 struct Templates19 {
4996 typedef TemplateSel<T1> Head;
4997 typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4998 T15, T16, T17, T18, T19> Tail;
5001 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5002 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5003 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5004 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5005 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5006 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5007 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
5008 struct Templates20 {
5009 typedef TemplateSel<T1> Head;
5010 typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5011 T15, T16, T17, T18, T19, T20> Tail;
5014 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5015 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5016 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5017 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5018 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5019 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5020 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
5021 struct Templates21 {
5022 typedef TemplateSel<T1> Head;
5023 typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5024 T15, T16, T17, T18, T19, T20, T21> Tail;
5027 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5028 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5029 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5030 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5031 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5032 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5033 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5034 GTEST_TEMPLATE_ T22>
5035 struct Templates22 {
5036 typedef TemplateSel<T1> Head;
5037 typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5038 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
5041 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5042 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5043 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5044 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5045 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5046 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5047 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5048 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
5049 struct Templates23 {
5050 typedef TemplateSel<T1> Head;
5051 typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5052 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
5055 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5056 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5057 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5058 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5059 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5060 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5061 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5062 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
5063 struct Templates24 {
5064 typedef TemplateSel<T1> Head;
5065 typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5066 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
5069 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5070 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5071 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5072 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5073 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5074 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5075 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5076 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5077 GTEST_TEMPLATE_ T25>
5078 struct Templates25 {
5079 typedef TemplateSel<T1> Head;
5080 typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5081 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
5084 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5085 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5086 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5087 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5088 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5089 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5090 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5091 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5092 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
5093 struct Templates26 {
5094 typedef TemplateSel<T1> Head;
5095 typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5096 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
5099 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5100 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5101 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5102 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5103 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5104 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5105 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5106 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5107 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
5108 struct Templates27 {
5109 typedef TemplateSel<T1> Head;
5110 typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5111 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
5114 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5115 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5116 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5117 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5118 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5119 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5120 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5121 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5122 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5123 GTEST_TEMPLATE_ T28>
5124 struct Templates28 {
5125 typedef TemplateSel<T1> Head;
5126 typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5127 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5131 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5132 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5133 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5134 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5135 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5136 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5137 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5138 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5139 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5140 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
5141 struct Templates29 {
5142 typedef TemplateSel<T1> Head;
5143 typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5144 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5148 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5149 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5150 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5151 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5152 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5153 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5154 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5155 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5156 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5157 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
5158 struct Templates30 {
5159 typedef TemplateSel<T1> Head;
5160 typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5161 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5165 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5166 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5167 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5168 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5169 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5170 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5171 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5172 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5173 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5174 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5175 GTEST_TEMPLATE_ T31>
5176 struct Templates31 {
5177 typedef TemplateSel<T1> Head;
5178 typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5179 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5180 T29, T30, T31> Tail;
5183 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5184 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5185 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5186 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5187 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5188 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5189 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5190 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5191 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5192 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5193 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
5194 struct Templates32 {
5195 typedef TemplateSel<T1> Head;
5196 typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5197 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5198 T29, T30, T31, T32> Tail;
5201 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5202 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5203 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5204 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5205 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5206 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5207 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5208 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5209 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5210 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5211 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
5212 struct Templates33 {
5213 typedef TemplateSel<T1> Head;
5214 typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5215 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5216 T29, T30, T31, T32, T33> Tail;
5219 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5220 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5221 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5222 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5223 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5224 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5225 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5226 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5227 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5228 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5229 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5230 GTEST_TEMPLATE_ T34>
5231 struct Templates34 {
5232 typedef TemplateSel<T1> Head;
5233 typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5234 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5235 T29, T30, T31, T32, T33, T34> Tail;
5238 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5239 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5240 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5241 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5242 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5243 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5244 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5245 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5246 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5247 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5248 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5249 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
5250 struct Templates35 {
5251 typedef TemplateSel<T1> Head;
5252 typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5253 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5254 T29, T30, T31, T32, T33, T34, T35> Tail;
5257 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5258 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5259 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5260 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5261 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5262 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5263 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5264 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5265 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5266 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5267 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5268 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
5269 struct Templates36 {
5270 typedef TemplateSel<T1> Head;
5271 typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5272 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5273 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
5276 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5277 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5278 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5279 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5280 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5281 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5282 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5283 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5284 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5285 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5286 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5287 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5288 GTEST_TEMPLATE_ T37>
5289 struct Templates37 {
5290 typedef TemplateSel<T1> Head;
5291 typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5292 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5293 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
5296 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5297 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5298 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5299 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5300 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5301 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5302 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5303 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5304 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5305 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5306 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5307 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5308 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
5309 struct Templates38 {
5310 typedef TemplateSel<T1> Head;
5311 typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5312 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5313 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
5316 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5317 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5318 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5319 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5320 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5321 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5322 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5323 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5324 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5325 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5326 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5327 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5328 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
5329 struct Templates39 {
5330 typedef TemplateSel<T1> Head;
5331 typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5332 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5333 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
5336 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5337 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5338 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5339 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5340 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5341 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5342 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5343 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5344 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5345 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5346 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5347 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5348 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5349 GTEST_TEMPLATE_ T40>
5350 struct Templates40 {
5351 typedef TemplateSel<T1> Head;
5352 typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5353 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5354 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5357 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5358 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5359 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5360 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5361 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5362 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5363 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5364 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5365 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5366 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5367 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5368 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5369 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5370 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
5371 struct Templates41 {
5372 typedef TemplateSel<T1> Head;
5373 typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5374 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5375 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5378 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5379 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5380 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5381 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5382 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5383 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5384 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5385 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5386 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5387 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5388 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5389 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5390 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5391 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
5392 struct Templates42 {
5393 typedef TemplateSel<T1> Head;
5394 typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5395 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5396 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5400 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5401 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5402 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5403 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5404 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5405 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5406 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5407 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5408 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5409 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5410 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5411 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5412 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5413 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5414 GTEST_TEMPLATE_ T43>
5415 struct Templates43 {
5416 typedef TemplateSel<T1> Head;
5417 typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5418 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5419 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5423 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5424 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5425 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5426 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5427 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5428 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5429 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5430 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5431 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5432 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5433 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5434 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5435 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5436 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5437 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
5438 struct Templates44 {
5439 typedef TemplateSel<T1> Head;
5440 typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5441 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5442 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5446 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5447 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5448 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5449 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5450 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5451 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5452 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5453 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5454 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5455 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5456 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5457 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5458 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5459 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5460 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
5461 struct Templates45 {
5462 typedef TemplateSel<T1> Head;
5463 typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5464 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5465 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5466 T43, T44, T45> Tail;
5469 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5470 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5471 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5472 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5473 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5474 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5475 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5476 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5477 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5478 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5479 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5480 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5481 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5482 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5483 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5484 GTEST_TEMPLATE_ T46>
5485 struct Templates46 {
5486 typedef TemplateSel<T1> Head;
5487 typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5488 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5489 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5490 T43, T44, T45, T46> Tail;
5493 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5494 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5495 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5496 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5497 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5498 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5499 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5500 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5501 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5502 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5503 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5504 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5505 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5506 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5507 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5508 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
5509 struct Templates47 {
5510 typedef TemplateSel<T1> Head;
5511 typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5512 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5513 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5514 T43, T44, T45, T46, T47> Tail;
5517 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5518 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5519 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5520 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5521 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5522 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5523 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5524 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5525 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5526 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5527 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5528 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5529 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5530 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5531 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5532 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
5533 struct Templates48 {
5534 typedef TemplateSel<T1> Head;
5535 typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5536 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5537 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5538 T43, T44, T45, T46, T47, T48> Tail;
5541 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5542 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5543 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5544 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5545 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5546 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5547 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5548 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5549 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5550 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5551 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5552 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5553 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5554 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5555 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5556 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
5557 GTEST_TEMPLATE_ T49>
5558 struct Templates49 {
5559 typedef TemplateSel<T1> Head;
5560 typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5561 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5562 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5563 T43, T44, T45, T46, T47, T48, T49> Tail;
5566 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5567 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5568 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5569 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5570 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5571 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5572 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5573 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5574 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5575 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5576 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5577 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5578 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5579 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5580 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5581 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
5582 GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
5583 struct Templates50 {
5584 typedef TemplateSel<T1> Head;
5585 typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5586 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5587 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5588 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
5605 template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
5606 GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
5607 GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
5608 GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
5609 GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
5610 GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
5611 GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
5612 GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
5613 GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
5614 GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
5615 GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
5616 GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
5617 GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
5618 GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
5619 GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
5620 GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
5621 GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
5622 GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
5623 GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
5624 GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
5625 GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
5626 GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
5627 GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
5628 GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
5629 GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
5631 typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5632 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5633 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5634 T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
5638 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5639 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5640 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5641 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5642 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5644 typedef Templates0 type;
5646 template <GTEST_TEMPLATE_ T1>
5647 struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5648 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5649 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5650 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5651 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5653 typedef Templates1<T1> type;
5655 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
5656 struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5657 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5658 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5659 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5660 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5662 typedef Templates2<T1, T2> type;
5664 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
5665 struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5666 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5667 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5668 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5669 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5670 typedef Templates3<T1, T2, T3> type;
5672 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5674 struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5675 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5676 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5677 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5678 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5679 typedef Templates4<T1, T2, T3, T4> type;
5681 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5682 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
5683 struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5684 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5685 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5686 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5687 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5688 typedef Templates5<T1, T2, T3, T4, T5> type;
5690 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5691 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
5692 struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
5693 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5694 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5695 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5696 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5697 typedef Templates6<T1, T2, T3, T4, T5, T6> type;
5699 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5700 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5702 struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
5703 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5704 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5705 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5706 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5707 typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
5709 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5710 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5711 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
5712 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
5713 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5714 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5715 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5716 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5717 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
5719 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5720 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5721 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
5722 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
5723 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5724 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5725 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5726 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5727 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
5729 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5730 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5731 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5732 GTEST_TEMPLATE_ T10>
5733 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
5734 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5735 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5736 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5737 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5738 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
5740 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5741 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5742 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5743 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
5744 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
5745 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5746 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5747 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5748 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5749 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
5751 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5752 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5753 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5754 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
5755 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
5756 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5757 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5758 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5759 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5760 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
5762 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5763 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5764 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5765 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5766 GTEST_TEMPLATE_ T13>
5767 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
5768 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5769 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5770 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5771 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5772 typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
5775 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5776 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5777 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5778 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5779 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
5780 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5781 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5782 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5783 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5784 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5785 typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5788 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5789 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5790 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5791 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5792 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
5793 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5794 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5795 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5796 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5797 NoneT, NoneT, NoneT, NoneT, NoneT> {
5798 typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5801 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5802 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5803 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5804 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5805 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5806 GTEST_TEMPLATE_ T16>
5807 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5808 T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5809 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5810 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5811 NoneT, NoneT, NoneT, NoneT, NoneT> {
5812 typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5813 T14, T15, T16> type;
5815 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5816 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5817 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5818 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5819 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5820 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
5821 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5822 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5823 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5824 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5825 NoneT, NoneT, NoneT, NoneT, NoneT> {
5826 typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5827 T14, T15, T16, T17> type;
5829 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5830 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5831 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5832 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5833 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5834 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
5835 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5836 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5837 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5838 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5839 NoneT, NoneT, NoneT, NoneT> {
5840 typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5841 T14, T15, T16, T17, T18> type;
5843 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5844 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5845 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5846 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5847 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5848 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5849 GTEST_TEMPLATE_ T19>
5850 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5851 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5852 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5853 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5854 NoneT, NoneT, NoneT, NoneT> {
5855 typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5856 T14, T15, T16, T17, T18, T19> type;
5858 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5859 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5860 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5861 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5862 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5863 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5864 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
5865 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5866 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5867 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5868 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5869 NoneT, NoneT, NoneT, NoneT> {
5870 typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5871 T14, T15, T16, T17, T18, T19, T20> type;
5873 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5874 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5875 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5876 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5877 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5878 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5879 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
5880 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5881 T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
5882 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5883 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5884 NoneT, NoneT, NoneT, NoneT> {
5885 typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5886 T14, T15, T16, T17, T18, T19, T20, T21> type;
5888 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5889 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5890 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5891 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5892 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5893 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5894 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5895 GTEST_TEMPLATE_ T22>
5896 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5897 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
5898 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5899 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5900 NoneT, NoneT, NoneT> {
5901 typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5902 T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
5904 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5905 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5906 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5907 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5908 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5909 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5910 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5911 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
5912 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5913 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
5914 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5915 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5916 NoneT, NoneT, NoneT> {
5917 typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5918 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
5920 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5921 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5922 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5923 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5924 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5925 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5926 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5927 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
5928 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5929 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
5930 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5931 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5932 NoneT, NoneT, NoneT> {
5933 typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5934 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
5936 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5937 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5938 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5939 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5940 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5941 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5942 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5943 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5944 GTEST_TEMPLATE_ T25>
5945 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5946 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
5947 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5948 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5950 typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5951 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
5953 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5954 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5955 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5956 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5957 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5958 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5959 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5960 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5961 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
5962 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5963 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
5964 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5965 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5967 typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5968 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
5970 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5971 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5972 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5973 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5974 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5975 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5976 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5977 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5978 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
5979 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5980 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
5981 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5982 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5984 typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5985 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5988 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5989 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5990 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5991 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5992 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5993 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5994 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5995 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5996 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5997 GTEST_TEMPLATE_ T28>
5998 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5999 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6000 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6001 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6003 typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6004 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6007 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6008 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6009 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6010 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6011 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6012 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6013 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6014 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6015 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6016 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
6017 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6018 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6019 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6020 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6022 typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6023 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6026 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6027 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6028 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6029 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6030 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6031 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6032 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6033 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6034 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6035 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
6036 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6037 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6038 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6039 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6040 typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6041 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6042 T28, T29, T30> type;
6044 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6045 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6046 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6047 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6048 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6049 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6050 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6051 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6052 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6053 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6054 GTEST_TEMPLATE_ T31>
6055 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6056 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6057 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6058 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6059 typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6060 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6061 T28, T29, T30, T31> type;
6063 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6064 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6065 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6066 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6067 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6068 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6069 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6070 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6071 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6072 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6073 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
6074 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6075 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6076 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6077 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6078 typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6079 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6080 T28, T29, T30, T31, T32> type;
6082 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6083 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6084 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6085 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6086 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6087 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6088 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6089 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6090 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6091 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6092 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
6093 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6094 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6095 T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6096 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6097 typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6098 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6099 T28, T29, T30, T31, T32, T33> type;
6101 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6102 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6103 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6104 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6105 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6106 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6107 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6108 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6109 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6110 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6111 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6112 GTEST_TEMPLATE_ T34>
6113 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6114 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6115 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6116 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6117 typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6118 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6119 T28, T29, T30, T31, T32, T33, T34> type;
6121 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6122 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6123 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6124 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6125 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6126 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6127 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6128 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6129 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6130 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6131 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6132 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
6133 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6134 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6135 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6136 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6137 typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6138 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6139 T28, T29, T30, T31, T32, T33, T34, T35> type;
6141 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6142 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6143 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6144 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6145 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6146 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6147 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6148 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6149 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6150 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6151 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6152 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
6153 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6154 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6155 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
6156 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6157 typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6158 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6159 T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
6161 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6162 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6163 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6164 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6165 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6166 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6167 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6168 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6169 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6170 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6171 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6172 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6173 GTEST_TEMPLATE_ T37>
6174 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6175 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6176 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
6177 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6178 typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6179 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6180 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
6182 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6183 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6184 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6185 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6186 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6187 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6188 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6189 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6190 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6191 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6192 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6193 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6194 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
6195 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6196 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6197 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
6198 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6199 typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6200 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6201 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
6203 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6204 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6205 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6206 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6207 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6208 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6209 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6210 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6211 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6212 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6213 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6214 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6215 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
6216 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6217 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6218 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
6219 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6220 typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6221 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6222 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
6224 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6225 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6226 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6227 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6228 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6229 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6230 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6231 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6232 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6233 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6234 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6235 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6236 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6237 GTEST_TEMPLATE_ T40>
6238 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6239 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6240 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
6241 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6242 typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6243 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6244 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
6246 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6247 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6248 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6249 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6250 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6251 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6252 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6253 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6254 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6255 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6256 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6257 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6258 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6259 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
6260 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6261 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6262 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
6263 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6264 typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6265 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6266 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6269 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6270 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6271 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6272 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6273 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6274 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6275 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6276 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6277 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6278 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6279 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6280 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6281 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6282 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
6283 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6284 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6285 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
6286 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6287 typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6288 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6289 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6292 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6293 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6294 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6295 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6296 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6297 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6298 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6299 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6300 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6301 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6302 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6303 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6304 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6305 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6306 GTEST_TEMPLATE_ T43>
6307 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6308 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6309 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6310 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6311 typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6312 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6313 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6316 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6317 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6318 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6319 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6320 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6321 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6322 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6323 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6324 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6325 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6326 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6327 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6328 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6329 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6330 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
6331 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6332 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6333 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6334 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6335 typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6336 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6337 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6338 T42, T43, T44> type;
6340 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6341 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6342 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6343 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6344 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6345 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6346 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6347 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6348 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6349 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6350 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6351 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6352 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6353 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6354 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
6355 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6356 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6357 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6358 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
6359 typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6360 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6361 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6362 T42, T43, T44, T45> type;
6364 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6365 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6366 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6367 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6368 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6369 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6370 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6371 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6372 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6373 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6374 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6375 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6376 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6377 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6378 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6379 GTEST_TEMPLATE_ T46>
6380 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6381 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6382 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6383 T45, T46, NoneT, NoneT, NoneT, NoneT> {
6384 typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6385 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6386 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6387 T42, T43, T44, T45, T46> type;
6389 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6390 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6391 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6392 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6393 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6394 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6395 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6396 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6397 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6398 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6399 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6400 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6401 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6402 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6403 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6404 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
6405 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6406 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6407 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6408 T45, T46, T47, NoneT, NoneT, NoneT> {
6409 typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6410 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6411 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6412 T42, T43, T44, T45, T46, T47> type;
6414 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6415 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6416 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6417 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6418 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6419 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6420 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6421 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6422 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6423 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6424 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6425 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6426 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6427 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6428 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6429 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
6430 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6431 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6432 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6433 T45, T46, T47, T48, NoneT, NoneT> {
6434 typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6435 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6436 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6437 T42, T43, T44, T45, T46, T47, T48> type;
6439 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6440 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6441 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6442 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6443 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6444 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6445 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6446 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6447 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6448 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6449 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6450 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6451 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6452 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6453 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6454 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
6455 GTEST_TEMPLATE_ T49>
6456 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6457 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6458 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6459 T45, T46, T47, T48, T49, NoneT> {
6460 typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6461 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6462 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6463 T42, T43, T44, T45, T46, T47, T48, T49> type;
6470 template <
typename T>
6472 typedef Types1<T> type;
6475 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6476 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6477 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6478 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6479 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6480 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6481 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6482 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6483 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6484 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
6485 struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6486 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6487 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6488 T44, T45, T46, T47, T48, T49, T50> > {
6489 typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
6490 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6491 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6492 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
6495 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 6500 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ 6510 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) 6511 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar 6514 #define GTEST_STRINGIFY_(name) #name 6516 class ProtocolMessage;
6523 class AssertionResult;
6527 class TestPartResult;
6530 template <
typename T>
6533 namespace internal {
6551 template <
typename T>
6572 #define GTEST_IS_NULL_LITERAL_(x) \ 6573 decltype(::testing::internal::IsNullLiteralHelper(x))::value 6577 const std::string& gtest_msg,
const Message& user_msg);
6579 #if GTEST_HAS_EXCEPTIONS 6590 class
GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
6592 explicit GoogleTestFailureException(
const TestPartResult& failure);
6597 #endif // GTEST_HAS_EXCEPTIONS 6599 namespace edit_distance {
6607 const std::vector<size_t>& left,
const std::vector<size_t>& right);
6611 const std::vector<std::string>& left,
6612 const std::vector<std::string>& right);
6616 const std::vector<std::string>& right,
6617 size_t context = 2);
6627 size_t* total_line_count);
6645 const char* actual_expression,
6648 bool ignoring_case);
6652 const AssertionResult& assertion_result,
6653 const char* expression_text,
6654 const char* actual_predicate_value,
6655 const char* expected_predicate_value);
6686 template <
typename RawType>
6700 std::numeric_limits<RawType>::digits - 1;
6745 return fp.u_.value_;
6754 static RawType
Max();
6788 return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
6794 union FloatingPointUnion {
6814 static Bits SignAndMagnitudeToBiased(
const Bits &sam) {
6826 static Bits DistanceBetweenSignAndMagnitudeNumbers(
const Bits &sam1,
6828 const Bits biased1 = SignAndMagnitudeToBiased(sam1);
6829 const Bits biased2 = SignAndMagnitudeToBiased(sam2);
6830 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
6833 FloatingPointUnion u_;
6856 template <
typename T>
6865 template <
typename T>
6871 template <
typename T>
6906 template <
class TestClass>
6912 #if GTEST_OS_WINDOWS 6918 GTEST_API_ AssertionResult IsHRESULTSuccess(
const char* expr,
6920 GTEST_API_ AssertionResult IsHRESULTFailure(
const char* expr,
6923 #endif // GTEST_OS_WINDOWS 6945 return a == def ? nullptr : a;
6948 template <
typename T>
6956 typename std::conditional<sizeof(T) != 0, ::testing::Test, void>::type;
6965 <<
"Test can not provide both SetUpTestSuite and SetUpTestCase, please " 6966 "make sure there is only one present ";
6968 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
6978 <<
"Test can not provide both TearDownTestSuite and TearDownTestCase," 6979 " please make sure there is only one present ";
6981 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
7004 const char* test_suite_name,
const char* name,
const char* type_param,
7005 const char* value_param, CodeLocation code_location,
7014 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 7022 TypedTestSuitePState() : registered_(false) {}
7027 bool AddTestName(
const char* file,
int line,
const char* case_name,
7028 const char* test_name) {
7031 "%s Test %s must be defined before " 7032 "REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n",
7037 registered_tests_.insert(
7038 ::std::make_pair(test_name, CodeLocation(file, line)));
7042 bool TestExists(
const std::string& test_name)
const {
7043 return registered_tests_.count(test_name) > 0;
7046 const CodeLocation& GetCodeLocation(
const std::string& test_name)
const {
7047 RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);
7055 const char* VerifyRegisteredTestNames(
7056 const char* file,
int line,
const char* registered_tests);
7059 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;
7062 RegisteredTestsMap registered_tests_;
7066 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 7067 using TypedTestCasePState = TypedTestSuitePState;
7068 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 7074 inline const
char* SkipComma(const
char* str) {
7075 const char* comma = strchr(str,
',');
7076 if (comma ==
nullptr) {
7079 while (
IsSpace(*(++comma))) {}
7085 inline std::string GetPrefixUntilComma(
const char* str) {
7086 const char* comma = strchr(str,
',');
7087 return comma ==
nullptr ? str :
std::string(str, comma);
7093 ::std::vector< ::std::string>* dest);
7097 struct DefaultNameGenerator {
7098 template <
typename T>
7104 template <
typename Prov
ided = DefaultNameGenerator>
7105 struct NameGeneratorSelector {
7106 typedef Provided type;
7109 template <
typename NameGenerator>
7110 void GenerateNamesRecursively(Types0, std::vector<std::string>*,
int) {}
7112 template <
typename NameGenerator,
typename Types>
7113 void GenerateNamesRecursively(Types, std::vector<std::string>* result,
int i) {
7114 result->push_back(NameGenerator::template GetName<typename Types::Head>(i));
7115 GenerateNamesRecursively<NameGenerator>(
typename Types::Tail(), result,
7119 template <
typename NameGenerator,
typename Types>
7120 std::vector<std::string> GenerateNames() {
7121 std::vector<std::string> result;
7122 GenerateNamesRecursively<NameGenerator>(Types(), &result, 0);
7133 template <GTEST_TEMPLATE_ Fixture,
class TestSel,
typename Types>
7134 class TypeParameterizedTest {
7140 static bool Register(
const char* prefix,
const CodeLocation& code_location,
7141 const char* case_name,
const char* test_names,
int index,
7142 const std::vector<std::string>& type_names =
7143 GenerateNames<DefaultNameGenerator, Types>()) {
7144 typedef typename Types::Head Type;
7145 typedef Fixture<Type> FixtureClass;
7146 typedef typename GTEST_BIND_(TestSel, Type) TestClass;
7151 (
std::string(prefix) + (prefix[0] ==
'\0' ?
"" :
"/") + case_name +
7152 "/" + type_names[index])
7155 GetTypeName<Type>().c_str(),
7157 code_location, GetTypeId<FixtureClass>(),
7160 new TestFactoryImpl<TestClass>);
7163 return TypeParameterizedTest<Fixture, TestSel,
7164 typename Types::Tail>::Register(prefix,
7174 template <GTEST_TEMPLATE_ Fixture,
class TestSel>
7175 class TypeParameterizedTest<Fixture, TestSel, Types0> {
7177 static bool Register(
const char* ,
const CodeLocation&,
7178 const char* ,
const char* ,
7180 const std::vector<std::string>& =
7181 std::vector<std::string>() ) {
7190 template <GTEST_TEMPLATE_ Fixture,
typename Tests,
typename Types>
7191 class TypeParameterizedTestSuite {
7193 static bool Register(
const char* prefix, CodeLocation code_location,
7194 const TypedTestSuitePState* state,
const char* case_name,
7195 const char* test_names,
7196 const std::vector<std::string>& type_names =
7197 GenerateNames<DefaultNameGenerator, Types>()) {
7199 GetPrefixUntilComma(test_names));
7200 if (!state->TestExists(test_name)) {
7201 fprintf(stderr,
"Failed to get code location for test %s.%s at %s.",
7202 case_name, test_name.c_str(),
7204 code_location.line).c_str());
7208 const CodeLocation& test_location = state->GetCodeLocation(test_name);
7210 typedef typename Tests::Head Head;
7213 TypeParameterizedTest<Fixture, Head, Types>::Register(
7214 prefix, test_location, case_name, test_names, 0, type_names);
7217 return TypeParameterizedTestSuite<Fixture,
typename Tests::Tail,
7218 Types>::Register(prefix, code_location,
7220 SkipComma(test_names),
7226 template <GTEST_TEMPLATE_ Fixture,
typename Types>
7227 class TypeParameterizedTestSuite<Fixture, Templates0, Types> {
7229 static bool Register(
const char* ,
const CodeLocation&,
7230 const TypedTestSuitePState* ,
7231 const char* ,
const char* ,
7232 const std::vector<std::string>& =
7233 std::vector<std::string>() ) {
7238 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P 7251 UnitTest* unit_test,
int skip_count);
7267 operator bool()
const {
return true; }
7295 template <
typename T1,
typename T2>
7298 template <
typename T>
7305 template <
typename T>
7307 template <
typename T>
7312 #define GTEST_REMOVE_REFERENCE_(T) \ 7313 typename ::testing::internal::RemoveReference<T>::type 7318 template <
typename T>
7320 template <
typename T>
7326 template <
typename T,
size_t N>
7333 #define GTEST_REMOVE_CONST_(T) \ 7334 typename ::testing::internal::RemoveConst<T>::type 7337 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ 7338 GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) 7343 template <
typename From,
typename To>
7364 static char Helper(To);
7365 static char (&Helper(...))[2];
7370 #if defined(__BORLANDC__) 7374 static const bool value = __is_convertible(From, To);
7383 #endif // __BORLANDC__ 7385 template <
typename From,
typename To>
7391 template <
typename T>
7394 ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||
7395 ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {
7424 class Iterator = decltype(::std::declval<const C&>().begin()),
7425 class = decltype(::std::declval<const C&>().end()),
7426 class = decltype(++::std::declval<Iterator&>()),
7427 class = decltype(*::std::declval<Iterator>()),
7428 class =
typename C::const_iterator>
7441 template <
typename T>
7444 template <
typename U>
7445 static char test(
typename U::hasher*,
typename U::reverse_iterator*);
7446 template <
typename U>
7447 static int test(
typename U::hasher*, ...);
7448 template <
typename U>
7449 static char test(...);
7452 static const bool value =
sizeof(test<T>(
nullptr,
nullptr)) ==
sizeof(int);
7455 template <
typename T>
7458 template <
typename C,
7459 bool =
sizeof(IsContainerTest<C>(0)) ==
sizeof(
IsContainer)>
7462 template <
typename C>
7469 template <
typename C>
7471 using value_type = decltype(*std::declval<typename C::const_iterator>());
7473 is_same<
typename std::remove_const<
7474 typename std::remove_reference<value_type>::type>
::type,
7484 template <
typename C>
7500 template <
typename T,
typename U>
7501 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs);
7504 template <
typename T,
typename U>
7505 inline bool ArrayEq(
const T& lhs,
const U& rhs) {
return lhs == rhs; }
7508 template <
typename T,
typename U,
size_t N>
7509 inline bool ArrayEq(
const T(&lhs)[N],
const U(&rhs)[N]) {
7516 template <
typename T,
typename U>
7518 for (
size_t i = 0; i !=
size; i++) {
7527 template <
typename Iter,
typename Element>
7529 for (Iter it = begin; it != end; ++it) {
7540 template <
typename T,
typename U>
7544 template <
typename T,
typename U>
7548 template <
typename T,
typename U,
size_t N>
7556 template <
typename T,
typename U>
7558 for (
size_t i = 0; i !=
size; i++) {
7578 template <
typename Element>
7588 InitRef(array,
count);
7593 InitCopy(array,
count);
7598 (this->*rhs.clone_)(rhs.array_, rhs.size_);
7602 if (clone_ != &NativeArray::InitRef)
7607 size_t size()
const {
return size_; }
7622 void InitCopy(
const Element* array,
size_t a_size) {
7623 Element*
const copy =
new Element[a_size];
7627 clone_ = &NativeArray::InitCopy;
7631 void InitRef(
const Element* array,
size_t a_size) {
7634 clone_ = &NativeArray::InitRef;
7637 const Element* array_;
7645 template <
size_t... Is>
7651 template <
bool plus_one,
typename T,
size_t sizeofT>
7653 template <
size_t... I,
size_t sizeofT>
7657 template <
size_t... I,
size_t sizeofT>
7666 :
DoubleSequence<N % 2 == 1, typename MakeIndexSequence<N / 2>::type,
7675 template <
typename T,
size_t,
size_t>
7678 template <
typename T,
size_t I>
7685 template <
size_t N,
typename I,
typename... T>
7688 template <
size_t N,
size_t... I,
typename... T>
7692 template <
typename... T>
7695 template <
typename Derived,
size_t I>
7698 template <
typename... T,
size_t I>
7708 template <
typename Derived,
typename Idx>
7711 template <
size_t... Idx,
typename... T>
7729 template <
typename... T>
7731 :
private FlatTupleBase<FlatTuple<T...>,
7732 typename MakeIndexSequence<sizeof...(T)>::type> {
7733 using Indices =
typename FlatTuple::FlatTupleBase::Indices;
7753 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ 7754 ::testing::internal::AssertHelper(result_type, file, line, message) \ 7755 = ::testing::Message() 7757 #define GTEST_MESSAGE_(message, result_type) \ 7758 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) 7760 #define GTEST_FATAL_FAILURE_(message) \ 7761 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) 7763 #define GTEST_NONFATAL_FAILURE_(message) \ 7764 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) 7766 #define GTEST_SUCCESS_(message) \ 7767 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) 7769 #define GTEST_SKIP_(message) \ 7770 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip) 7775 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ 7776 if (::testing::internal::AlwaysTrue()) { statement; } 7778 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ 7779 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7780 if (::testing::internal::ConstCharPtr gtest_msg = "") { \ 7781 bool gtest_caught_expected = false; \ 7783 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 7785 catch (expected_exception const&) { \ 7786 gtest_caught_expected = true; \ 7790 "Expected: " #statement " throws an exception of type " \ 7791 #expected_exception ".\n Actual: it throws a different type."; \ 7792 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 7794 if (!gtest_caught_expected) { \ 7796 "Expected: " #statement " throws an exception of type " \ 7797 #expected_exception ".\n Actual: it throws nothing."; \ 7798 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 7801 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ 7802 fail(gtest_msg.value) 7804 #define GTEST_TEST_NO_THROW_(statement, fail) \ 7805 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7806 if (::testing::internal::AlwaysTrue()) { \ 7808 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 7811 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ 7814 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ 7815 fail("Expected: " #statement " doesn't throw an exception.\n" \ 7816 " Actual: it throws.") 7818 #define GTEST_TEST_ANY_THROW_(statement, fail) \ 7819 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7820 if (::testing::internal::AlwaysTrue()) { \ 7821 bool gtest_caught_any = false; \ 7823 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 7826 gtest_caught_any = true; \ 7828 if (!gtest_caught_any) { \ 7829 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ 7832 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ 7833 fail("Expected: " #statement " throws an exception.\n" \ 7834 " Actual: it doesn't.") 7840 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ 7841 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7842 if (const ::testing::AssertionResult gtest_ar_ = \ 7843 ::testing::AssertionResult(expression)) \ 7846 fail(::testing::internal::GetBoolAssertionFailureMessage(\ 7847 gtest_ar_, text, #actual, #expected).c_str()) 7849 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ 7850 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 7851 if (::testing::internal::AlwaysTrue()) { \ 7852 ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ 7853 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 7854 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ 7855 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ 7858 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ 7859 fail("Expected: " #statement " doesn't generate new fatal " \ 7860 "failures in the current thread.\n" \ 7861 " Actual: it does.") 7864 #define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 7865 test_suite_name##_##test_name##_Test 7868 #define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \ 7869 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 7870 : public parent_class { \ 7872 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ 7875 virtual void TestBody(); \ 7876 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ 7877 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ 7881 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \ 7882 test_name)::test_info_ = \ 7883 ::testing::internal::MakeAndRegisterTestInfo( \ 7884 #test_suite_name, #test_name, nullptr, nullptr, \ 7885 ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ 7886 ::testing::internal::SuiteApiResolver< \ 7887 parent_class>::GetSetUpCaseOrSuite(), \ 7888 ::testing::internal::SuiteApiResolver< \ 7889 parent_class>::GetTearDownCaseOrSuite(), \ 7890 new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \ 7891 test_suite_name, test_name)>); \ 7892 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() 7902 #if defined(_MSC_VER) 7903 #define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message)) 7904 #elif defined(__GNUC__) 7905 #define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message))) 7907 #define GTEST_INTERNAL_DEPRECATED(message) 7909 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 7947 #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 7948 #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 7985 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 7986 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 8026 #ifndef GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ 8027 #define GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ 8132 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 8133 #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 8135 #include <functional> 8140 #include <type_traits> 8145 #include "absl/strings/string_view.h" 8146 #include "absl/types/optional.h" 8147 #include "absl/types/variant.h" 8148 #endif // GTEST_HAS_ABSL 8154 namespace internal2 {
8160 ::std::ostream* os);
8169 kConvertibleToStringView,
8179 template <
typename T, TypeKind kTypeKind>
8185 reinterpret_cast<const void*>(&value)),
8195 template <
typename T>
8199 std::string pretty_str = value.ShortDebugString();
8201 pretty_str =
"\n" + value.DebugString();
8203 *os << (
"<" + pretty_str +
">");
8207 template <
typename T>
8224 template <
typename T>
8225 class TypeWithoutFormatter<T, kConvertibleToStringView> {
8232 static void PrintValue(
const T& value, ::std::ostream* os);
8260 template <
typename Char,
typename CharTraits,
typename T>
8262 ::std::basic_ostream<Char, CharTraits>& os,
const T& x) {
8271 const T&, absl::string_view>::value
8272 ? kConvertibleToStringView
8288 template <
typename T>
8322 namespace internal {
8339 template <
typename ToPr
int,
typename OtherOperand>
8348 template <
typename ToPr
int,
size_t N,
typename OtherOperand>
8359 #define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \ 8360 template <typename OtherOperand> \ 8361 class FormatForComparison<CharType*, OtherOperand> { \ 8363 static ::std::string Format(CharType* value) { \ 8364 return ::testing::PrintToString(static_cast<const void*>(value)); \ 8373 #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ 8378 #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ 8380 class FormatForComparison<CharType*, OtherStringType> { \ 8382 static ::std::string Format(CharType* value) { \ 8383 return ::testing::PrintToString(value); \ 8390 #if GTEST_HAS_GLOBAL_STRING 8395 #if GTEST_HAS_GLOBAL_WSTRING 8400 #if GTEST_HAS_STD_WSTRING 8405 #undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_ 8415 template <
typename T1,
typename T2>
8417 const T1& value,
const T2& ) {
8428 template <
typename T>
8431 template <
typename T>
8444 template <
typename C>
8446 const C& container, ::std::ostream* os) {
8447 const size_t kMaxCount = 32;
8450 for (
typename C::const_iterator it = container.begin();
8451 it != container.end(); ++it, ++
count) {
8454 if (
count == kMaxCount) {
8477 template <
typename T>
8479 T* p, ::std::ostream* os) {
8489 template <
typename T>
8491 T* p, ::std::ostream* os) {
8498 *os << reinterpret_cast<const void*>(p);
8504 template <
typename T>
8506 const T& value, ::std::ostream* os) {
8521 template <
typename T>
8522 void PrintTo(
const T& value, ::std::ostream* os) {
8544 (
sizeof(IsContainerTest<T>(0)) ==
sizeof(
IsContainer)) &&
8547 : !std::is_pointer<T>::value
8549 : std::is_function<
typename std::remove_pointer<T>::type>::value
8566 PrintTo(static_cast<unsigned char>(c), os);
8571 *os << (x ?
"true" :
"false");
8585 inline void PrintTo(
char* s, ::std::ostream* os) {
8586 PrintTo(ImplicitCast_<const char*>(s), os);
8591 inline void PrintTo(
const signed char* s, ::std::ostream* os) {
8592 PrintTo(ImplicitCast_<const void*>(s), os);
8594 inline void PrintTo(
signed char* s, ::std::ostream* os) {
8595 PrintTo(ImplicitCast_<const void*>(s), os);
8597 inline void PrintTo(
const unsigned char* s, ::std::ostream* os) {
8598 PrintTo(ImplicitCast_<const void*>(s), os);
8600 inline void PrintTo(
unsigned char* s, ::std::ostream* os) {
8601 PrintTo(ImplicitCast_<const void*>(s), os);
8609 #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) 8612 inline void PrintTo(
wchar_t* s, ::std::ostream* os) {
8613 PrintTo(ImplicitCast_<const wchar_t*>(s), os);
8622 template <
typename T>
8625 for (
size_t i = 1; i !=
count; i++) {
8632 #if GTEST_HAS_GLOBAL_STRING 8637 #endif // GTEST_HAS_GLOBAL_STRING 8645 #if GTEST_HAS_GLOBAL_WSTRING 8650 #endif // GTEST_HAS_GLOBAL_WSTRING 8652 #if GTEST_HAS_STD_WSTRING 8657 #endif // GTEST_HAS_STD_WSTRING 8661 inline void PrintTo(absl::string_view sp, ::std::ostream* os) {
8664 #endif // GTEST_HAS_ABSL 8666 inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os <<
"(nullptr)"; }
8668 template <
typename T>
8669 void PrintTo(std::reference_wrapper<T> ref, ::std::ostream* os) {
8676 template <
typename T>
8680 template <
typename T,
size_t I>
8682 ::std::ostream* os) {
8683 PrintTupleTo(t, std::integral_constant<size_t, I - 1>(), os);
8690 std::get<I - 1>(t), os);
8693 template <
typename... Types>
8694 void PrintTo(const ::std::tuple<Types...>& t, ::std::ostream* os) {
8696 PrintTupleTo(t, std::integral_constant<
size_t,
sizeof...(Types)>(), os);
8701 template <
typename T1,
typename T2>
8702 void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
8714 template <
typename T>
8715 class UniversalPrinter {
8724 static
void Print(const T& value, ::std::ostream* os) {
8743 template <
typename T>
8744 class UniversalPrinter<::absl::optional<T>> {
8746 static void Print(const ::absl::optional<T>& value, ::std::ostream* os) {
8759 template <
typename... T>
8760 class UniversalPrinter<::absl::variant<T...>> {
8762 static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) {
8764 absl::visit(Visitor{os}, value);
8770 template <
typename U>
8771 void operator()(
const U& u)
const {
8772 *os <<
"'" << GetTypeName<U>() <<
"' with value ";
8779 #endif // GTEST_HAS_ABSL 8783 template <
typename T>
8789 const size_t kThreshold = 18;
8790 const size_t kChunkSize = 8;
8794 if (len <= kThreshold) {
8806 const char* begin,
size_t len, ::std::ostream* os);
8810 const wchar_t* begin,
size_t len, ::std::ostream* os);
8813 template <
typename T,
size_t N>
8818 static void Print(
const T (&a)[N], ::std::ostream* os) {
8824 template <
typename T>
8831 static
void Print(const T& value, ::std::ostream* os) {
8834 *os <<
"@" <<
reinterpret_cast<const void*
>(&value) <<
" ";
8847 template <
typename T>
8850 static void Print(
const T& value, ::std::ostream* os) {
8854 template <
typename T>
8857 static void Print(
const T& value, ::std::ostream* os) {
8861 template <
typename T,
size_t N>
8864 static void Print(
const T (&value)[N], ::std::ostream* os) {
8871 static void Print(
const char* str, ::std::ostream* os) {
8872 if (str ==
nullptr) {
8882 static void Print(
char* str, ::std::ostream* os) {
8887 #if GTEST_HAS_STD_WSTRING 8891 static void Print(
const wchar_t* str, ::std::ostream* os) {
8892 if (str ==
nullptr) {
8904 static void Print(
wchar_t* str, ::std::ostream* os) {
8909 template <
typename T>
8918 template <
typename T>
8930 template <
typename Tuple>
8933 template <
typename Tuple,
size_t I>
8935 std::integral_constant<size_t, I>,
8939 ::std::stringstream ss;
8941 strings->push_back(ss.str());
8947 template <
typename Tuple>
8951 value, std::integral_constant<
size_t, std::tuple_size<Tuple>::value>(),
8959 namespace internal2 {
8960 template <
typename T>
8962 const T& value, ::std::ostream* os) {
8968 template <
typename T>
8970 ::std::stringstream ss;
9018 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ 9019 #define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ 9021 #endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ 9023 #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ 9047 class MatchResultListener {
9052 explicit MatchResultListener(::std::ostream* os) : stream_(os) {}
9053 virtual ~MatchResultListener() = 0;
9057 template <
typename T>
9058 MatchResultListener&
operator<<(
const T& x) {
9059 if (stream_ !=
nullptr) *stream_ << x;
9064 ::std::ostream* stream() {
return stream_; }
9070 bool IsInterested()
const {
return stream_ !=
nullptr; }
9073 ::std::ostream*
const stream_;
9078 inline MatchResultListener::~MatchResultListener() {
9083 class MatcherDescriberInterface {
9085 virtual ~MatcherDescriberInterface() {}
9092 virtual void DescribeTo(::std::ostream* os)
const = 0;
9100 virtual void DescribeNegationTo(::std::ostream* os)
const {
9108 template <
typename T>
9109 class MatcherInterface :
public MatcherDescriberInterface {
9142 virtual bool MatchAndExplain(T x, MatchResultListener* listener)
const = 0;
9149 namespace internal {
9152 template <
typename T>
9153 class MatcherInterfaceAdapter :
public MatcherInterface<const T&> {
9155 explicit MatcherInterfaceAdapter(
const MatcherInterface<T>* impl)
9157 ~MatcherInterfaceAdapter()
override {
delete impl_; }
9159 void DescribeTo(::std::ostream* os)
const override { impl_->DescribeTo(os); }
9161 void DescribeNegationTo(::std::ostream* os)
const override {
9162 impl_->DescribeNegationTo(os);
9165 bool MatchAndExplain(
const T& x,
9166 MatchResultListener* listener)
const override {
9167 return impl_->MatchAndExplain(x, listener);
9171 const MatcherInterface<T>*
const impl_;
9177 template <
typename A,
typename B>
9178 bool operator()(
const A& a,
const B& b)
const {
return a == b; }
9181 template <
typename A,
typename B>
9182 bool operator()(
const A& a,
const B& b)
const {
return a != b; }
9185 template <
typename A,
typename B>
9186 bool operator()(
const A& a,
const B& b)
const {
return a < b; }
9189 template <
typename A,
typename B>
9190 bool operator()(
const A& a,
const B& b)
const {
return a > b; }
9193 template <
typename A,
typename B>
9194 bool operator()(
const A& a,
const B& b)
const {
return a <= b; }
9197 template <
typename A,
typename B>
9198 bool operator()(
const A& a,
const B& b)
const {
return a >= b; }
9202 class DummyMatchResultListener :
public MatchResultListener {
9204 DummyMatchResultListener() : MatchResultListener(
nullptr) {}
9213 class StreamMatchResultListener :
public MatchResultListener {
9215 explicit StreamMatchResultListener(::std::ostream* os)
9216 : MatchResultListener(os) {}
9225 template <
typename T>
9230 bool MatchAndExplain(
const T& x, MatchResultListener* listener)
const {
9231 return impl_->MatchAndExplain(x, listener);
9235 bool Matches(
const T& x)
const {
9236 DummyMatchResultListener dummy;
9237 return MatchAndExplain(x, &dummy);
9241 void DescribeTo(::std::ostream* os)
const { impl_->DescribeTo(os); }
9244 void DescribeNegationTo(::std::ostream* os)
const {
9245 impl_->DescribeNegationTo(os);
9249 void ExplainMatchResultTo(
const T& x, ::std::ostream* os)
const {
9250 StreamMatchResultListener listener(os);
9251 MatchAndExplain(x, &listener);
9257 const MatcherDescriberInterface* GetDescriber()
const {
9265 explicit MatcherBase(
const MatcherInterface<const T&>* impl) : impl_(impl) {}
9267 template <
typename U>
9268 explicit MatcherBase(
9269 const MatcherInterface<U>* impl,
9270 typename internal::EnableIf<
9271 !internal::IsSame<U, const U&>::value>::type* =
nullptr)
9272 : impl_(
new internal::MatcherInterfaceAdapter<U>(impl)) {}
9274 virtual ~MatcherBase() {}
9277 std::shared_ptr<const MatcherInterface<const T&>> impl_;
9286 template <
typename T>
9287 class Matcher :
public internal::MatcherBase<T> {
9292 explicit Matcher() {}
9295 explicit Matcher(
const MatcherInterface<const T&>* impl)
9296 : internal::MatcherBase<T>(impl) {}
9298 template <
typename U>
9299 explicit Matcher(
const MatcherInterface<U>* impl,
9300 typename internal::EnableIf<
9301 !internal::IsSame<U, const U&>::value>::type* =
nullptr)
9302 : internal::MatcherBase<T>(impl) {}
9314 :
public internal::MatcherBase<const std::string&> {
9318 explicit Matcher(
const MatcherInterface<const std::string&>* impl)
9319 : internal::MatcherBase<const std::string&>(impl) {}
9325 #if GTEST_HAS_GLOBAL_STRING 9329 #endif // GTEST_HAS_GLOBAL_STRING 9332 Matcher(
const char* s);
9337 :
public internal::MatcherBase<std::string> {
9341 explicit Matcher(
const MatcherInterface<const std::string&>* impl)
9342 : internal::MatcherBase<std::string>(impl) {}
9343 explicit Matcher(
const MatcherInterface<std::string>* impl)
9344 : internal::MatcherBase<std::string>(impl) {}
9350 #if GTEST_HAS_GLOBAL_STRING 9354 #endif // GTEST_HAS_GLOBAL_STRING 9357 Matcher(
const char* s);
9360 #if GTEST_HAS_GLOBAL_STRING 9366 :
public internal::MatcherBase<const ::string&> {
9370 explicit Matcher(
const MatcherInterface<const ::string&>* impl)
9371 : internal::MatcherBase<const ::string&>(impl) {}
9382 Matcher(
const char* s);
9387 :
public internal::MatcherBase< ::string> {
9391 explicit Matcher(
const MatcherInterface<const ::string&>* impl)
9392 : internal::MatcherBase< ::string>(impl) {}
9393 explicit Matcher(
const MatcherInterface< ::string>* impl)
9394 : internal::MatcherBase< ::string>(impl) {}
9405 Matcher(
const char* s);
9407 #endif // GTEST_HAS_GLOBAL_STRING 9414 class GTEST_API_ Matcher<const absl::string_view&>
9415 :
public internal::MatcherBase<const absl::string_view&> {
9419 explicit Matcher(
const MatcherInterface<const absl::string_view&>* impl)
9420 : internal::MatcherBase<const absl::string_view&>(impl) {}
9426 #if GTEST_HAS_GLOBAL_STRING 9430 #endif // GTEST_HAS_GLOBAL_STRING 9433 Matcher(
const char* s);
9436 Matcher(absl::string_view s);
9441 :
public internal::MatcherBase<absl::string_view> {
9445 explicit Matcher(
const MatcherInterface<const absl::string_view&>* impl)
9446 : internal::MatcherBase<absl::string_view>(impl) {}
9447 explicit Matcher(
const MatcherInterface<absl::string_view>* impl)
9448 : internal::MatcherBase<absl::string_view>(impl) {}
9454 #if GTEST_HAS_GLOBAL_STRING 9458 #endif // GTEST_HAS_GLOBAL_STRING 9461 Matcher(
const char* s);
9464 Matcher(absl::string_view s);
9466 #endif // GTEST_HAS_ABSL 9469 template <
typename T>
9470 std::ostream& operator<<(std::ostream& os, const Matcher<T>& matcher) {
9471 matcher.DescribeTo(&os);
9487 template <
class Impl>
9488 class PolymorphicMatcher {
9490 explicit PolymorphicMatcher(
const Impl& an_impl) : impl_(an_impl) {}
9494 Impl& mutable_impl() {
return impl_; }
9498 const Impl& impl()
const {
return impl_; }
9500 template <
typename T>
9501 operator Matcher<T>()
const {
9502 return Matcher<T>(
new MonomorphicImpl<const T&>(impl_));
9506 template <
typename T>
9507 class MonomorphicImpl :
public MatcherInterface<T> {
9509 explicit MonomorphicImpl(
const Impl& impl) : impl_(impl) {}
9511 virtual void DescribeTo(::std::ostream* os)
const { impl_.DescribeTo(os); }
9513 virtual void DescribeNegationTo(::std::ostream* os)
const {
9514 impl_.DescribeNegationTo(os);
9517 virtual bool MatchAndExplain(T x, MatchResultListener* listener)
const {
9518 return impl_.MatchAndExplain(x, listener);
9539 template <
typename T>
9540 inline Matcher<T> MakeMatcher(
const MatcherInterface<T>* impl) {
9541 return Matcher<T>(impl);
9551 template <
class Impl>
9552 inline PolymorphicMatcher<Impl> MakePolymorphicMatcher(
const Impl& impl) {
9553 return PolymorphicMatcher<Impl>(impl);
9556 namespace internal {
9567 template <
typename D,
typename Rhs,
typename Op>
9568 class ComparisonBase {
9570 explicit ComparisonBase(
const Rhs& rhs) : rhs_(rhs) {}
9571 template <
typename Lhs>
9572 operator Matcher<Lhs>()
const {
9573 return MakeMatcher(
new Impl<Lhs>(rhs_));
9577 template <
typename Lhs>
9578 class Impl :
public MatcherInterface<Lhs> {
9580 explicit Impl(
const Rhs& rhs) : rhs_(rhs) {}
9581 bool MatchAndExplain(Lhs lhs,
9582 MatchResultListener* )
const override {
9583 return Op()(lhs, rhs_);
9585 void DescribeTo(::std::ostream* os)
const override {
9586 *os << D::Desc() <<
" ";
9589 void DescribeNegationTo(::std::ostream* os)
const override {
9590 *os << D::NegatedDesc() <<
" ";
9602 template <
typename Rhs>
9603 class EqMatcher :
public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> {
9605 explicit EqMatcher(
const Rhs& rhs)
9606 : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) { }
9607 static const char* Desc() {
return "is equal to"; }
9608 static const char* NegatedDesc() {
return "isn't equal to"; }
9610 template <
typename Rhs>
9611 class NeMatcher :
public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> {
9613 explicit NeMatcher(
const Rhs& rhs)
9614 : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) { }
9615 static const char* Desc() {
return "isn't equal to"; }
9616 static const char* NegatedDesc() {
return "is equal to"; }
9618 template <
typename Rhs>
9619 class LtMatcher :
public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> {
9621 explicit LtMatcher(
const Rhs& rhs)
9622 : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) { }
9623 static const char* Desc() {
return "is <"; }
9624 static const char* NegatedDesc() {
return "isn't <"; }
9626 template <
typename Rhs>
9627 class GtMatcher :
public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> {
9629 explicit GtMatcher(
const Rhs& rhs)
9630 : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) { }
9631 static const char* Desc() {
return "is >"; }
9632 static const char* NegatedDesc() {
return "isn't >"; }
9634 template <
typename Rhs>
9635 class LeMatcher :
public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> {
9637 explicit LeMatcher(
const Rhs& rhs)
9638 : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) { }
9639 static const char* Desc() {
return "is <="; }
9640 static const char* NegatedDesc() {
return "isn't <="; }
9642 template <
typename Rhs>
9643 class GeMatcher :
public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> {
9645 explicit GeMatcher(
const Rhs& rhs)
9646 : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) { }
9647 static const char* Desc() {
return "is >="; }
9648 static const char* NegatedDesc() {
return "isn't >="; }
9654 class MatchesRegexMatcher {
9656 MatchesRegexMatcher(
const RE* regex,
bool full_match)
9657 : regex_(regex), full_match_(full_match) {}
9660 bool MatchAndExplain(
const absl::string_view& s,
9661 MatchResultListener* listener)
const {
9662 return MatchAndExplain(
string(s), listener);
9664 #endif // GTEST_HAS_ABSL 9671 template <
typename CharType>
9672 bool MatchAndExplain(CharType* s, MatchResultListener* listener)
const {
9673 return s !=
nullptr && MatchAndExplain(
std::string(s), listener);
9680 template <
class MatcheeStringType>
9681 bool MatchAndExplain(
const MatcheeStringType& s,
9682 MatchResultListener* )
const {
9684 return full_match_ ? RE::FullMatch(s2, *regex_)
9685 : RE::PartialMatch(s2, *regex_);
9688 void DescribeTo(::std::ostream* os)
const {
9689 *os << (full_match_ ?
"matches" :
"contains") <<
" regular expression ";
9690 UniversalPrinter<std::string>::Print(regex_->pattern(), os);
9693 void DescribeNegationTo(::std::ostream* os)
const {
9694 *os <<
"doesn't " << (full_match_ ?
"match" :
"contain")
9695 <<
" regular expression ";
9696 UniversalPrinter<std::string>::Print(regex_->pattern(), os);
9700 const std::shared_ptr<const RE> regex_;
9701 const bool full_match_;
9709 inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
9710 const internal::RE* regex) {
9711 return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex,
true));
9713 inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
9715 return MatchesRegex(
new internal::RE(regex));
9720 inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
9721 const internal::RE* regex) {
9722 return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex,
false));
9724 inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
9726 return ContainsRegex(
new internal::RE(regex));
9732 template <
typename T>
9733 inline internal::EqMatcher<T> Eq(T x) {
return internal::EqMatcher<T>(x); }
9737 template <
typename T>
9738 Matcher<T>::Matcher(T value) { *
this = Eq(value); }
9752 template <
typename Lhs,
typename Rhs>
9753 inline Matcher<Lhs> TypedEq(
const Rhs& rhs) {
return Eq(rhs); }
9756 template <
typename Rhs>
9757 inline internal::GeMatcher<Rhs> Ge(Rhs x) {
9758 return internal::GeMatcher<Rhs>(x);
9762 template <
typename Rhs>
9763 inline internal::GtMatcher<Rhs> Gt(Rhs x) {
9764 return internal::GtMatcher<Rhs>(x);
9768 template <
typename Rhs>
9769 inline internal::LeMatcher<Rhs> Le(Rhs x) {
9770 return internal::LeMatcher<Rhs>(x);
9774 template <
typename Rhs>
9775 inline internal::LtMatcher<Rhs> Lt(Rhs x) {
9776 return internal::LtMatcher<Rhs>(x);
9780 template <
typename Rhs>
9781 inline internal::NeMatcher<Rhs> Ne(Rhs x) {
9782 return internal::NeMatcher<Rhs>(x);
9788 #endif // GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ 9794 namespace internal {
9799 const char kDeathTestStyleFlag[] =
"death_test_style";
9800 const char kDeathTestUseFork[] =
"death_test_use_fork";
9801 const char kInternalRunDeathTestFlag[] =
"internal_run_death_test";
9803 #if GTEST_HAS_DEATH_TEST 9831 static bool Create(
const char* statement, Matcher<const std::string&> matcher,
9832 const char* file,
int line, DeathTest** test);
9834 virtual ~DeathTest() { }
9837 class ReturnSentinel {
9839 explicit ReturnSentinel(DeathTest* test) : test_(test) { }
9840 ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
9842 DeathTest*
const test_;
9851 enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
9855 TEST_ENCOUNTERED_RETURN_STATEMENT,
9856 TEST_THREW_EXCEPTION,
9861 virtual TestRole AssumeRole() = 0;
9864 virtual int Wait() = 0;
9873 virtual bool Passed(
bool exit_status_ok) = 0;
9876 virtual void Abort(AbortReason reason) = 0;
9880 static const char* LastMessage();
9882 static void set_last_death_test_message(
const std::string& message);
9894 class DeathTestFactory {
9896 virtual ~DeathTestFactory() { }
9897 virtual bool Create(
const char* statement,
9898 Matcher<const std::string&> matcher,
const char* file,
9899 int line, DeathTest** test) = 0;
9903 class DefaultDeathTestFactory :
public DeathTestFactory {
9905 bool Create(
const char* statement, Matcher<const std::string&> matcher,
9906 const char* file,
int line, DeathTest** test)
override;
9911 GTEST_API_ bool ExitedUnsuccessfully(
int exit_status);
9916 inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9918 return ContainsRegex(regex.
pattern());
9920 inline Matcher<const ::std::string&> MakeDeathTestMatcher(
const char* regex) {
9921 return ContainsRegex(regex);
9923 inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9925 return ContainsRegex(regex);
9927 #if GTEST_HAS_GLOBAL_STRING 9928 inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9930 return ContainsRegex(regex);
9936 inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9937 Matcher<const ::std::string&> matcher) {
9943 # if GTEST_HAS_EXCEPTIONS 9944 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ 9946 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 9947 } catch (const ::std::exception& gtest_exception) { \ 9950 "\n%s: Caught std::exception-derived exception escaping the " \ 9951 "death test statement. Exception message: %s\n", \ 9952 ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ 9953 gtest_exception.what()); \ 9955 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ 9957 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ 9961 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ 9962 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) 9968 #define GTEST_DEATH_TEST_(statement, predicate, regex_or_matcher, fail) \ 9969 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 9970 if (::testing::internal::AlwaysTrue()) { \ 9971 ::testing::internal::DeathTest* gtest_dt; \ 9972 if (!::testing::internal::DeathTest::Create( \ 9974 ::testing::internal::MakeDeathTestMatcher(regex_or_matcher), \ 9975 __FILE__, __LINE__, >est_dt)) { \ 9976 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 9978 if (gtest_dt != nullptr) { \ 9979 std::unique_ptr< ::testing::internal::DeathTest> gtest_dt_ptr(gtest_dt); \ 9980 switch (gtest_dt->AssumeRole()) { \ 9981 case ::testing::internal::DeathTest::OVERSEE_TEST: \ 9982 if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ 9983 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ 9986 case ::testing::internal::DeathTest::EXECUTE_TEST: { \ 9987 ::testing::internal::DeathTest::ReturnSentinel gtest_sentinel( \ 9989 GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ 9990 gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ 9998 GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__) \ 9999 : fail(::testing::internal::DeathTest::LastMessage()) 10008 #define GTEST_EXECUTE_STATEMENT_(statement, regex_or_matcher) \ 10009 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 10010 if (::testing::internal::AlwaysTrue()) { \ 10011 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 10012 } else if (!::testing::internal::AlwaysTrue()) { \ 10013 ::testing::internal::MakeDeathTestMatcher(regex_or_matcher); \ 10015 ::testing::Message() 10020 class InternalRunDeathTestFlag {
10022 InternalRunDeathTestFlag(
const std::string& a_file,
10026 : file_(a_file), line_(a_line),
index_(an_index),
10027 write_fd_(a_write_fd) {}
10029 ~InternalRunDeathTestFlag() {
10030 if (write_fd_ >= 0)
10034 const std::string& file()
const {
return file_; }
10035 int line()
const {
return line_; }
10036 int index()
const {
return index_; }
10037 int write_fd()
const {
return write_fd_; }
10051 InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
10053 #endif // GTEST_HAS_DEATH_TEST 10058 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ 10069 #if GTEST_HAS_DEATH_TEST 10071 namespace internal {
10185 # define ASSERT_EXIT(statement, predicate, regex) \ 10186 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) 10190 # define EXPECT_EXIT(statement, predicate, regex) \ 10191 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) 10196 # define ASSERT_DEATH(statement, regex) \ 10197 ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) 10201 # define EXPECT_DEATH(statement, regex) \ 10202 EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) 10209 explicit ExitedWithCode(
int exit_code);
10210 bool operator()(
int exit_status)
const;
10213 void operator=(
const ExitedWithCode& other);
10215 const int exit_code_;
10218 # if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA 10224 explicit KilledBySignal(
int signum);
10225 bool operator()(
int exit_status)
const;
10229 # endif // !GTEST_OS_WINDOWS 10276 # define EXPECT_DEBUG_DEATH(statement, regex) \ 10277 GTEST_EXECUTE_STATEMENT_(statement, regex) 10279 # define ASSERT_DEBUG_DEATH(statement, regex) \ 10280 GTEST_EXECUTE_STATEMENT_(statement, regex) 10284 # define EXPECT_DEBUG_DEATH(statement, regex) \ 10285 EXPECT_DEATH(statement, regex) 10287 # define ASSERT_DEBUG_DEATH(statement, regex) \ 10288 ASSERT_DEATH(statement, regex) 10290 # endif // NDEBUG for EXPECT_DEBUG_DEATH 10291 #endif // GTEST_HAS_DEATH_TEST 10328 # define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator) \ 10329 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 10330 if (::testing::internal::AlwaysTrue()) { \ 10331 GTEST_LOG_(WARNING) \ 10332 << "Death tests are not supported on this platform.\n" \ 10333 << "Statement '" #statement "' cannot be verified."; \ 10334 } else if (::testing::internal::AlwaysFalse()) { \ 10335 ::testing::internal::RE::PartialMatch(".*", (regex)); \ 10336 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 10339 ::testing::Message() 10346 #if GTEST_HAS_DEATH_TEST 10347 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ 10348 EXPECT_DEATH(statement, regex) 10349 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ 10350 ASSERT_DEATH(statement, regex) 10352 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ 10353 GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, ) 10354 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ 10355 GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return) 10360 #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ 10400 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 10401 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 10427 TEST_P(FooTest, DoesBlah) {
10434 TEST_P(FooTest, HasBlahBlah) {
10464 Values(
"meeny",
"miny",
"moe"));
10485 const char* pets[] = {
"cat",
"dog"};
10530 TEST_F(BaseTest, HasFoo) {
10534 TEST_P(DerivedTest, DoesBlah) {
10577 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 10578 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 10582 #include <iterator> 10593 template <
class ParamType>
10605 template <
class ParamType>
10611 namespace internal {
10621 CodeLocation code_location);
10628 template <
typename T>
10648 virtual const T*
Current()
const = 0;
10658 template <
typename T>
10668 if (
this != &other)
10669 impl_.reset(other.impl_->Clone());
10687 return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);
10690 return !(*
this == other);
10696 std::unique_ptr<ParamIteratorInterface<T> > impl_;
10701 template <
typename T>
10702 class ParamGeneratorInterface {
10718 template<
typename T>
10719 class ParamGenerator {
10727 impl_ = other.impl_;
10735 std::shared_ptr<const ParamGeneratorInterface<T> > impl_;
10742 template <
typename T,
typename IncrementT>
10746 : begin_(begin), end_(end),
10747 step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}
10751 return new Iterator(
this, begin_, 0, step_);
10754 return new Iterator(
this, end_, end_index_, step_);
10762 : base_(base), value_(value),
index_(index), step_(step) {}
10763 ~Iterator()
override {}
10765 const ParamGeneratorInterface<T>* BaseGenerator()
const override {
10768 void Advance()
override {
10769 value_ =
static_cast<T
>(value_ + step_);
10772 ParamIteratorInterface<T>* Clone()
const override {
10773 return new Iterator(*
this);
10775 const T* Current()
const override {
return &value_; }
10776 bool Equals(
const ParamIteratorInterface<T>& other)
const override {
10779 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10780 <<
"The program attempted to compare iterators " 10781 <<
"from different generators." << std::endl;
10782 const int other_index =
10783 CheckedDowncastToActualType<const Iterator>(&other)->
index_;
10784 return index_ == other_index;
10788 Iterator(
const Iterator& other)
10789 : ParamIteratorInterface<T>(),
10790 base_(other.base_), value_(other.value_),
index_(other.
index_),
10791 step_(other.step_) {}
10794 void operator=(
const Iterator& other);
10796 const ParamGeneratorInterface<T>*
const base_;
10799 const IncrementT step_;
10802 static int CalculateEndIndex(
const T& begin,
10804 const IncrementT& step) {
10806 for (T i = begin; i < end; i = static_cast<T>(i + step))
10816 const IncrementT step_;
10819 const int end_index_;
10827 template <
typename T>
10830 template <
typename ForwardIterator>
10832 : container_(begin, end) {}
10836 return new Iterator(
this, container_.begin());
10839 return new Iterator(
this, container_.end());
10843 typedef typename ::std::vector<T> ContainerType;
10848 typename ContainerType::const_iterator iterator)
10849 : base_(base), iterator_(iterator) {}
10850 ~Iterator()
override {}
10852 const ParamGeneratorInterface<T>* BaseGenerator()
const override {
10855 void Advance()
override {
10859 ParamIteratorInterface<T>* Clone()
const override {
10860 return new Iterator(*
this);
10869 const T* Current()
const override {
10870 if (value_.get() ==
nullptr) value_.reset(
new T(*iterator_));
10871 return value_.get();
10873 bool Equals(
const ParamIteratorInterface<T>& other)
const override {
10876 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10877 <<
"The program attempted to compare iterators " 10878 <<
"from different generators." << std::endl;
10879 return iterator_ ==
10880 CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
10884 Iterator(
const Iterator& other)
10887 : ParamIteratorInterface<T>(),
10888 base_(other.base_),
10889 iterator_(other.iterator_) {}
10891 const ParamGeneratorInterface<T>*
const base_;
10892 typename ContainerType::const_iterator iterator_;
10898 mutable std::unique_ptr<const T> value_;
10904 const ContainerType container_;
10911 template <
class ParamType>
10914 name_stream << info.
index;
10923 template <
class ParamType,
class ParamNameGenFunctor>
10928 template <
class ParamType>
10933 template <
class ParamType>
10942 template <
class TestClass>
10947 parameter_(parameter) {}
10949 TestClass::SetParam(¶meter_);
10950 return new TestClass();
10963 template <
class ParamType>
10979 template <
class TestSuite>
11033 template <
class TestSuite>
11046 : test_suite_name_(name), code_location_(code_location) {}
11050 return test_suite_name_;
11062 tests_.push_back(std::shared_ptr<TestInfo>(
11063 new TestInfo(test_suite_name, test_base_name, meta_factory)));
11068 GeneratorCreationFunc* func,
11070 const char* file,
int line) {
11071 instantiations_.push_back(
11072 InstantiationInfo(instantiation_name, func, name_func, file, line));
11081 for (
typename TestInfoContainer::iterator test_it = tests_.begin();
11082 test_it != tests_.end(); ++test_it) {
11083 std::shared_ptr<TestInfo> test_info = *test_it;
11084 for (
typename InstantiationContainer::iterator gen_it =
11085 instantiations_.begin(); gen_it != instantiations_.end();
11087 const std::string& instantiation_name = gen_it->name;
11090 const char* file = gen_it->file;
11091 int line = gen_it->line;
11094 if ( !instantiation_name.empty() )
11095 test_suite_name = instantiation_name +
"/";
11096 test_suite_name += test_info->test_suite_base_name;
11099 std::set<std::string> test_param_names;
11102 param_it != generator.end(); ++param_it, ++i) {
11109 <<
"Parameterized test name '" << param_name
11110 <<
"' is invalid, in " << file
11111 <<
" line " << line << std::endl;
11114 <<
"Duplicate parameterized test name '" << param_name
11115 <<
"', in " << file <<
" line " << line << std::endl;
11117 test_param_names.insert(param_name);
11119 test_name_stream << test_info->test_base_name <<
"/" << param_name;
11121 test_suite_name.c_str(), test_name_stream.
GetString().c_str(),
11127 test_info->test_meta_factory->CreateTestFactory(*param_it));
11137 TestInfo(
const char* a_test_suite_base_name,
const char* a_test_base_name,
11139 : test_suite_base_name(a_test_suite_base_name),
11140 test_base_name(a_test_base_name),
11141 test_meta_factory(a_test_meta_factory) {}
11145 const std::unique_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
11147 using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo> >;
11151 struct InstantiationInfo {
11153 GeneratorCreationFunc* generator_in,
11155 const char* file_in,
11158 generator(generator_in),
11159 name_func(name_func_in),
11164 GeneratorCreationFunc* generator;
11169 typedef ::std::vector<InstantiationInfo> InstantiationContainer;
11171 static bool IsValidParamName(
const std::string& name) {
11177 for (std::string::size_type index = 0; index < name.size(); ++index) {
11178 if (!isalnum(name[index]) && name[index] !=
'_')
11186 CodeLocation code_location_;
11187 TestInfoContainer tests_;
11188 InstantiationContainer instantiations_;
11194 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 11195 template <
class TestCase>
11197 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 11209 for (
auto& test_suite_info : test_suite_infos_) {
11210 delete test_suite_info;
11216 template <
class TestSuite>
11218 const char* test_suite_name,
CodeLocation code_location) {
11220 for (
auto& test_suite_info : test_suite_infos_) {
11221 if (test_suite_info->GetTestSuiteName() == test_suite_name) {
11222 if (test_suite_info->GetTestSuiteTypeId() != GetTypeId<TestSuite>()) {
11238 if (typed_test_info ==
nullptr) {
11240 test_suite_name, code_location);
11241 test_suite_infos_.push_back(typed_test_info);
11243 return typed_test_info;
11246 for (
auto& test_suite_info : test_suite_infos_) {
11247 test_suite_info->RegisterTests();
11251 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 11252 template <
class TestCase>
11254 const char* test_case_name,
CodeLocation code_location) {
11255 return GetTestSuitePatternHolder<TestCase>(test_case_name, code_location);
11258 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 11261 using TestSuiteInfoContainer = ::std::vector<ParameterizedTestSuiteInfoBase*>;
11263 TestSuiteInfoContainer test_suite_infos_;
11272 template <
class Container>
11273 internal::ParamGenerator<typename Container::value_type>
ValuesIn(
11274 const Container& container);
11276 namespace internal {
11279 template <
typename... Ts>
11284 template <
typename T>
11290 template <
typename T,
size_t... I>
11292 return std::vector<T>{
static_cast<T
>(v_.template Get<I>())...};
11295 FlatTuple<Ts...> v_;
11301 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ 11348 #include <assert.h> 11352 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 11353 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 11358 namespace internal {
11364 template <
typename T1,
typename T2>
11372 : g1_(g1), g2_(g2) {}
11376 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin());
11379 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end());
11391 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
11392 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
11393 ComputeCurrentValue();
11395 ~Iterator()
override {}
11397 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
11402 void Advance()
override {
11405 if (current2_ == end2_) {
11406 current2_ = begin2_;
11409 ComputeCurrentValue();
11411 ParamIteratorInterface<ParamType>* Clone()
const override {
11412 return new Iterator(*
this);
11414 const ParamType* Current()
const override {
return current_value_.get(); }
11415 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
11418 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11419 <<
"The program attempted to compare iterators " 11420 <<
"from different generators." << std::endl;
11421 const Iterator* typed_other =
11422 CheckedDowncastToActualType<const Iterator>(&other);
11426 return (AtEnd() && typed_other->AtEnd()) ||
11428 current1_ == typed_other->current1_ &&
11429 current2_ == typed_other->current2_);
11433 Iterator(
const Iterator& other)
11434 : base_(other.base_),
11435 begin1_(other.begin1_),
11436 end1_(other.end1_),
11437 current1_(other.current1_),
11438 begin2_(other.begin2_),
11439 end2_(other.end2_),
11440 current2_(other.current2_) {
11441 ComputeCurrentValue();
11444 void ComputeCurrentValue() {
11446 current_value_.reset(
new ParamType(*current1_, *current2_));
11448 bool AtEnd()
const {
11452 current1_ == end1_ ||
11453 current2_ == end2_;
11457 void operator=(
const Iterator& other);
11459 const ParamGeneratorInterface<ParamType>*
const base_;
11468 std::shared_ptr<ParamType> current_value_;
11474 const ParamGenerator<T1> g1_;
11475 const ParamGenerator<T2> g2_;
11479 template <
typename T1,
typename T2,
typename T3>
11487 : g1_(g1), g2_(g2), g3_(g3) {}
11491 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
11495 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end());
11509 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
11510 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
11511 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
11512 ComputeCurrentValue();
11514 ~Iterator()
override {}
11516 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
11521 void Advance()
override {
11524 if (current3_ == end3_) {
11525 current3_ = begin3_;
11528 if (current2_ == end2_) {
11529 current2_ = begin2_;
11532 ComputeCurrentValue();
11534 ParamIteratorInterface<ParamType>* Clone()
const override {
11535 return new Iterator(*
this);
11537 const ParamType* Current()
const override {
return current_value_.get(); }
11538 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
11541 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11542 <<
"The program attempted to compare iterators " 11543 <<
"from different generators." << std::endl;
11544 const Iterator* typed_other =
11545 CheckedDowncastToActualType<const Iterator>(&other);
11549 return (AtEnd() && typed_other->AtEnd()) ||
11551 current1_ == typed_other->current1_ &&
11552 current2_ == typed_other->current2_ &&
11553 current3_ == typed_other->current3_);
11557 Iterator(
const Iterator& other)
11558 : base_(other.base_),
11559 begin1_(other.begin1_),
11560 end1_(other.end1_),
11561 current1_(other.current1_),
11562 begin2_(other.begin2_),
11563 end2_(other.end2_),
11564 current2_(other.current2_),
11565 begin3_(other.begin3_),
11566 end3_(other.end3_),
11567 current3_(other.current3_) {
11568 ComputeCurrentValue();
11571 void ComputeCurrentValue() {
11573 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_));
11575 bool AtEnd()
const {
11579 current1_ == end1_ ||
11580 current2_ == end2_ ||
11581 current3_ == end3_;
11585 void operator=(
const Iterator& other);
11587 const ParamGeneratorInterface<ParamType>*
const base_;
11599 std::shared_ptr<ParamType> current_value_;
11605 const ParamGenerator<T1> g1_;
11606 const ParamGenerator<T2> g2_;
11607 const ParamGenerator<T3> g3_;
11611 template <
typename T1,
typename T2,
typename T3,
typename T4>
11620 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
11624 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
11628 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
11645 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
11646 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
11647 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
11648 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
11649 ComputeCurrentValue();
11651 ~Iterator()
override {}
11653 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
11658 void Advance()
override {
11661 if (current4_ == end4_) {
11662 current4_ = begin4_;
11665 if (current3_ == end3_) {
11666 current3_ = begin3_;
11669 if (current2_ == end2_) {
11670 current2_ = begin2_;
11673 ComputeCurrentValue();
11675 ParamIteratorInterface<ParamType>* Clone()
const override {
11676 return new Iterator(*
this);
11678 const ParamType* Current()
const override {
return current_value_.get(); }
11679 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
11682 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11683 <<
"The program attempted to compare iterators " 11684 <<
"from different generators." << std::endl;
11685 const Iterator* typed_other =
11686 CheckedDowncastToActualType<const Iterator>(&other);
11690 return (AtEnd() && typed_other->AtEnd()) ||
11692 current1_ == typed_other->current1_ &&
11693 current2_ == typed_other->current2_ &&
11694 current3_ == typed_other->current3_ &&
11695 current4_ == typed_other->current4_);
11699 Iterator(
const Iterator& other)
11700 : base_(other.base_),
11701 begin1_(other.begin1_),
11702 end1_(other.end1_),
11703 current1_(other.current1_),
11704 begin2_(other.begin2_),
11705 end2_(other.end2_),
11706 current2_(other.current2_),
11707 begin3_(other.begin3_),
11708 end3_(other.end3_),
11709 current3_(other.current3_),
11710 begin4_(other.begin4_),
11711 end4_(other.end4_),
11712 current4_(other.current4_) {
11713 ComputeCurrentValue();
11716 void ComputeCurrentValue() {
11718 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
11721 bool AtEnd()
const {
11725 current1_ == end1_ ||
11726 current2_ == end2_ ||
11727 current3_ == end3_ ||
11728 current4_ == end4_;
11732 void operator=(
const Iterator& other);
11734 const ParamGeneratorInterface<ParamType>*
const base_;
11749 std::shared_ptr<ParamType> current_value_;
11755 const ParamGenerator<T1> g1_;
11756 const ParamGenerator<T2> g2_;
11757 const ParamGenerator<T3> g3_;
11758 const ParamGenerator<T4> g4_;
11762 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
11771 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
11775 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
11779 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
11780 g4_, g4_.
end(), g5_, g5_.
end());
11798 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
11799 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
11800 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
11801 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
11802 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
11803 ComputeCurrentValue();
11805 ~Iterator()
override {}
11807 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
11812 void Advance()
override {
11815 if (current5_ == end5_) {
11816 current5_ = begin5_;
11819 if (current4_ == end4_) {
11820 current4_ = begin4_;
11823 if (current3_ == end3_) {
11824 current3_ = begin3_;
11827 if (current2_ == end2_) {
11828 current2_ = begin2_;
11831 ComputeCurrentValue();
11833 ParamIteratorInterface<ParamType>* Clone()
const override {
11834 return new Iterator(*
this);
11836 const ParamType* Current()
const override {
return current_value_.get(); }
11837 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
11840 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11841 <<
"The program attempted to compare iterators " 11842 <<
"from different generators." << std::endl;
11843 const Iterator* typed_other =
11844 CheckedDowncastToActualType<const Iterator>(&other);
11848 return (AtEnd() && typed_other->AtEnd()) ||
11850 current1_ == typed_other->current1_ &&
11851 current2_ == typed_other->current2_ &&
11852 current3_ == typed_other->current3_ &&
11853 current4_ == typed_other->current4_ &&
11854 current5_ == typed_other->current5_);
11858 Iterator(
const Iterator& other)
11859 : base_(other.base_),
11860 begin1_(other.begin1_),
11861 end1_(other.end1_),
11862 current1_(other.current1_),
11863 begin2_(other.begin2_),
11864 end2_(other.end2_),
11865 current2_(other.current2_),
11866 begin3_(other.begin3_),
11867 end3_(other.end3_),
11868 current3_(other.current3_),
11869 begin4_(other.begin4_),
11870 end4_(other.end4_),
11871 current4_(other.current4_),
11872 begin5_(other.begin5_),
11873 end5_(other.end5_),
11874 current5_(other.current5_) {
11875 ComputeCurrentValue();
11878 void ComputeCurrentValue() {
11880 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
11881 *current4_, *current5_));
11883 bool AtEnd()
const {
11887 current1_ == end1_ ||
11888 current2_ == end2_ ||
11889 current3_ == end3_ ||
11890 current4_ == end4_ ||
11891 current5_ == end5_;
11895 void operator=(
const Iterator& other);
11897 const ParamGeneratorInterface<ParamType>*
const base_;
11915 std::shared_ptr<ParamType> current_value_;
11921 const ParamGenerator<T1> g1_;
11922 const ParamGenerator<T2> g2_;
11923 const ParamGenerator<T3> g3_;
11924 const ParamGenerator<T4> g4_;
11925 const ParamGenerator<T5> g5_;
11929 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11940 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
11944 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
11948 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
11949 g4_, g4_.
end(), g5_, g5_.
end(), g6_, g6_.
end());
11969 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
11970 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
11971 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
11972 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
11973 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
11974 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
11975 ComputeCurrentValue();
11977 ~Iterator()
override {}
11979 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
11984 void Advance()
override {
11987 if (current6_ == end6_) {
11988 current6_ = begin6_;
11991 if (current5_ == end5_) {
11992 current5_ = begin5_;
11995 if (current4_ == end4_) {
11996 current4_ = begin4_;
11999 if (current3_ == end3_) {
12000 current3_ = begin3_;
12003 if (current2_ == end2_) {
12004 current2_ = begin2_;
12007 ComputeCurrentValue();
12009 ParamIteratorInterface<ParamType>* Clone()
const override {
12010 return new Iterator(*
this);
12012 const ParamType* Current()
const override {
return current_value_.get(); }
12013 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
12016 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
12017 <<
"The program attempted to compare iterators " 12018 <<
"from different generators." << std::endl;
12019 const Iterator* typed_other =
12020 CheckedDowncastToActualType<const Iterator>(&other);
12024 return (AtEnd() && typed_other->AtEnd()) ||
12026 current1_ == typed_other->current1_ &&
12027 current2_ == typed_other->current2_ &&
12028 current3_ == typed_other->current3_ &&
12029 current4_ == typed_other->current4_ &&
12030 current5_ == typed_other->current5_ &&
12031 current6_ == typed_other->current6_);
12035 Iterator(
const Iterator& other)
12036 : base_(other.base_),
12037 begin1_(other.begin1_),
12038 end1_(other.end1_),
12039 current1_(other.current1_),
12040 begin2_(other.begin2_),
12041 end2_(other.end2_),
12042 current2_(other.current2_),
12043 begin3_(other.begin3_),
12044 end3_(other.end3_),
12045 current3_(other.current3_),
12046 begin4_(other.begin4_),
12047 end4_(other.end4_),
12048 current4_(other.current4_),
12049 begin5_(other.begin5_),
12050 end5_(other.end5_),
12051 current5_(other.current5_),
12052 begin6_(other.begin6_),
12053 end6_(other.end6_),
12054 current6_(other.current6_) {
12055 ComputeCurrentValue();
12058 void ComputeCurrentValue() {
12060 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
12061 *current4_, *current5_, *current6_));
12063 bool AtEnd()
const {
12067 current1_ == end1_ ||
12068 current2_ == end2_ ||
12069 current3_ == end3_ ||
12070 current4_ == end4_ ||
12071 current5_ == end5_ ||
12072 current6_ == end6_;
12076 void operator=(
const Iterator& other);
12078 const ParamGeneratorInterface<ParamType>*
const base_;
12099 std::shared_ptr<ParamType> current_value_;
12105 const ParamGenerator<T1> g1_;
12106 const ParamGenerator<T2> g2_;
12107 const ParamGenerator<T3> g3_;
12108 const ParamGenerator<T4> g4_;
12109 const ParamGenerator<T5> g5_;
12110 const ParamGenerator<T6> g6_;
12114 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12115 typename T6,
typename T7>
12126 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
12130 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
12135 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
12136 g4_, g4_.
end(), g5_, g5_.
end(), g6_, g6_.
end(), g7_, g7_.
end());
12158 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
12159 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
12160 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
12161 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
12162 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
12163 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
12164 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
12165 ComputeCurrentValue();
12167 ~Iterator()
override {}
12169 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
12174 void Advance()
override {
12177 if (current7_ == end7_) {
12178 current7_ = begin7_;
12181 if (current6_ == end6_) {
12182 current6_ = begin6_;
12185 if (current5_ == end5_) {
12186 current5_ = begin5_;
12189 if (current4_ == end4_) {
12190 current4_ = begin4_;
12193 if (current3_ == end3_) {
12194 current3_ = begin3_;
12197 if (current2_ == end2_) {
12198 current2_ = begin2_;
12201 ComputeCurrentValue();
12203 ParamIteratorInterface<ParamType>* Clone()
const override {
12204 return new Iterator(*
this);
12206 const ParamType* Current()
const override {
return current_value_.get(); }
12207 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
12210 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
12211 <<
"The program attempted to compare iterators " 12212 <<
"from different generators." << std::endl;
12213 const Iterator* typed_other =
12214 CheckedDowncastToActualType<const Iterator>(&other);
12218 return (AtEnd() && typed_other->AtEnd()) ||
12220 current1_ == typed_other->current1_ &&
12221 current2_ == typed_other->current2_ &&
12222 current3_ == typed_other->current3_ &&
12223 current4_ == typed_other->current4_ &&
12224 current5_ == typed_other->current5_ &&
12225 current6_ == typed_other->current6_ &&
12226 current7_ == typed_other->current7_);
12230 Iterator(
const Iterator& other)
12231 : base_(other.base_),
12232 begin1_(other.begin1_),
12233 end1_(other.end1_),
12234 current1_(other.current1_),
12235 begin2_(other.begin2_),
12236 end2_(other.end2_),
12237 current2_(other.current2_),
12238 begin3_(other.begin3_),
12239 end3_(other.end3_),
12240 current3_(other.current3_),
12241 begin4_(other.begin4_),
12242 end4_(other.end4_),
12243 current4_(other.current4_),
12244 begin5_(other.begin5_),
12245 end5_(other.end5_),
12246 current5_(other.current5_),
12247 begin6_(other.begin6_),
12248 end6_(other.end6_),
12249 current6_(other.current6_),
12250 begin7_(other.begin7_),
12251 end7_(other.end7_),
12252 current7_(other.current7_) {
12253 ComputeCurrentValue();
12256 void ComputeCurrentValue() {
12258 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
12259 *current4_, *current5_, *current6_, *current7_));
12261 bool AtEnd()
const {
12265 current1_ == end1_ ||
12266 current2_ == end2_ ||
12267 current3_ == end3_ ||
12268 current4_ == end4_ ||
12269 current5_ == end5_ ||
12270 current6_ == end6_ ||
12271 current7_ == end7_;
12275 void operator=(
const Iterator& other);
12277 const ParamGeneratorInterface<ParamType>*
const base_;
12301 std::shared_ptr<ParamType> current_value_;
12307 const ParamGenerator<T1> g1_;
12308 const ParamGenerator<T2> g2_;
12309 const ParamGenerator<T3> g3_;
12310 const ParamGenerator<T4> g4_;
12311 const ParamGenerator<T5> g5_;
12312 const ParamGenerator<T6> g6_;
12313 const ParamGenerator<T7> g7_;
12317 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12318 typename T6,
typename T7,
typename T8>
12330 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
12335 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
12340 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
12341 g4_, g4_.
end(), g5_, g5_.
end(), g6_, g6_.
end(), g7_, g7_.
end(), g8_,
12366 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
12367 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
12368 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
12369 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
12370 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
12371 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
12372 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
12373 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
12374 ComputeCurrentValue();
12376 ~Iterator()
override {}
12378 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
12383 void Advance()
override {
12386 if (current8_ == end8_) {
12387 current8_ = begin8_;
12390 if (current7_ == end7_) {
12391 current7_ = begin7_;
12394 if (current6_ == end6_) {
12395 current6_ = begin6_;
12398 if (current5_ == end5_) {
12399 current5_ = begin5_;
12402 if (current4_ == end4_) {
12403 current4_ = begin4_;
12406 if (current3_ == end3_) {
12407 current3_ = begin3_;
12410 if (current2_ == end2_) {
12411 current2_ = begin2_;
12414 ComputeCurrentValue();
12416 ParamIteratorInterface<ParamType>* Clone()
const override {
12417 return new Iterator(*
this);
12419 const ParamType* Current()
const override {
return current_value_.get(); }
12420 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
12423 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
12424 <<
"The program attempted to compare iterators " 12425 <<
"from different generators." << std::endl;
12426 const Iterator* typed_other =
12427 CheckedDowncastToActualType<const Iterator>(&other);
12431 return (AtEnd() && typed_other->AtEnd()) ||
12433 current1_ == typed_other->current1_ &&
12434 current2_ == typed_other->current2_ &&
12435 current3_ == typed_other->current3_ &&
12436 current4_ == typed_other->current4_ &&
12437 current5_ == typed_other->current5_ &&
12438 current6_ == typed_other->current6_ &&
12439 current7_ == typed_other->current7_ &&
12440 current8_ == typed_other->current8_);
12444 Iterator(
const Iterator& other)
12445 : base_(other.base_),
12446 begin1_(other.begin1_),
12447 end1_(other.end1_),
12448 current1_(other.current1_),
12449 begin2_(other.begin2_),
12450 end2_(other.end2_),
12451 current2_(other.current2_),
12452 begin3_(other.begin3_),
12453 end3_(other.end3_),
12454 current3_(other.current3_),
12455 begin4_(other.begin4_),
12456 end4_(other.end4_),
12457 current4_(other.current4_),
12458 begin5_(other.begin5_),
12459 end5_(other.end5_),
12460 current5_(other.current5_),
12461 begin6_(other.begin6_),
12462 end6_(other.end6_),
12463 current6_(other.current6_),
12464 begin7_(other.begin7_),
12465 end7_(other.end7_),
12466 current7_(other.current7_),
12467 begin8_(other.begin8_),
12468 end8_(other.end8_),
12469 current8_(other.current8_) {
12470 ComputeCurrentValue();
12473 void ComputeCurrentValue() {
12475 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
12476 *current4_, *current5_, *current6_, *current7_, *current8_));
12478 bool AtEnd()
const {
12482 current1_ == end1_ ||
12483 current2_ == end2_ ||
12484 current3_ == end3_ ||
12485 current4_ == end4_ ||
12486 current5_ == end5_ ||
12487 current6_ == end6_ ||
12488 current7_ == end7_ ||
12489 current8_ == end8_;
12493 void operator=(
const Iterator& other);
12495 const ParamGeneratorInterface<ParamType>*
const base_;
12522 std::shared_ptr<ParamType> current_value_;
12528 const ParamGenerator<T1> g1_;
12529 const ParamGenerator<T2> g2_;
12530 const ParamGenerator<T3> g3_;
12531 const ParamGenerator<T4> g4_;
12532 const ParamGenerator<T5> g5_;
12533 const ParamGenerator<T6> g6_;
12534 const ParamGenerator<T7> g7_;
12535 const ParamGenerator<T8> g8_;
12539 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12540 typename T6,
typename T7,
typename T8,
typename T9>
12545 typedef ::std::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
ParamType;
12552 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
12557 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
12562 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
12563 g4_, g4_.
end(), g5_, g5_.
end(), g6_, g6_.
end(), g7_, g7_.
end(), g8_,
12564 g8_.
end(), g9_, g9_.
end());
12590 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
12591 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
12592 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
12593 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
12594 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
12595 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
12596 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
12597 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
12598 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
12599 ComputeCurrentValue();
12601 ~Iterator()
override {}
12603 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
12608 void Advance()
override {
12611 if (current9_ == end9_) {
12612 current9_ = begin9_;
12615 if (current8_ == end8_) {
12616 current8_ = begin8_;
12619 if (current7_ == end7_) {
12620 current7_ = begin7_;
12623 if (current6_ == end6_) {
12624 current6_ = begin6_;
12627 if (current5_ == end5_) {
12628 current5_ = begin5_;
12631 if (current4_ == end4_) {
12632 current4_ = begin4_;
12635 if (current3_ == end3_) {
12636 current3_ = begin3_;
12639 if (current2_ == end2_) {
12640 current2_ = begin2_;
12643 ComputeCurrentValue();
12645 ParamIteratorInterface<ParamType>* Clone()
const override {
12646 return new Iterator(*
this);
12648 const ParamType* Current()
const override {
return current_value_.get(); }
12649 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
12652 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
12653 <<
"The program attempted to compare iterators " 12654 <<
"from different generators." << std::endl;
12655 const Iterator* typed_other =
12656 CheckedDowncastToActualType<const Iterator>(&other);
12660 return (AtEnd() && typed_other->AtEnd()) ||
12662 current1_ == typed_other->current1_ &&
12663 current2_ == typed_other->current2_ &&
12664 current3_ == typed_other->current3_ &&
12665 current4_ == typed_other->current4_ &&
12666 current5_ == typed_other->current5_ &&
12667 current6_ == typed_other->current6_ &&
12668 current7_ == typed_other->current7_ &&
12669 current8_ == typed_other->current8_ &&
12670 current9_ == typed_other->current9_);
12674 Iterator(
const Iterator& other)
12675 : base_(other.base_),
12676 begin1_(other.begin1_),
12677 end1_(other.end1_),
12678 current1_(other.current1_),
12679 begin2_(other.begin2_),
12680 end2_(other.end2_),
12681 current2_(other.current2_),
12682 begin3_(other.begin3_),
12683 end3_(other.end3_),
12684 current3_(other.current3_),
12685 begin4_(other.begin4_),
12686 end4_(other.end4_),
12687 current4_(other.current4_),
12688 begin5_(other.begin5_),
12689 end5_(other.end5_),
12690 current5_(other.current5_),
12691 begin6_(other.begin6_),
12692 end6_(other.end6_),
12693 current6_(other.current6_),
12694 begin7_(other.begin7_),
12695 end7_(other.end7_),
12696 current7_(other.current7_),
12697 begin8_(other.begin8_),
12698 end8_(other.end8_),
12699 current8_(other.current8_),
12700 begin9_(other.begin9_),
12701 end9_(other.end9_),
12702 current9_(other.current9_) {
12703 ComputeCurrentValue();
12706 void ComputeCurrentValue() {
12708 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
12709 *current4_, *current5_, *current6_, *current7_, *current8_,
12712 bool AtEnd()
const {
12716 current1_ == end1_ ||
12717 current2_ == end2_ ||
12718 current3_ == end3_ ||
12719 current4_ == end4_ ||
12720 current5_ == end5_ ||
12721 current6_ == end6_ ||
12722 current7_ == end7_ ||
12723 current8_ == end8_ ||
12724 current9_ == end9_;
12728 void operator=(
const Iterator& other);
12730 const ParamGeneratorInterface<ParamType>*
const base_;
12760 std::shared_ptr<ParamType> current_value_;
12766 const ParamGenerator<T1> g1_;
12767 const ParamGenerator<T2> g2_;
12768 const ParamGenerator<T3> g3_;
12769 const ParamGenerator<T4> g4_;
12770 const ParamGenerator<T5> g5_;
12771 const ParamGenerator<T6> g6_;
12772 const ParamGenerator<T7> g7_;
12773 const ParamGenerator<T8> g8_;
12774 const ParamGenerator<T9> g9_;
12778 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12779 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
12784 typedef ::std::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
ParamType;
12792 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
12793 g9_(g9), g10_(g10) {}
12797 return new Iterator(
this, g1_, g1_.
begin(), g2_, g2_.
begin(), g3_,
12802 return new Iterator(
this, g1_, g1_.
end(), g2_, g2_.
end(), g3_, g3_.
end(),
12803 g4_, g4_.
end(), g5_, g5_.
end(), g6_, g6_.
end(), g7_, g7_.
end(), g8_,
12804 g8_.
end(), g9_, g9_.
end(), g10_, g10_.
end());
12832 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
12833 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
12834 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
12835 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
12836 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
12837 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
12838 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
12839 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
12840 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
12841 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
12842 ComputeCurrentValue();
12844 ~Iterator()
override {}
12846 const ParamGeneratorInterface<ParamType>* BaseGenerator()
const override {
12851 void Advance()
override {
12854 if (current10_ == end10_) {
12855 current10_ = begin10_;
12858 if (current9_ == end9_) {
12859 current9_ = begin9_;
12862 if (current8_ == end8_) {
12863 current8_ = begin8_;
12866 if (current7_ == end7_) {
12867 current7_ = begin7_;
12870 if (current6_ == end6_) {
12871 current6_ = begin6_;
12874 if (current5_ == end5_) {
12875 current5_ = begin5_;
12878 if (current4_ == end4_) {
12879 current4_ = begin4_;
12882 if (current3_ == end3_) {
12883 current3_ = begin3_;
12886 if (current2_ == end2_) {
12887 current2_ = begin2_;
12890 ComputeCurrentValue();
12892 ParamIteratorInterface<ParamType>* Clone()
const override {
12893 return new Iterator(*
this);
12895 const ParamType* Current()
const override {
return current_value_.get(); }
12896 bool Equals(
const ParamIteratorInterface<ParamType>& other)
const override {
12899 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
12900 <<
"The program attempted to compare iterators " 12901 <<
"from different generators." << std::endl;
12902 const Iterator* typed_other =
12903 CheckedDowncastToActualType<const Iterator>(&other);
12907 return (AtEnd() && typed_other->AtEnd()) ||
12909 current1_ == typed_other->current1_ &&
12910 current2_ == typed_other->current2_ &&
12911 current3_ == typed_other->current3_ &&
12912 current4_ == typed_other->current4_ &&
12913 current5_ == typed_other->current5_ &&
12914 current6_ == typed_other->current6_ &&
12915 current7_ == typed_other->current7_ &&
12916 current8_ == typed_other->current8_ &&
12917 current9_ == typed_other->current9_ &&
12918 current10_ == typed_other->current10_);
12922 Iterator(
const Iterator& other)
12923 : base_(other.base_),
12924 begin1_(other.begin1_),
12925 end1_(other.end1_),
12926 current1_(other.current1_),
12927 begin2_(other.begin2_),
12928 end2_(other.end2_),
12929 current2_(other.current2_),
12930 begin3_(other.begin3_),
12931 end3_(other.end3_),
12932 current3_(other.current3_),
12933 begin4_(other.begin4_),
12934 end4_(other.end4_),
12935 current4_(other.current4_),
12936 begin5_(other.begin5_),
12937 end5_(other.end5_),
12938 current5_(other.current5_),
12939 begin6_(other.begin6_),
12940 end6_(other.end6_),
12941 current6_(other.current6_),
12942 begin7_(other.begin7_),
12943 end7_(other.end7_),
12944 current7_(other.current7_),
12945 begin8_(other.begin8_),
12946 end8_(other.end8_),
12947 current8_(other.current8_),
12948 begin9_(other.begin9_),
12949 end9_(other.end9_),
12950 current9_(other.current9_),
12951 begin10_(other.begin10_),
12952 end10_(other.end10_),
12953 current10_(other.current10_) {
12954 ComputeCurrentValue();
12957 void ComputeCurrentValue() {
12959 current_value_.reset(
new ParamType(*current1_, *current2_, *current3_,
12960 *current4_, *current5_, *current6_, *current7_, *current8_,
12961 *current9_, *current10_));
12963 bool AtEnd()
const {
12967 current1_ == end1_ ||
12968 current2_ == end2_ ||
12969 current3_ == end3_ ||
12970 current4_ == end4_ ||
12971 current5_ == end5_ ||
12972 current6_ == end6_ ||
12973 current7_ == end7_ ||
12974 current8_ == end8_ ||
12975 current9_ == end9_ ||
12976 current10_ == end10_;
12980 void operator=(
const Iterator& other);
12982 const ParamGeneratorInterface<ParamType>*
const base_;
13015 std::shared_ptr<ParamType> current_value_;
13021 const ParamGenerator<T1> g1_;
13022 const ParamGenerator<T2> g2_;
13023 const ParamGenerator<T3> g3_;
13024 const ParamGenerator<T4> g4_;
13025 const ParamGenerator<T5> g5_;
13026 const ParamGenerator<T6> g6_;
13027 const ParamGenerator<T7> g7_;
13028 const ParamGenerator<T8> g8_;
13029 const ParamGenerator<T9> g9_;
13030 const ParamGenerator<T10> g10_;
13040 template <
class Generator1,
class Generator2>
13044 : g1_(g1), g2_(g2) {}
13045 template <
typename T1,
typename T2>
13057 const Generator1 g1_;
13058 const Generator2 g2_;
13061 template <
class Generator1,
class Generator2,
class Generator3>
13065 const Generator3& g3)
13066 : g1_(g1), g2_(g2), g3_(g3) {}
13067 template <
typename T1,
typename T2,
typename T3>
13080 const Generator1 g1_;
13081 const Generator2 g2_;
13082 const Generator3 g3_;
13085 template <
class Generator1,
class Generator2,
class Generator3,
13090 const Generator3& g3,
const Generator4& g4)
13091 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
13092 template <
typename T1,
typename T2,
typename T3,
typename T4>
13106 const Generator1 g1_;
13107 const Generator2 g2_;
13108 const Generator3 g3_;
13109 const Generator4 g4_;
13112 template <
class Generator1,
class Generator2,
class Generator3,
13113 class Generator4,
class Generator5>
13117 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
13118 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
13119 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
13134 const Generator1 g1_;
13135 const Generator2 g2_;
13136 const Generator3 g3_;
13137 const Generator4 g4_;
13138 const Generator5 g5_;
13141 template <
class Generator1,
class Generator2,
class Generator3,
13142 class Generator4,
class Generator5,
class Generator6>
13146 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
13147 const Generator6& g6)
13148 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
13149 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13166 const Generator1 g1_;
13167 const Generator2 g2_;
13168 const Generator3 g3_;
13169 const Generator4 g4_;
13170 const Generator5 g5_;
13171 const Generator6 g6_;
13174 template <
class Generator1,
class Generator2,
class Generator3,
13175 class Generator4,
class Generator5,
class Generator6,
class Generator7>
13179 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
13180 const Generator6& g6,
const Generator7& g7)
13181 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
13182 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13183 typename T6,
typename T7>
13200 const Generator1 g1_;
13201 const Generator2 g2_;
13202 const Generator3 g3_;
13203 const Generator4 g4_;
13204 const Generator5 g5_;
13205 const Generator6 g6_;
13206 const Generator7 g7_;
13209 template <
class Generator1,
class Generator2,
class Generator3,
13210 class Generator4,
class Generator5,
class Generator6,
class Generator7,
13215 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
13216 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
13217 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
13219 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13220 typename T6,
typename T7,
typename T8>
13221 operator ParamGenerator< ::std::tuple<T1, T2, T3, T4, T5, T6, T7,
13239 const Generator1 g1_;
13240 const Generator2 g2_;
13241 const Generator3 g3_;
13242 const Generator4 g4_;
13243 const Generator5 g5_;
13244 const Generator6 g6_;
13245 const Generator7 g7_;
13246 const Generator8 g8_;
13249 template <
class Generator1,
class Generator2,
class Generator3,
13250 class Generator4,
class Generator5,
class Generator6,
class Generator7,
13251 class Generator8,
class Generator9>
13255 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
13256 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
13257 const Generator9& g9)
13258 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
13260 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13261 typename T6,
typename T7,
typename T8,
typename T9>
13262 operator ParamGenerator< ::std::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
13281 const Generator1 g1_;
13282 const Generator2 g2_;
13283 const Generator3 g3_;
13284 const Generator4 g4_;
13285 const Generator5 g5_;
13286 const Generator6 g6_;
13287 const Generator7 g7_;
13288 const Generator8 g8_;
13289 const Generator9 g9_;
13292 template <
class Generator1,
class Generator2,
class Generator3,
13293 class Generator4,
class Generator5,
class Generator6,
class Generator7,
13294 class Generator8,
class Generator9,
class Generator10>
13298 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
13299 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
13300 const Generator9& g9,
const Generator10& g10)
13301 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
13302 g9_(g9), g10_(g10) {}
13303 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13304 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
13305 operator ParamGenerator< ::std::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
13307 return ParamGenerator< ::std::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
13327 const Generator1 g1_;
13328 const Generator2 g2_;
13329 const Generator3 g3_;
13330 const Generator4 g4_;
13331 const Generator5 g5_;
13332 const Generator6 g6_;
13333 const Generator7 g7_;
13334 const Generator8 g8_;
13335 const Generator9 g9_;
13336 const Generator10 g10_;
13342 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ 13388 template <
typename T,
typename IncrementT>
13394 template <
typename T>
13396 return Range(start, end, 1);
13454 template <
typename ForwardIterator>
13455 internal::ParamGenerator<
13456 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
13458 typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
13459 ::value_type ParamType;
13464 template <
typename T,
size_t N>
13466 return ValuesIn(array, array + N);
13469 template <
class Container>
13471 const Container& container) {
13472 return ValuesIn(container.begin(), container.end());
13495 template <
typename... T>
13521 return Values(
false,
true);
13570 template <
typename Generator1,
typename Generator2>
13572 const Generator1& g1,
const Generator2& g2) {
13577 template <
typename Generator1,
typename Generator2,
typename Generator3>
13579 const Generator1& g1,
const Generator2& g2,
const Generator3& g3) {
13584 template <
typename Generator1,
typename Generator2,
typename Generator3,
13585 typename Generator4>
13586 internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
13588 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13589 const Generator4& g4) {
13595 template <
typename Generator1,
typename Generator2,
typename Generator3,
13596 typename Generator4,
typename Generator5>
13597 internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
13599 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13600 const Generator4& g4,
const Generator5& g5) {
13602 Generator4, Generator5>(
13603 g1, g2, g3, g4, g5);
13606 template <
typename Generator1,
typename Generator2,
typename Generator3,
13607 typename Generator4,
typename Generator5,
typename Generator6>
13608 internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
13610 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13611 const Generator4& g4,
const Generator5& g5,
const Generator6& g6) {
13613 Generator4, Generator5, Generator6>(
13614 g1, g2, g3, g4, g5, g6);
13617 template <
typename Generator1,
typename Generator2,
typename Generator3,
13618 typename Generator4,
typename Generator5,
typename Generator6,
13619 typename Generator7>
13620 internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
13621 Generator4, Generator5, Generator6, Generator7>
Combine(
13622 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13623 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
13624 const Generator7& g7) {
13626 Generator4, Generator5, Generator6, Generator7>(
13627 g1, g2, g3, g4, g5, g6, g7);
13630 template <
typename Generator1,
typename Generator2,
typename Generator3,
13631 typename Generator4,
typename Generator5,
typename Generator6,
13632 typename Generator7,
typename Generator8>
13633 internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
13634 Generator4, Generator5, Generator6, Generator7, Generator8>
Combine(
13635 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13636 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
13637 const Generator7& g7,
const Generator8& g8) {
13639 Generator4, Generator5, Generator6, Generator7, Generator8>(
13640 g1, g2, g3, g4, g5, g6, g7, g8);
13643 template <
typename Generator1,
typename Generator2,
typename Generator3,
13644 typename Generator4,
typename Generator5,
typename Generator6,
13645 typename Generator7,
typename Generator8,
typename Generator9>
13646 internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
13647 Generator4, Generator5, Generator6, Generator7, Generator8,
13649 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13650 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
13651 const Generator7& g7,
const Generator8& g8,
const Generator9& g9) {
13653 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
13654 g1, g2, g3, g4, g5, g6, g7, g8, g9);
13657 template <
typename Generator1,
typename Generator2,
typename Generator3,
13658 typename Generator4,
typename Generator5,
typename Generator6,
13659 typename Generator7,
typename Generator8,
typename Generator9,
13660 typename Generator10>
13661 internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
13662 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
13664 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
13665 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
13666 const Generator7& g7,
const Generator8& g8,
const Generator9& g9,
13667 const Generator10& g10) {
13669 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
13671 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
13674 #define TEST_P(test_suite_name, test_name) \ 13675 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 13676 : public test_suite_name { \ 13678 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ 13679 virtual void TestBody(); \ 13682 static int AddToRegistry() { \ 13683 ::testing::UnitTest::GetInstance() \ 13684 ->parameterized_test_registry() \ 13685 .GetTestSuitePatternHolder<test_suite_name>( \ 13686 #test_suite_name, \ 13687 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ 13688 ->AddTestPattern( \ 13689 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \ 13690 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \ 13691 test_suite_name, test_name)>()); \ 13694 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ 13695 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ 13698 int GTEST_TEST_CLASS_NAME_(test_suite_name, \ 13699 test_name)::gtest_registering_dummy_ = \ 13700 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ 13701 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() 13715 #define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator, ...) \ 13716 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \ 13717 gtest_##prefix##test_suite_name##_EvalGenerator_() { \ 13718 return generator; \ 13720 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \ 13721 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \ 13722 return ::testing::internal::GetParamNameGen<test_suite_name::ParamType>( \ 13723 __VA_ARGS__)(info); \ 13725 static int gtest_##prefix##test_suite_name##_dummy_ \ 13726 GTEST_ATTRIBUTE_UNUSED_ = \ 13727 ::testing::UnitTest::GetInstance() \ 13728 ->parameterized_test_registry() \ 13729 .GetTestSuitePatternHolder<test_suite_name>( \ 13730 #test_suite_name, \ 13731 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ 13732 ->AddTestSuiteInstantiation( \ 13733 #prefix, >est_##prefix##test_suite_name##_EvalGenerator_, \ 13734 >est_##prefix##test_suite_name##_EvalGenerateName_, \ 13735 __FILE__, __LINE__) 13738 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 13739 #define INSTANTIATE_TEST_CASE_P INSTANTIATE_TEST_SUITE_P 13740 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 13744 #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 13778 #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 13779 #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 13802 #define FRIEND_TEST(test_case_name, test_name)\ 13803 friend class test_case_name##_##test_name##_Test 13805 #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ 13837 #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 13838 #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 13866 TestPartResult(Type a_type,
const char* a_file_name,
int a_line_number,
13867 const char* a_message)
13869 file_name_(a_file_name ==
nullptr ?
"" : a_file_name),
13870 line_number_(a_line_number),
13871 summary_(ExtractSummary(a_message)),
13872 message_(a_message) {}
13875 Type type()
const {
return type_; }
13879 const char* file_name()
const {
13880 return file_name_.empty() ? nullptr : file_name_.c_str();
13885 int line_number()
const {
return line_number_; }
13888 const char* summary()
const {
return summary_.c_str(); }
13891 const char* message()
const {
return message_.c_str(); }
13894 bool skipped()
const {
return type_ == kSkip; }
13897 bool passed()
const {
return type_ == kSuccess; }
13900 bool nonfatally_failed()
const {
return type_ == kNonFatalFailure; }
13903 bool fatally_failed()
const {
return type_ == kFatalFailure; }
13906 bool failed()
const {
return fatally_failed() || nonfatally_failed(); }
13913 static std::string ExtractSummary(
const char* message);
13926 std::ostream&
operator<<(std::ostream& os,
const TestPartResult& result);
13934 TestPartResultArray() {}
13937 void Append(
const TestPartResult& result);
13940 const TestPartResult& GetTestPartResult(
int index)
const;
13946 std::vector<TestPartResult> array_;
13952 class GTEST_API_ TestPartResultReporterInterface {
13954 virtual ~TestPartResultReporterInterface() {}
13956 virtual void ReportTestPartResult(
const TestPartResult& result) = 0;
13959 namespace internal {
13968 :
public TestPartResultReporterInterface {
13970 HasNewFatalFailureHelper();
13971 ~HasNewFatalFailureHelper()
override;
13972 void ReportTestPartResult(
const TestPartResult& result)
override;
13973 bool has_new_fatal_failure()
const {
return has_new_fatal_failure_; }
13975 bool has_new_fatal_failure_;
13976 TestPartResultReporterInterface* original_reporter_;
13987 #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ 14020 #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 14021 #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 14033 template <
typename T>
14037 typedef std::list<T> List;
14045 typedef testing::Types<char, int, unsigned int> MyTypes;
14046 TYPED_TEST_SUITE(FooTest, MyTypes);
14054 TYPED_TEST(FooTest, DoesBlah) {
14058 TypeParam n = this->value_;
14062 n += TestFixture::shared_;
14066 typename TestFixture::List values;
14067 values.push_back(n);
14071 TYPED_TEST(FooTest, HasPropertyA) { ... }
14111 template <
typename T>
14119 TYPED_TEST_SUITE_P(FooTest);
14123 TYPED_TEST_P(FooTest, DoesBlah) {
14129 TYPED_TEST_P(FooTest, HasPropertyA) { ... }
14135 REGISTER_TYPED_TEST_SUITE_P(FooTest,
14136 DoesBlah, HasPropertyA);
14146 typedef testing::Types<char, int, unsigned int> MyTypes;
14147 INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
14163 #if GTEST_HAS_TYPED_TEST 14169 #define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_ 14173 #define GTEST_NAME_GENERATOR_(TestSuiteName) \ 14174 gtest_type_params_##TestSuiteName##_NameGenerator 14179 #define TYPED_TEST_SUITE(CaseName, Types, ...) \ 14180 typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \ 14182 typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \ 14183 GTEST_NAME_GENERATOR_(CaseName) 14185 # define TYPED_TEST(CaseName, TestName) \ 14186 template <typename gtest_TypeParam_> \ 14187 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ 14188 : public CaseName<gtest_TypeParam_> { \ 14190 typedef CaseName<gtest_TypeParam_> TestFixture; \ 14191 typedef gtest_TypeParam_ TypeParam; \ 14192 virtual void TestBody(); \ 14194 static bool gtest_##CaseName##_##TestName##_registered_ \ 14195 GTEST_ATTRIBUTE_UNUSED_ = \ 14196 ::testing::internal::TypeParameterizedTest< \ 14198 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \ 14200 GTEST_TYPE_PARAMS_( \ 14201 CaseName)>::Register("", \ 14202 ::testing::internal::CodeLocation( \ 14203 __FILE__, __LINE__), \ 14204 #CaseName, #TestName, 0, \ 14205 ::testing::internal::GenerateNames< \ 14206 GTEST_NAME_GENERATOR_(CaseName), \ 14207 GTEST_TYPE_PARAMS_(CaseName)>()); \ 14208 template <typename gtest_TypeParam_> \ 14209 void GTEST_TEST_CLASS_NAME_(CaseName, \ 14210 TestName)<gtest_TypeParam_>::TestBody() 14213 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14214 #define TYPED_TEST_CASE TYPED_TEST_SUITE 14215 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14217 #endif // GTEST_HAS_TYPED_TEST 14221 #if GTEST_HAS_TYPED_TEST_P 14228 #define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_ 14234 #define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \ 14235 gtest_typed_test_suite_p_state_##TestSuiteName##_ 14241 #define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \ 14242 gtest_registered_test_names_##TestSuiteName##_ 14247 #define TYPED_TEST_SUITE_P(SuiteName) \ 14248 static ::testing::internal::TypedTestSuitePState \ 14249 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName) 14252 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14253 #define TYPED_TEST_CASE_P TYPED_TEST_SUITE_P 14254 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14256 #define TYPED_TEST_P(SuiteName, TestName) \ 14257 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ 14258 template <typename gtest_TypeParam_> \ 14259 class TestName : public SuiteName<gtest_TypeParam_> { \ 14261 typedef SuiteName<gtest_TypeParam_> TestFixture; \ 14262 typedef gtest_TypeParam_ TypeParam; \ 14263 virtual void TestBody(); \ 14265 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ 14266 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \ 14267 __FILE__, __LINE__, #SuiteName, #TestName); \ 14269 template <typename gtest_TypeParam_> \ 14270 void GTEST_SUITE_NAMESPACE_( \ 14271 SuiteName)::TestName<gtest_TypeParam_>::TestBody() 14273 #define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \ 14274 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ 14275 typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ 14277 static const char* const GTEST_REGISTERED_TEST_NAMES_( \ 14278 SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \ 14279 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \ 14280 __FILE__, __LINE__, #__VA_ARGS__) 14283 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14284 #define REGISTER_TYPED_TEST_CASE_P REGISTER_TYPED_TEST_SUITE_P 14285 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14290 #define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \ 14291 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \ 14292 ::testing::internal::TypeParameterizedTestSuite< \ 14293 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \ 14294 ::testing::internal::TypeList<Types>::type>:: \ 14295 Register(#Prefix, \ 14296 ::testing::internal::CodeLocation(__FILE__, __LINE__), \ 14297 >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \ 14298 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \ 14299 ::testing::internal::GenerateNames< \ 14300 ::testing::internal::NameGeneratorSelector< \ 14301 __VA_ARGS__>::type, \ 14302 ::testing::internal::TypeList<Types>::type>()) 14305 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14306 #define INSTANTIATE_TYPED_TEST_CASE_P INSTANTIATE_TYPED_TEST_SUITE_P 14307 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14309 #endif // GTEST_HAS_TYPED_TEST_P 14311 #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 14336 # pragma warning(push) 14337 # pragma warning(disable:4805) 14338 # pragma warning(disable:4100) 14410 #if GTEST_USE_OWN_FLAGFILE_FLAG_ 14412 #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ 14415 const int kMaxStackTraceDepth = 100;
14417 namespace internal {
14419 class AssertHelper;
14420 class DefaultGlobalTestPartResultReporter;
14421 class ExecDeathTest;
14422 class NoExecDeathTest;
14423 class FinalSuccessChecker;
14424 class GTestFlagSaver;
14425 class StreamingListenerTest;
14426 class TestResultAccessor;
14427 class TestEventListenersAccessor;
14428 class TestEventRepeater;
14429 class UnitTestRecordPropertyTestHelper;
14430 class WindowsDeathTest;
14431 class FuchsiaDeathTest;
14432 class UnitTestImpl* GetUnitTestImpl();
14433 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
14445 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 14446 using TestCase = TestSuite;
14534 AssertionResult(
const AssertionResult& other);
14536 #if defined(_MSC_VER) && _MSC_VER < 1910 14547 template <
typename T>
14548 explicit AssertionResult(
14550 typename internal::EnableIf<
14551 !internal::ImplicitlyConvertible<T, AssertionResult>::value>::type*
14554 : success_(success) {}
14556 #if defined(_MSC_VER) && _MSC_VER < 1910 14561 AssertionResult& operator=(AssertionResult other) {
14567 operator bool()
const {
return success_; }
14570 AssertionResult operator!()
const;
14576 const char* message()
const {
14577 return message_.get() !=
nullptr ? message_->c_str() :
"";
14580 const char* failure_message()
const {
return message(); }
14583 template <
typename T> AssertionResult&
operator<<(
const T& value) {
14584 AppendMessage(Message() << value);
14591 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
14592 AppendMessage(Message() << basic_manipulator);
14598 void AppendMessage(
const Message& a_message) {
14600 message_->append(a_message.GetString().c_str());
14604 void swap(AssertionResult& other);
14612 std::unique_ptr< ::std::string> message_;
14616 GTEST_API_ AssertionResult AssertionSuccess();
14619 GTEST_API_ AssertionResult AssertionFailure();
14623 GTEST_API_ AssertionResult AssertionFailure(
const Message& msg);
14665 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 14666 #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 14703 #define GTEST_ASSERT_(expression, on_failure) \ 14704 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 14705 if (const ::testing::AssertionResult gtest_ar = (expression)) \ 14708 on_failure(gtest_ar.failure_message()) 14713 template <
typename Pred,
14719 if (pred(v1))
return AssertionSuccess();
14721 return AssertionFailure()
14722 << pred_text <<
"(" << e1 <<
") evaluates to false, where" 14729 #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ 14730 GTEST_ASSERT_(pred_format(#v1, v1), \ 14735 #define GTEST_PRED1_(pred, v1, on_failure)\ 14736 GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ 14742 #define EXPECT_PRED_FORMAT1(pred_format, v1) \ 14743 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) 14744 #define EXPECT_PRED1(pred, v1) \ 14745 GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) 14746 #define ASSERT_PRED_FORMAT1(pred_format, v1) \ 14747 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) 14748 #define ASSERT_PRED1(pred, v1) \ 14749 GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) 14755 template <
typename Pred,
14764 if (pred(v1, v2))
return AssertionSuccess();
14766 return AssertionFailure()
14767 << pred_text <<
"(" << e1 <<
", " << e2
14768 <<
") evaluates to false, where" 14776 #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ 14777 GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ 14782 #define GTEST_PRED2_(pred, v1, v2, on_failure)\ 14783 GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ 14791 #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ 14792 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) 14793 #define EXPECT_PRED2(pred, v1, v2) \ 14794 GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) 14795 #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ 14796 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) 14797 #define ASSERT_PRED2(pred, v1, v2) \ 14798 GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) 14804 template <
typename Pred,
14816 if (pred(v1, v2, v3))
return AssertionSuccess();
14818 return AssertionFailure()
14819 << pred_text <<
"(" << e1 <<
", " << e2 <<
", " << e3
14820 <<
") evaluates to false, where" 14829 #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ 14830 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ 14835 #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ 14836 GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ 14846 #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 14847 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 14848 #define EXPECT_PRED3(pred, v1, v2, v3) \ 14849 GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) 14850 #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ 14851 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) 14852 #define ASSERT_PRED3(pred, v1, v2, v3) \ 14853 GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) 14859 template <
typename Pred,
14874 if (pred(v1, v2, v3, v4))
return AssertionSuccess();
14876 return AssertionFailure()
14877 << pred_text <<
"(" << e1 <<
", " << e2 <<
", " << e3 <<
", " << e4
14878 <<
") evaluates to false, where" 14888 #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ 14889 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ 14894 #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ 14895 GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ 14907 #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 14908 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 14909 #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ 14910 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) 14911 #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ 14912 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 14913 #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ 14914 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) 14920 template <
typename Pred,
14938 if (pred(v1, v2, v3, v4, v5))
return AssertionSuccess();
14940 return AssertionFailure()
14941 << pred_text <<
"(" << e1 <<
", " << e2 <<
", " << e3 <<
", " << e4
14942 <<
", " << e5 <<
") evaluates to false, where" 14953 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ 14954 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ 14959 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ 14960 GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ 14974 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 14975 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 14976 #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ 14977 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) 14978 #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ 14979 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 14980 #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ 14981 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) 14987 #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ 15038 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15041 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15044 static bool HasFatalFailure();
15047 static bool HasNonfatalFailure();
15050 static bool IsSkipped();
15054 static bool HasFailure() {
return HasFatalFailure() || HasNonfatalFailure(); }
15070 static void RecordProperty(
const std::string& key,
int value);
15077 virtual void SetUp();
15080 virtual void TearDown();
15085 static bool HasSameFixtureClass();
15093 virtual void TestBody() = 0;
15100 void DeleteSelf_() {
delete this; }
15102 const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
15120 struct Setup_should_be_spelled_SetUp {};
15121 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
15139 key_(a_key), value_(a_value) {
15144 return key_.c_str();
15149 return value_.c_str();
15154 value_ = new_value;
15180 int total_part_count()
const;
15183 int test_property_count()
const;
15186 bool Passed()
const {
return !Skipped() && !Failed(); }
15189 bool Skipped()
const;
15192 bool Failed()
const;
15195 bool HasFatalFailure()
const;
15198 bool HasNonfatalFailure()
const;
15205 const TestPartResult& GetTestPartResult(
int i)
const;
15216 friend class internal::DefaultGlobalTestPartResultReporter;
15217 friend class internal::ExecDeathTest;
15218 friend class internal::TestResultAccessor;
15219 friend class internal::UnitTestImpl;
15220 friend class internal::WindowsDeathTest;
15221 friend class internal::FuchsiaDeathTest;
15224 const std::vector<TestPartResult>& test_part_results()
const {
15225 return test_part_results_;
15229 const std::vector<TestProperty>& test_properties()
const {
15230 return test_properties_;
15234 void set_elapsed_time(
TimeInMillis elapsed) { elapsed_time_ = elapsed; }
15242 void RecordProperty(
const std::string& xml_element,
15243 const TestProperty& test_property);
15248 static bool ValidateTestProperty(
const std::string& xml_element,
15249 const TestProperty& test_property);
15252 void AddTestPartResult(
const TestPartResult& test_part_result);
15255 int death_test_count()
const {
return death_test_count_; }
15258 int increment_death_test_count() {
return ++death_test_count_; }
15261 void ClearTestPartResults();
15268 internal::Mutex test_properites_mutex_;
15271 std::vector<TestPartResult> test_part_results_;
15273 std::vector<TestProperty> test_properties_;
15275 int death_test_count_;
15304 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15306 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15309 const char*
name()
const {
return name_.c_str(); }
15314 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
15321 if (value_param_.get() !=
nullptr)
return value_param_->c_str();
15326 const char*
file()
const {
return location_.file.c_str(); }
15329 int line()
const {
return location_.line; }
15356 return matches_filter_ && !is_in_another_shard_;
15363 #if GTEST_HAS_DEATH_TEST 15364 friend class internal::DefaultDeathTestFactory;
15365 #endif // GTEST_HAS_DEATH_TEST 15368 friend class internal::UnitTestImpl;
15369 friend class internal::StreamingListenerTest;
15371 const char* test_suite_name,
const char* name,
const char* type_param,
15380 const char* a_type_param,
15381 const char* a_value_param,
15388 int increment_death_test_count() {
15389 return result_.increment_death_test_count();
15396 static void ClearTestResult(
TestInfo* test_info) {
15397 test_info->result_.Clear();
15405 const std::unique_ptr<const ::std::string> type_param_;
15408 const std::unique_ptr<const ::std::string> value_param_;
15409 internal::CodeLocation location_;
15413 bool matches_filter_;
15415 bool is_in_another_shard_;
15416 internal::TestFactoryBase*
const factory_;
15421 TestResult result_;
15443 TestSuite(
const char* name,
const char* a_type_param,
15451 const char*
name()
const {
return name_.c_str(); }
15456 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
15464 int successful_test_count()
const;
15467 int skipped_test_count()
const;
15470 int failed_test_count()
const;
15473 int reportable_disabled_test_count()
const;
15476 int disabled_test_count()
const;
15479 int reportable_test_count()
const;
15482 int test_to_run_count()
const;
15485 int total_test_count()
const;
15491 bool Failed()
const {
return failed_test_count() > 0; }
15498 const TestInfo* GetTestInfo(
int i)
const;
15506 friend class internal::UnitTestImpl;
15509 std::vector<TestInfo*>& test_info_list() {
return test_info_list_; }
15512 const std::vector<TestInfo*>& test_info_list()
const {
15513 return test_info_list_;
15518 TestInfo* GetMutableTestInfo(
int i);
15521 void set_should_run(
bool should) { should_run_ = should; }
15525 void AddTestInfo(TestInfo * test_info);
15528 void ClearResult();
15531 static void ClearTestSuiteResult(TestSuite* test_suite) {
15532 test_suite->ClearResult();
15540 void RunSetUpTestSuite() {
15541 if (set_up_tc_ !=
nullptr) {
15548 void RunTearDownTestSuite() {
15549 if (tear_down_tc_ !=
nullptr) {
15550 (*tear_down_tc_)();
15555 static bool TestPassed(
const TestInfo* test_info) {
15556 return test_info->should_run() && test_info->result()->Passed();
15560 static bool TestSkipped(
const TestInfo* test_info) {
15561 return test_info->should_run() && test_info->result()->Skipped();
15565 static bool TestFailed(
const TestInfo* test_info) {
15566 return test_info->should_run() && test_info->result()->Failed();
15571 static bool TestReportableDisabled(
const TestInfo* test_info) {
15572 return test_info->is_reportable() && test_info->is_disabled_;
15576 static bool TestDisabled(
const TestInfo* test_info) {
15577 return test_info->is_disabled_;
15581 static bool TestReportable(
const TestInfo* test_info) {
15582 return test_info->is_reportable();
15586 static bool ShouldRunTest(
const TestInfo* test_info) {
15587 return test_info->should_run();
15591 void ShuffleTests(internal::Random* random);
15594 void UnshuffleTests();
15600 const std::unique_ptr<const ::std::string> type_param_;
15603 std::vector<TestInfo*> test_info_list_;
15607 std::vector<int> test_indices_;
15618 TestResult ad_hoc_test_result_;
15651 struct Setup_should_be_spelled_SetUp {};
15652 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
15655 #if GTEST_HAS_EXCEPTIONS 15659 :
public internal::GoogleTestFailureException {
15661 explicit AssertionException(
const TestPartResult& result)
15662 : GoogleTestFailureException(result) {}
15665 #endif // GTEST_HAS_EXCEPTIONS 15680 int iteration) = 0;
15692 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15694 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15702 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
15711 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15713 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15723 int iteration) = 0;
15743 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15745 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15751 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15753 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15784 return default_result_printer_;
15795 return default_xml_generator_;
15801 friend class internal::DefaultGlobalTestPartResultReporter;
15802 friend class internal::NoExecDeathTest;
15803 friend class internal::TestEventListenersAccessor;
15804 friend class internal::UnitTestImpl;
15826 bool EventForwardingEnabled()
const;
15827 void SuppressEventForwarding();
15830 internal::TestEventRepeater* repeater_;
15867 const char* original_working_dir()
const;
15874 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15880 const TestInfo* current_test_info()
const 15884 int random_seed()
const;
15894 int successful_test_suite_count()
const;
15897 int failed_test_suite_count()
const;
15900 int total_test_suite_count()
const;
15904 int test_suite_to_run_count()
const;
15907 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15908 int successful_test_case_count()
const;
15909 int failed_test_case_count()
const;
15910 int total_test_case_count()
const;
15911 int test_case_to_run_count()
const;
15912 #endif // EMOVE_LEGACY_TEST_CASEAPI 15915 int successful_test_count()
const;
15918 int skipped_test_count()
const;
15921 int failed_test_count()
const;
15924 int reportable_disabled_test_count()
const;
15927 int disabled_test_count()
const;
15930 int reportable_test_count()
const;
15933 int total_test_count()
const;
15936 int test_to_run_count()
const;
15946 bool Passed()
const;
15950 bool Failed()
const;
15954 const TestSuite* GetTestSuite(
int i)
const;
15957 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15958 const TestCase* GetTestCase(
int i)
const;
15959 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 15963 const TestResult& ad_hoc_test_result()
const;
15985 void AddTestPartResult(TestPartResult::Type result_type,
15986 const char* file_name,
16004 internal::UnitTestImpl* impl() {
return impl_; }
16005 const internal::UnitTestImpl* impl()
const {
return impl_; }
16012 friend class internal::StreamingListenerTest;
16013 friend class internal::UnitTestRecordPropertyTestHelper;
16015 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
16016 friend void internal::ReportFailureInUnknownLocation(
16017 TestPartResult::Type result_type,
16028 void PushGTestTrace(
const internal::TraceInfo& trace)
16032 void PopGTestTrace()
16037 mutable internal::Mutex mutex_;
16043 internal::UnitTestImpl* impl_;
16086 namespace internal {
16091 template <
typename T1,
typename T2>
16093 const char* rhs_expression,
16094 const T1& lhs,
const T2& rhs) {
16110 template <
typename T1,
typename T2>
16112 const char* rhs_expression,
16116 return AssertionSuccess();
16126 const char* rhs_expression,
16134 template <
bool lhs_is_null_literal>
16138 template <
typename T1,
typename T2>
16139 static AssertionResult
Compare(
const char* lhs_expression,
16140 const char* rhs_expression,
16143 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
16152 static AssertionResult
Compare(
const char* lhs_expression,
16153 const char* rhs_expression,
16156 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
16169 template <
typename T1,
typename T2>
16171 const char* lhs_expression,
const char* rhs_expression,
const T1& lhs,
16178 typename EnableIf<!std::is_pointer<T2>::value>::type* =
nullptr) {
16179 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
16184 template <
typename T>
16186 const char* lhs_expression,
16187 const char* rhs_expression,
16197 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(
nullptr),
16205 template <
typename T1,
typename T2>
16207 const T1& val1,
const T2& val2,
16209 return AssertionFailure()
16210 <<
"Expected: (" << expr1 <<
") " << op <<
" (" << expr2
16226 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 16227 template <typename T1, typename T2>\ 16228 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 16229 const T1& val1, const T2& val2) {\ 16230 if (val1 op val2) {\ 16231 return AssertionSuccess();\ 16233 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\ 16236 GTEST_API_ AssertionResult CmpHelper##op_name(\ 16237 const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 16252 #undef GTEST_IMPL_CMP_HELPER_ 16258 const char* s2_expression,
16266 const char* s2_expression,
16274 const char* s2_expression,
16282 const char* s2_expression,
16291 const char* s2_expression,
16293 const wchar_t* s2);
16299 const char* s2_expression,
16301 const wchar_t* s2);
16314 const char* needle_expr,
const char* haystack_expr,
16315 const char* needle,
const char* haystack);
16317 const char* needle_expr,
const char* haystack_expr,
16318 const wchar_t* needle,
const wchar_t* haystack);
16320 const char* needle_expr,
const char* haystack_expr,
16321 const char* needle,
const char* haystack);
16323 const char* needle_expr,
const char* haystack_expr,
16324 const wchar_t* needle,
const wchar_t* haystack);
16326 const char* needle_expr,
const char* haystack_expr,
16329 const char* needle_expr,
const char* haystack_expr,
16332 #if GTEST_HAS_STD_WSTRING 16334 const char* needle_expr,
const char* haystack_expr,
16337 const char* needle_expr,
const char* haystack_expr,
16339 #endif // GTEST_HAS_STD_WSTRING 16341 namespace internal {
16350 template <
typename RawType>
16352 const char* rhs_expression,
16354 RawType rhs_value) {
16357 if (lhs.AlmostEquals(rhs)) {
16358 return AssertionSuccess();
16361 ::std::stringstream lhs_ss;
16362 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
16365 ::std::stringstream rhs_ss;
16366 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
16371 StringStreamToString(&lhs_ss),
16372 StringStreamToString(&rhs_ss),
16381 const char* abs_error_expr,
16394 const char* message);
16399 void operator=(
const Message& message)
const;
16406 struct AssertHelperData {
16407 AssertHelperData(TestPartResult::Type t,
16408 const char* srcfile,
16411 : type(t), file(srcfile), line(line_num), message(msg) { }
16413 TestPartResult::Type
const type;
16414 const char*
const file;
16422 AssertHelperData*
const data_;
16469 template <typename T>
16479 <<
"GetParam() can only be called inside a value-parameterized test " 16480 <<
"-- did you intend to write TEST_P instead of TEST_F?";
16481 return *parameter_;
16487 static void SetParam(
const ParamType* parameter) {
16488 parameter_ = parameter;
16492 static const ParamType* parameter_;
16498 template <
typename T>
16504 template <
typename T>
16513 #define GTEST_SKIP() GTEST_SKIP_("Skipped") 16533 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 16537 #define ADD_FAILURE_AT(file, line) \ 16538 GTEST_MESSAGE_AT_(file, line, "Failed", \ 16539 ::testing::TestPartResult::kNonFatalFailure) 16542 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 16546 #if !GTEST_DONT_DEFINE_FAIL 16547 # define FAIL() GTEST_FAIL() 16551 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 16555 #if !GTEST_DONT_DEFINE_SUCCEED 16556 # define SUCCEED() GTEST_SUCCEED() 16568 #define EXPECT_THROW(statement, expected_exception) \ 16569 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 16570 #define EXPECT_NO_THROW(statement) \ 16571 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 16572 #define EXPECT_ANY_THROW(statement) \ 16573 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 16574 #define ASSERT_THROW(statement, expected_exception) \ 16575 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 16576 #define ASSERT_NO_THROW(statement) \ 16577 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 16578 #define ASSERT_ANY_THROW(statement) \ 16579 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 16584 #define EXPECT_TRUE(condition) \ 16585 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 16586 GTEST_NONFATAL_FAILURE_) 16587 #define EXPECT_FALSE(condition) \ 16588 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 16589 GTEST_NONFATAL_FAILURE_) 16590 #define ASSERT_TRUE(condition) \ 16591 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 16592 GTEST_FATAL_FAILURE_) 16593 #define ASSERT_FALSE(condition) \ 16594 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 16595 GTEST_FATAL_FAILURE_) 16643 #define EXPECT_EQ(val1, val2) \ 16644 EXPECT_PRED_FORMAT2(::testing::internal:: \ 16645 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 16647 #define EXPECT_NE(val1, val2) \ 16648 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 16649 #define EXPECT_LE(val1, val2) \ 16650 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 16651 #define EXPECT_LT(val1, val2) \ 16652 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 16653 #define EXPECT_GE(val1, val2) \ 16654 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 16655 #define EXPECT_GT(val1, val2) \ 16656 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 16658 #define GTEST_ASSERT_EQ(val1, val2) \ 16659 ASSERT_PRED_FORMAT2(::testing::internal:: \ 16660 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 16662 #define GTEST_ASSERT_NE(val1, val2) \ 16663 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 16664 #define GTEST_ASSERT_LE(val1, val2) \ 16665 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 16666 #define GTEST_ASSERT_LT(val1, val2) \ 16667 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 16668 #define GTEST_ASSERT_GE(val1, val2) \ 16669 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 16670 #define GTEST_ASSERT_GT(val1, val2) \ 16671 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 16676 #if !GTEST_DONT_DEFINE_ASSERT_EQ 16677 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 16680 #if !GTEST_DONT_DEFINE_ASSERT_NE 16681 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 16684 #if !GTEST_DONT_DEFINE_ASSERT_LE 16685 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 16688 #if !GTEST_DONT_DEFINE_ASSERT_LT 16689 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 16692 #if !GTEST_DONT_DEFINE_ASSERT_GE 16693 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 16696 #if !GTEST_DONT_DEFINE_ASSERT_GT 16697 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 16716 #define EXPECT_STREQ(s1, s2) \ 16717 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 16718 #define EXPECT_STRNE(s1, s2) \ 16719 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 16720 #define EXPECT_STRCASEEQ(s1, s2) \ 16721 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 16722 #define EXPECT_STRCASENE(s1, s2)\ 16723 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 16725 #define ASSERT_STREQ(s1, s2) \ 16726 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 16727 #define ASSERT_STRNE(s1, s2) \ 16728 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 16729 #define ASSERT_STRCASEEQ(s1, s2) \ 16730 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 16731 #define ASSERT_STRCASENE(s1, s2)\ 16732 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 16748 #define EXPECT_FLOAT_EQ(val1, val2)\ 16749 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 16752 #define EXPECT_DOUBLE_EQ(val1, val2)\ 16753 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 16756 #define ASSERT_FLOAT_EQ(val1, val2)\ 16757 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 16760 #define ASSERT_DOUBLE_EQ(val1, val2)\ 16761 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 16764 #define EXPECT_NEAR(val1, val2, abs_error)\ 16765 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 16766 val1, val2, abs_error) 16768 #define ASSERT_NEAR(val1, val2, abs_error)\ 16769 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 16770 val1, val2, abs_error) 16780 float val1,
float val2);
16782 double val1,
double val2);
16785 #if GTEST_OS_WINDOWS 16796 # define EXPECT_HRESULT_SUCCEEDED(expr) \ 16797 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 16799 # define ASSERT_HRESULT_SUCCEEDED(expr) \ 16800 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 16802 # define EXPECT_HRESULT_FAILED(expr) \ 16803 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 16805 # define ASSERT_HRESULT_FAILED(expr) \ 16806 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 16808 #endif // GTEST_OS_WINDOWS 16820 #define ASSERT_NO_FATAL_FAILURE(statement) \ 16821 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 16822 #define EXPECT_NO_FATAL_FAILURE(statement) \ 16823 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 16842 template <
typename T>
16844 PushTrace(file, line, (
Message() << message).GetString());
16849 PushTrace(file, line, message ? message :
"(null)");
16852 #if GTEST_HAS_GLOBAL_STRING 16854 PushTrace(file, line, message);
16859 PushTrace(file, line, message);
16869 void PushTrace(
const char* file,
int line,
std::string message);
16891 #define SCOPED_TRACE(message) \ 16892 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 16893 __FILE__, __LINE__, (message)) 16926 template <
typename T1,
typename T2>
16957 #define GTEST_TEST(test_suite_name, test_name) \ 16958 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \ 16959 ::testing::internal::GetTestTypeId()) 16963 #if !GTEST_DONT_DEFINE_TEST 16964 #define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name) 16993 #define TEST_F(test_fixture, test_name)\ 16994 GTEST_TEST_(test_fixture, test_name, test_fixture, \ 16995 ::testing::internal::GetTypeId<test_fixture>()) 17002 # pragma warning(pop) 17062 template <
int&... ExplicitParameterBarrier,
typename Factory>
17064 const char* type_param,
const char* value_param,
17065 const char* file,
int line, Factory factory) {
17066 using TestT =
typename std::remove_pointer<decltype(factory())>::type;
17070 explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}
17071 Test* CreateTest()
override {
return factory_(); }
17078 test_suite_name, test_name, type_param, value_param,
17082 new FactoryImpl{std::move(factory)});
17098 return ::testing::UnitTest::GetInstance()->Run();
17103 #endif // GTEST_INCLUDE_GTEST_GTEST_H_
ParamIterator< T > iterator
FILE * FReopen(const char *path, const char *mode, FILE *stream)
const T * operator->() const
virtual void OnTestIterationStart(const UnitTest &unit_test, int iteration)=0
::std::tuple< T1, T2, T3 > ParamType
GTEST_API_ AssertionResult DoubleLE(const char *expr1, const char *expr2, double val1, double val2)
static RawType ReinterpretBits(const Bits bits)
::std::tuple< T1, T2, T3, T4, T5, T6, T7, T8 > ParamType
ParameterizedTestSuiteInfo(const char *name, CodeLocation code_location)
#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check)
const T * pointer() const
Test * CreateTest() override
std::true_type IsNullLiteralHelper(Secret *)
GTEST_API_ bool AlwaysTrue()
virtual void OnEnvironmentsSetUpEnd(const UnitTest &unit_test)=0
Environment * AddGlobalTestEnvironment(Environment *env)
void OnTestCaseStart(const TestCase &tc) override
ParamNameGenFunctor GetParamNameGen(ParamNameGenFunctor func)
CartesianProductHolder3(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3)
static void Print(const wchar_t *str, ::std::ostream *os)
std::string GetCapturedStdout()
virtual const std::string & GetTestSuiteName() const =0
GTEST_API_ AssertionResult DoubleNearPredFormat(const char *expr1, const char *expr2, const char *abs_error_expr, double val1, double val2, double abs_error)
std::string GetCapturedStderr()
ParamIterator & operator++()
ParamIteratorInterface< ParamType > * Begin() const override
ParamIteratorInterface< ParamType > * End() const override
const char * test_case_name() const
::std::tuple< T1, T2, T3, T4, T5, T6, T7 > ParamType
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest *unit_test, int skip_count)
ParamIteratorInterface< T > * End() const override
ParamIteratorInterface< ParamType > * Begin() const override
void(*)() SetUpTestSuiteFunc
CartesianProductHolder7(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5, const Generator6 &g6, const Generator7 &g7)
void OnTestCaseEnd(const TestCase &tc) override
GTEST_API_ bool SkipPrefix(const char *prefix, const char **pstr)
#define GTEST_INTENTIONAL_CONST_COND_PUSH_()
CartesianProductHolder4(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4)
AssertionResult AssertPred2Helper(const char *pred_text, const char *e1, const char *e2, Pred pred, const T1 &v1, const T2 &v2)
static const Bits kSignBitMask
CartesianProductGenerator5(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5)
ParameterizedTestSuiteInfoBase()
CartesianProductGenerator6(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5, const ParamGenerator< T6 > &g6)
IsContainer IsContainerTest(int)
const TestResult & ad_hoc_test_result() const
NativeArray(const NativeArray &rhs)
void RegisterTests() override
ParamIterator(const ParamIterator &other)
const char * pattern() const
static bool PartialMatch(const ::std::string &str, const RE &re)
NativeArray(const Element *array, size_t count, RelationToSourceReference)
CartesianProductGenerator10(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5, const ParamGenerator< T6 > &g6, const ParamGenerator< T7 > &g7, const ParamGenerator< T8 > &g8, const ParamGenerator< T9 > &g9, const ParamGenerator< T10 > &g10)
void OnTestIterationEnd(const UnitTest &, int) override
ParamIteratorInterface< T > * Begin() const override
GTEST_API_ bool IsTrue(bool condition)
bool operator==(faketype, faketype)
::std::string PrintToString(const T &value)
virtual void OnTestCaseEnd(const TestCase &test_case)
ParamIteratorInterface< ParamType > * End() const override
std::string ReadEntireFile(FILE *file)
void OnTestSuiteEnd(const TestSuite &) override
#define GTEST_CHECK_POSIX_SUCCESS_(posix_call)
#define GTEST_DISABLE_MSC_DEPRECATED_POP_()
ConstCharPtr(const char *str)
virtual ~ParameterizedTestSuiteInfoBase()
ParamIteratorInterface< ParamType > * End() const override
bool BoolFromGTestEnv(const char *flag, bool default_value)
~CartesianProductGenerator4() override
virtual ParamIteratorInterface< T > * Begin() const =0
const TestResult * result() const
GTEST_API_ AssertionResult IsSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
ScopedTrace(const char *file, int line, const std::string &message)
GTEST_API_ ::std::string FormatFileLocation(const char *file, int line)
CartesianProductGenerator2(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2)
~CartesianProductGenerator5() override
bool operator!=(faketype, faketype)
virtual void OnTestStart(const TestInfo &test_info)=0
ParamIteratorInterface< ParamType > * Begin() const override
bool_constant< bool_value > type
FloatingPoint(const RawType &x)
internal::ParamGenerator< bool > Bool()
Int32 Int32FromGTestEnv(const char *flag, Int32 default_value)
#define TEST_F(test_fixture, test_name)
ParamGenerator & operator=(const ParamGenerator &other)
GTEST_API_ std::vector< EditType > CalculateOptimalEdits(const std::vector< size_t > &left, const std::vector< size_t > &right)
#define GTEST_INTENTIONAL_CONST_COND_POP_()
bool ParseInt32(const Message &src_text, const char *str, Int32 *value)
void SetValue(const std::string &new_value)
virtual void OnTestIterationEnd(const UnitTest &unit_test, int iteration)=0
void OnTestPartResult(const TestPartResult &) override
const char * type_param() const
bool operator==(const ParamIterator &other) const
RangeGenerator(T begin, T end, IncrementT step)
ParamIterator operator++(int)
::std::vector< ::std::string > Strings
ParamIteratorInterface< T > * Begin() const override
int Stat(const char *path, StatStruct *buf)
virtual void OnEnvironmentsTearDownEnd(const UnitTest &unit_test)=0
virtual void OnEnvironmentsSetUpStart(const UnitTest &unit_test)=0
GTEST_API_ AssertionResult IsNotSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite()
int ChDir(const char *dir)
~ParameterizedTestSuiteRegistry()
::std::basic_ostream< Char, CharTraits > & operator<<(::std::basic_ostream< Char, CharTraits > &os, const T &x)
virtual ~ParamIteratorInterface()
::std::tuple< T1, T2 > ParamType
const char * GetEnv(const char *name)
void OnTestIterationStart(const UnitTest &, int) override
ParamNameGenFunc< ParamType >::Type ParamNameGeneratorFunc
typename std::conditional< sizeof(T) !=0, ::testing::Test, void >::type Test
internal::ParamGenerator< T > Range(T start, T end, IncrementT step)
static void Print(const char *str, ::std::ostream *os)
void PrintStringTo(const ::std::string &s, ostream *os)
#define GTEST_DECLARE_string_(name)
virtual const ParamGeneratorInterface< T > * BaseGenerator() const =0
GTEST_API_ AssertionResult CmpHelperSTRNE(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)
ParamIteratorInterface< ParamType > * End() const override
ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)
virtual ~TestEventListener()
std::string FormatForComparisonFailureMessage(const T1 &value, const T2 &)
ParamGenerator(const ParamGenerator &other)
ParamIteratorInterface< ParamType > * Begin() const override
#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
TypeWithSize< 8 >::Int TimeInMillis
bool_constant< true > true_type
TestEventListener * default_result_printer() const
ParamIteratorInterface< ParamType > * End() const override
ThreadLocal(const T &value)
~CartesianProductGenerator9() override
void OnEnvironmentsTearDownStart(const UnitTest &) override
GTEST_API_ AssertionResult EqFailure(const char *expected_expression, const char *actual_expression, const std::string &expected_value, const std::string &actual_value, bool ignoring_case)
void OnEnvironmentsTearDownEnd(const UnitTest &) override
#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
static void Print(wchar_t *str, ::std::ostream *os)
typename ElemFromList< I, typename MakeIndexSequence< sizeof...(T)>::type, T... >::type value_type
TestEventListener * default_xml_generator() const
#define GTEST_DECLARE_bool_(name)
ParamIteratorInterface< ParamType > * Begin() const override
size_t GetFileSize(FILE *file)
ElemFromList< I, Indices, T... >::type & Get()
std::string StreamableToString(const T &streamable)
~RangeGenerator() override
internal::TimeInMillis TimeInMillis
bool_constant< false > false_type
ParameterizedTestSuiteInfo< TestSuite > * GetTestSuitePatternHolder(const char *test_suite_name, CodeLocation code_location)
virtual ParamIteratorInterface< T > * End() const =0
const_iterator begin() const
bool ArrayEq(const T *lhs, size_t size, const U *rhs)
TypeWithSize< 4 >::UInt UInt32
NativeArray(const Element *array, size_t count, RelationToSourceCopy)
const size_t kProtobufOneLinerMaxLength
const char * StringFromGTestEnv(const char *flag, const char *default_value)
int Write(int fd, const void *buf, unsigned int count)
const ElemFromList< I, Indices, T... >::type & Get() const
void PrintBytesInObjectTo(const unsigned char *obj_bytes, size_t count, ostream *os)
ParamGenerator(ParamGeneratorInterface< T > *impl)
virtual const T * Current() const =0
const char * type_param() const
AssertionResult CmpHelperFloatingPointEQ(const char *lhs_expression, const char *rhs_expression, RawType lhs_value, RawType rhs_value)
Bits fraction_bits() const
void PrintTupleTo(const T &, std::integral_constant< size_t, 0 >, ::std::ostream *)
GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
TypeWithSize< 4 >::Int Int32
#define GTEST_IMPL_CMP_HELPER_(op_name, op)
CartesianProductHolder5(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5)
void OnTestSuiteStart(const TestSuite &) override
GTEST_API_ const char * fmt
const T & operator*() const
GTEST_API_ std::string TempDir()
CartesianProductGenerator8(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5, const ParamGenerator< T6 > &g6, const ParamGenerator< T7 > &g7, const ParamGenerator< T8 > &g8)
static void Print(const T &value, ::std::ostream *os)
static void TearDownTestCase()
GTEST_API_ const char kStackTraceMarker[]
~CartesianProductGenerator3() override
const_iterator end() const
::std::ostream & GetStream()
internal::CartesianProductHolder2< Generator1, Generator2 > Combine(const Generator1 &g1, const Generator2 &g2)
CartesianProductGenerator3(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3)
void DefaultPrintTo(WrapPrinterType< kPrintContainer >, const C &container, ::std::ostream *os)
FloatingPoint< float > Float
FloatingPoint< double > Double
const char * name() const
void OnTestStart(const TestInfo &) override
int RmDir(const char *dir)
GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
GTEST_API_ AssertionResult CmpHelperSTREQ(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)
TestParamInfo(const ParamType &a_param, size_t an_index)
virtual void OnTestProgramEnd(const UnitTest &unit_test)=0
static bool FullMatch(const ::std::string &str, const RE &re)
void(*)() TearDownTestSuiteFunc
static void Print(const T &value, ::std::ostream *os)
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
void UniversalTersePrint(const T &value, ::std::ostream *os)
TypeWithSize< sizeof(RawType)>::UInt Bits
Test * CreateTest() override
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator,...)
GTEST_API_ std::vector< std::string > GetArgvs()
GTEST_DECLARE_string_(death_test_style)
const Element * const_iterator
GTEST_API_ TestInfo * MakeAndRegisterTestInfo(const char *test_suite_name, const char *name, const char *type_param, const char *value_param, CodeLocation code_location, TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, TearDownTestSuiteFunc tear_down_tc, TestFactoryBase *factory)
int Read(int fd, void *buf, unsigned int count)
#define GTEST_DISABLE_MSC_WARNINGS_POP_()
AssertionResult CmpHelperOpFailure(const char *expr1, const char *expr2, const T1 &val1, const T2 &val2, const char *op)
virtual void RegisterTests()=0
void DefaultPrintNonContainerTo(const T &value, ::std::ostream *os)
#define GTEST_CHECK_(condition)
std::string operator()(const TestParamInfo< ParamType > &info) const
ParamIteratorInterface< ParamType > * End() const override
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string)
static void TearDownTestSuite()
#define GTEST_DISALLOW_ASSIGN_(type)
~CartesianProductGenerator8() override
virtual TypeId GetTestSuiteTypeId() const =0
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, Secret *, T *rhs)
virtual void OnTestSuiteStart(const TestSuite &test_suite)
int StrCaseCmp(const char *s1, const char *s2)
TestInfo * RegisterTest(const char *test_suite_name, const char *test_name, const char *type_param, const char *value_param, const char *file, int line, Factory factory)
void OnEnvironmentsSetUpEnd(const UnitTest &) override
SetUpTearDownSuiteFuncType GetNotDefaultOrNull(SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def)
CartesianProductGenerator9(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5, const ParamGenerator< T6 > &g6, const ParamGenerator< T7 > &g7, const ParamGenerator< T8 > &g8, const ParamGenerator< T9 > &g9)
TestClass::ParamType ParamType
std::string Type(const TestParamInfo< ParamType > &)
ScopedTrace(const char *file, int line, const T &message)
virtual ParamIteratorInterface * Clone() const =0
~CartesianProductGenerator10() override
ParameterizedTestCaseInfo< TestCase > * GetTestCasePatternHolder(const char *test_case_name, CodeLocation code_location)
bool IsDir(const StatStruct &st)
static void Print(const T &value, ::std::ostream *os)
~CartesianProductGenerator7() override
void PrintRawArrayTo(const T a[], size_t count, ::std::ostream *os)
::std::tuple< T1, T2, T3, T4, T5, T6 > ParamType
~CartesianProductGenerator2() override
#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)
void OnEnvironmentsSetUpStart(const UnitTest &) override
CartesianProductHolder10(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5, const Generator6 &g6, const Generator7 &g7, const Generator8 &g8, const Generator9 &g9, const Generator10 &g10)
Bits exponent_bits() const
internal::ParamGenerator< T > ValuesIn(const T(&array)[N])
virtual ~TestFactoryBase()
int AddTestSuiteInstantiation(const std::string &instantiation_name, GeneratorCreationFunc *func, ParamNameGeneratorFunc *name_func, const char *file, int line)
::std::tuple< T1, T2, T3, T4 > ParamType
void PrintTo(unsigned char c, ::std::ostream *os)
ParamIteratorInterface< ParamType > * End() const override
~ValuesInIteratorRangeGenerator() override
static const Bits kExponentBitMask
virtual void OnTestProgramStart(const UnitTest &unit_test)=0
GTEST_API_ std::string GetBoolAssertionFailureMessage(const AssertionResult &assertion_result, const char *expression_text, const char *actual_predicate_value, const char *expected_predicate_value)
ParameterizedTestFactory(ParamType parameter)
TestProperty(const std::string &a_key, const std::string &a_value)
GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char *file, int line)
virtual void OnTestEnd(const TestInfo &test_info)=0
virtual Test * CreateTest()=0
ParameterizedTestSuiteRegistry()
virtual void OnTestPartResult(const TestPartResult &test_part_result)=0
const char * value_param() const
FILE * FOpen(const char *path, const char *mode)
::std::tuple< T1, T2, T3, T4, T5 > ParamType
const Bits & bits() const
internal::ParamGenerator< typename Container::value_type > ValuesIn(const Container &container)
std::string DefaultParamName(const TestParamInfo< ParamType > &info)
Strings UniversalTersePrintTupleFieldsToStrings(const Tuple &value)
#define TEST_P(test_suite_name, test_name)
bool operator!=(const ParamIterator &other) const
void UniversalPrintArray(const char *begin, size_t len, ostream *os)
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs, typename EnableIf<!std::is_pointer< T2 >::value >::type *=nullptr)
static void SetUpTestCase()
AssertionResult CmpHelperEQFailure(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs)
virtual ~WithParamInterface()
bool is_reportable() const
static const size_t kBitCount
GTEST_API_ std::string DiffStrings(const std::string &left, const std::string &right, size_t *total_line_count)
static const size_t kFractionBitCount
bool is_in_another_shard() const
virtual ~ParamGeneratorInterface()
GTEST_API_ void ReportInvalidTestSuiteType(const char *test_suite_name, CodeLocation code_location)
GTEST_API_ std::string AppendUserMessage(const std::string >est_msg, const Message &user_msg)
CartesianProductHolder8(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5, const Generator6 &g6, const Generator7 &g7, const Generator8 &g8)
FlatTupleElemBase(value_type t)
void OnTestEnd(const TestInfo &) override
#define GTEST_MUST_USE_RESULT_
~CartesianProductGenerator6() override
ParamIteratorInterface< ParamType > * Begin() const override
static const size_t kMaxUlps
GTEST_API_ AssertionResult FloatLE(const char *expr1, const char *expr2, float val1, float val2)
static RawType Infinity()
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs)
CartesianProductHolder9(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5, const Generator6 &g6, const Generator7 &g7, const Generator8 &g8, const Generator9 &g9)
bool AlmostEquals(const FloatingPoint &rhs) const
const char * StrNCpy(char *dest, const char *src, size_t n)
#define GTEST_LOCK_EXCLUDED_(locks)
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
TypeWithSize< 8 >::UInt UInt64
GTEST_API_ AssertionResult CmpHelperEQ(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)
void OnTestProgramEnd(const UnitTest &) override
bool StaticAssertTypeEq()
void PrintWideStringTo(const ::std::wstring &s, ostream *os)
CartesianProductHolder6(const Generator1 &g1, const Generator2 &g2, const Generator3 &g3, const Generator4 &g4, const Generator5 &g5, const Generator6 &g6)
static void Print(const T(&a)[N], ::std::ostream *os)
void TersePrintPrefixToStrings(const Tuple &, std::integral_constant< size_t, 0 >, Strings *)
virtual void OnEnvironmentsTearDownStart(const UnitTest &unit_test)=0
#define EXPECT_TRUE(condition)
void CopyArray(const T *from, size_t size, U *to)
AssertionResult AssertPred1Helper(const char *pred_text, const char *e1, Pred pred, const T1 &v1)
ParamIterator & operator=(const ParamIterator &other)
ParamIteratorInterface< ParamType > * Begin() const override
class GTEST_API_ testing::ScopedTrace GTEST_ATTRIBUTE_UNUSED_
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char)
RE(const ::std::string ®ex)
static const size_t kExponentBitCount
#define GTEST_DECLARE_int32_(name)
static const ParamType & GetParam()
Iter ArrayAwareFind(Iter begin, Iter end, const Element &elem)
ParamIteratorInterface< ParamType > * End() const override
CartesianProductGenerator4(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4)
::std::tuple< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 > ParamType
static const Bits kFractionBitMask
AssertionResult AssertPred5Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, const char *e4, const char *e5, Pred pred, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5)
GTEST_API_ std::string CreateUnifiedDiff(const std::vector< std::string > &left, const std::vector< std::string > &right, size_t context=2)
::std::tuple< T1, T2, T3, T4, T5, T6, T7, T8, T9 > ParamType
TypeWithSize< 8 >::Int Int64
Iterator::value_type value_type
ParamIteratorInterface< ParamType > * Begin() const override
void(*)() SetUpTearDownSuiteFuncType
static void Print(const T(&value)[N], ::std::ostream *os)
Message(const Message &msg)
static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite()
CartesianProductHolder2(const Generator1 &g1, const Generator2 &g2)
void swap(array< _Tp, _Nm > &lhs, array< _Tp, _Nm > &rhs) noexcept(noexcept(lhs.swap(rhs)))
const char * value() const
virtual void OnTestSuiteEnd(const TestSuite &test_suite)
FILE * FDOpen(int fd, const char *mode)
ParamIteratorInterface< T > * End() const override
const BiggestInt kMaxBiggestInt
static UnitTest * GetInstance()
void AddTestPattern(const char *test_suite_name, const char *test_base_name, TestMetaFactoryBase< ParamType > *meta_factory)
typename TestSuite::ParamType ParamType
AssertionResult AssertPred3Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, Pred pred, const T1 &v1, const T2 &v2, const T3 &v3)
char * StrDup(const char *src)
const char * StrError(int errnum)
const char * name() const
const char * file() const
Derived * CheckedDowncastToActualType(Base *base)
const char * test_suite_name() const
TypeId GetTestSuiteTypeId() const override
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)
virtual void OnTestCaseStart(const TestCase &test_case)
decltype(*std::declval< typename C::const_iterator >()) value_type
bool operator==(const NativeArray &rhs) const
std::string OutputFlagAlsoCheckEnvVar()
GTEST_API_ TypeId GetTestTypeId()
AssertionResult AssertPred4Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, const char *e4, Pred pred, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
ptrdiff_t difference_type
std::string StripTrailingSpaces(std::string str)
static void SetUpTestSuite()
static void Print(char *str, ::std::ostream *os)
void UniversalPrint(const T &value, ::std::ostream *os)
std::string GetString() const
CodeLocation(const std::string &a_file, int a_line)
virtual bool Equals(const ParamIteratorInterface &other) const =0
TimeInMillis elapsed_time() const
CartesianProductGenerator7(const ParamGenerator< T1 > &g1, const ParamGenerator< T2 > &g2, const ParamGenerator< T3 > &g3, const ParamGenerator< T4 > &g4, const ParamGenerator< T5 > &g5, const ParamGenerator< T6 > &g6, const ParamGenerator< T7 > &g7)
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T)
const std::string & GetTestSuiteName() const override
ScopedTrace(const char *file, int line, const char *message)
void OnTestProgramStart(const UnitTest &) override
TimeInMillis elapsed_time() const
ParamIteratorInterface< ParamType > * End() const override
internal::ValueArray< T... > Values(T... v)
ParamIteratorInterface< ParamType > * Begin() const override
constexpr _Tp & get(array< _Tp, _Nm > &arr) noexcept