Go to the documentation of this file.
52#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
53#define GTEST_INCLUDE_GTEST_GTEST_H_
98#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
99#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
143#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
144#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
352#include <type_traits>
355# include <sys/types.h>
356# include <sys/stat.h>
360# include <AvailabilityMacros.h>
361# include <TargetConditionals.h>
406#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
407#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
411# define GTEST_OS_CYGWIN 1
412# elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)
413# define GTEST_OS_WINDOWS_MINGW 1
414# define GTEST_OS_WINDOWS 1
416# define GTEST_OS_WINDOWS 1
418# define GTEST_OS_WINDOWS_MOBILE 1
419# elif defined(WINAPI_FAMILY)
420# include <winapifamily.h>
421# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
422# define GTEST_OS_WINDOWS_DESKTOP 1
423# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
424# define GTEST_OS_WINDOWS_PHONE 1
425# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
426# define GTEST_OS_WINDOWS_RT 1
427# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE)
428# define GTEST_OS_WINDOWS_PHONE 1
429# define GTEST_OS_WINDOWS_TV_TITLE 1
433# define GTEST_OS_WINDOWS_DESKTOP 1
436# define GTEST_OS_WINDOWS_DESKTOP 1
439# define GTEST_OS_OS2 1
440#elif defined __APPLE__
441# define GTEST_OS_MAC 1
443# define GTEST_OS_IOS 1
445#elif defined __DragonFly__
446# define GTEST_OS_DRAGONFLY 1
447#elif defined __FreeBSD__
448# define GTEST_OS_FREEBSD 1
449#elif defined __Fuchsia__
450# define GTEST_OS_FUCHSIA 1
451#elif defined(__GLIBC__) && defined(__FreeBSD_kernel__)
452# define GTEST_OS_GNU_KFREEBSD 1
453#elif defined __linux__
454# define GTEST_OS_LINUX 1
455# if defined __ANDROID__
456# define GTEST_OS_LINUX_ANDROID 1
459# define GTEST_OS_ZOS 1
460#elif defined(__sun) && defined(__SVR4)
461# define GTEST_OS_SOLARIS 1
463# define GTEST_OS_AIX 1
465# define GTEST_OS_HPUX 1
466#elif defined __native_client__
467# define GTEST_OS_NACL 1
468#elif defined __NetBSD__
469# define GTEST_OS_NETBSD 1
470#elif defined __OpenBSD__
471# define GTEST_OS_OPENBSD 1
473# define GTEST_OS_QNX 1
474#elif defined(__HAIKU__)
475#define GTEST_OS_HAIKU 1
512#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
513#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
517#if !defined(GTEST_DEV_EMAIL_)
518# define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
519# define GTEST_FLAG_PREFIX_ "gtest_"
520# define GTEST_FLAG_PREFIX_DASH_ "gtest-"
521# define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
522# define GTEST_NAME_ "Google Test"
523# define GTEST_PROJECT_URL_ "https://github.com/google/googletest/"
526#if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)
527# define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest"
533# define GTEST_GCC_VER_ \
534 (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
543# define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \
544 __pragma(warning(push)) \
545 __pragma(warning(disable: warnings))
546# define GTEST_DISABLE_MSC_WARNINGS_POP_() \
547 __pragma(warning(pop))
550# define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
551# define GTEST_DISABLE_MSC_WARNINGS_POP_()
557# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \
558 _Pragma("clang diagnostic push") \
559 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \
560 _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"")
561#define GTEST_DISABLE_MSC_DEPRECATED_POP_() \
562 _Pragma("clang diagnostic pop")
564# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \
565 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996)
566# define GTEST_DISABLE_MSC_DEPRECATED_POP_() \
567 GTEST_DISABLE_MSC_WARNINGS_POP_()
574# if !GTEST_OS_WINDOWS_MOBILE
579#if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR)
582typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
587typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
597#if GTEST_OS_LINUX_ANDROID
599# include <android/api-level.h>
604#ifndef GTEST_HAS_POSIX_RE
605# if GTEST_OS_LINUX_ANDROID
607# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)
609# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
616#elif GTEST_HAS_POSIX_RE
624# define GTEST_USES_POSIX_RE 1
626#elif GTEST_OS_WINDOWS
630# define GTEST_USES_SIMPLE_RE 1
636# define GTEST_USES_SIMPLE_RE 1
640#ifndef GTEST_HAS_EXCEPTIONS
643# if defined(_MSC_VER) && defined(_CPPUNWIND)
645# define GTEST_HAS_EXCEPTIONS 1
646# elif defined(__BORLANDC__)
650# ifndef _HAS_EXCEPTIONS
651# define _HAS_EXCEPTIONS 1
653# define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS
654# elif defined(__clang__)
663# define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions))
664# elif defined(__GNUC__) && __EXCEPTIONS
666# define GTEST_HAS_EXCEPTIONS 1
667# elif defined(__SUNPRO_CC)
671# define GTEST_HAS_EXCEPTIONS 1
672# elif defined(__IBMCPP__) && __EXCEPTIONS
674# define GTEST_HAS_EXCEPTIONS 1
675# elif defined(__HP_aCC)
678# define GTEST_HAS_EXCEPTIONS 1
682# define GTEST_HAS_EXCEPTIONS 0
686#if !defined(GTEST_HAS_STD_STRING)
689# define GTEST_HAS_STD_STRING 1
690#elif !GTEST_HAS_STD_STRING
692# error "::std::string isn't available."
695#ifndef GTEST_HAS_STD_WSTRING
701#define GTEST_HAS_STD_WSTRING \
702 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
708#ifndef GTEST_HAS_RTTI
715# define GTEST_HAS_RTTI 1
717# define GTEST_HAS_RTTI 0
722# elif defined(__GNUC__)
729# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \
730 !defined(__EXCEPTIONS)
731# define GTEST_HAS_RTTI 0
733# define GTEST_HAS_RTTI 1
736# define GTEST_HAS_RTTI 0
742# elif defined(__clang__)
744# define GTEST_HAS_RTTI __has_feature(cxx_rtti)
748# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
751# define GTEST_HAS_RTTI 1
753# define GTEST_HAS_RTTI 0
759# define GTEST_HAS_RTTI 1
772#ifndef GTEST_HAS_PTHREAD
778#define GTEST_HAS_PTHREAD \
779 (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \
780 GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \
781 GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD || \
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
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
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) || GTEST_OS_WINDOWS_MINGW || \
839 GTEST_OS_AIX || GTEST_OS_HPUX || GTEST_OS_OPENBSD || GTEST_OS_QNX || \
840 GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \
841 GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU)
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)
860#if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \
861 GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD
862# define GTEST_CAN_STREAM_RESULTS_ 1
875#ifdef __INTEL_COMPILER
876# define GTEST_AMBIGUOUS_ELSE_BLOCKER_
878# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default:
892#if defined(__GNUC__) && !defined(COMPILER_ICC)
893# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
894#elif defined(__clang__)
895# if __has_attribute(unused)
896# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
899#ifndef GTEST_ATTRIBUTE_UNUSED_
900# define GTEST_ATTRIBUTE_UNUSED_
904#if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC)
905# if defined(__MINGW_PRINTF_FORMAT)
909# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \
910 __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \
913# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \
914 __attribute__((__format__(__printf__, string_index, first_to_check)))
917# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check)
923#define GTEST_DISALLOW_ASSIGN_(type) \
924 void operator=(type const &) = delete
928#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \
929 type(type const &) = delete; \
930 GTEST_DISALLOW_ASSIGN_(type)
937#if defined(__GNUC__) && !defined(COMPILER_ICC)
938# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))
940# define GTEST_MUST_USE_RESULT_
951# define GTEST_INTENTIONAL_CONST_COND_PUSH_() \
952 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127)
953# define GTEST_INTENTIONAL_CONST_COND_POP_() \
954 GTEST_DISABLE_MSC_WARNINGS_POP_()
962# if defined(_MSC_VER) || defined(__BORLANDC__)
964# define GTEST_HAS_SEH 1
967# define GTEST_HAS_SEH 0
972#ifndef GTEST_IS_THREADSAFE
974#define GTEST_IS_THREADSAFE \
975 (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \
976 (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \
987# if GTEST_LINKED_AS_SHARED_LIBRARY
988# define GTEST_API_ __declspec(dllimport)
989# elif GTEST_CREATE_SHARED_LIBRARY
990# define GTEST_API_ __declspec(dllexport)
992#elif __GNUC__ >= 4 || defined(__clang__)
993# define GTEST_API_ __attribute__((visibility ("default")))
1002#ifndef GTEST_DEFAULT_DEATH_TEST_STYLE
1003# define GTEST_DEFAULT_DEATH_TEST_STYLE "fast"
1008# define GTEST_NO_INLINE_ __attribute__((noinline))
1010# define GTEST_NO_INLINE_
1014#if !defined(GTEST_HAS_CXXABI_H_)
1015# if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER))
1016# define GTEST_HAS_CXXABI_H_ 1
1018# define GTEST_HAS_CXXABI_H_ 0
1024#if defined(__clang__)
1025# if __has_feature(memory_sanitizer)
1026# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \
1027 __attribute__((no_sanitize_memory))
1029# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
1032# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_
1036#if defined(__clang__)
1037# if __has_feature(address_sanitizer)
1038# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \
1039 __attribute__((no_sanitize_address))
1041# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_
1044# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_
1048#if defined(__clang__)
1049# if __has_feature(hwaddress_sanitizer)
1050# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \
1051 __attribute__((no_sanitize("hwaddress")))
1053# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_
1056# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_
1060#if defined(__clang__)
1061# if __has_feature(thread_sanitizer)
1062# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \
1063 __attribute__((no_sanitize_thread))
1065# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_
1068# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_
1078using std::make_tuple;
1080using std::tuple_element;
1081using std::tuple_size;
1099#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)
1102#define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))
1112#elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE
1125 RE( const char* regex) { Init(regex); }
1136 return FullMatch(str.c_str(), re);
1139 return PartialMatch(str.c_str(), re);
1146 void Init( const char* regex);
1147 const char* pattern_;
1150# if GTEST_USES_POSIX_RE
1152 regex_t full_regex_;
1153 regex_t partial_regex_;
1157 const char* full_pattern_;
1207#if !defined(GTEST_LOG_)
1209# define GTEST_LOG_(severity) \
1210 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \
1211 __FILE__, __LINE__).GetStream()
1218#if !defined(GTEST_CHECK_)
1233# define GTEST_CHECK_(condition) \
1234 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1235 if (::testing::internal::IsTrue(condition)) \
1238 GTEST_LOG_(FATAL) << "Condition " #condition " failed. "
1246#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \
1247 if (const int gtest_error = (posix_call)) \
1248 GTEST_LOG_(FATAL) << #posix_call << "failed with error " \
1262template < typename T>
1264template < typename T>
1268#define GTEST_REFERENCE_TO_CONST_(T) \
1269 typename ::testing::internal::ConstRef<T>::type
1291template< typename To>
1315template< typename To, typename From>
1324 const To to = nullptr;
1325 ::testing::internal::ImplicitCast_<From*>( to);
1330 GTEST_CHECK_(f == nullptr || dynamic_cast<To >(f) != nullptr);
1332 return static_cast<To >(f);
1340template < class Derived, class Base>
1346#if GTEST_HAS_DOWNCAST_
1347 return ::down_cast<Derived*>(base);
1349 return dynamic_cast<Derived* >(base);
1351 return static_cast<Derived* >(base);
1355#if GTEST_HAS_STREAM_REDIRECTION
1378#if GTEST_HAS_DEATH_TEST
1380std::vector<std::string> GetInjectableArgvs();
1382void SetInjectableArgvs( const std::vector<std::string>* new_argvs);
1383void SetInjectableArgvs( const std::vector<std::string>& new_argvs);
1384void ClearInjectableArgvs();
1389#if GTEST_IS_THREADSAFE
1390# if GTEST_HAS_PTHREAD
1394inline void SleepMilliseconds( int n) {
1395 const timespec time = {
1399 nanosleep(&time, nullptr);
1403# if GTEST_HAS_NOTIFICATION_
1407# elif GTEST_HAS_PTHREAD
1416 Notification() : notified_( false) {
1420 pthread_mutex_destroy(&mutex_);
1426 pthread_mutex_lock(&mutex_);
1428 pthread_mutex_unlock(&mutex_);
1433 void WaitForNotification() {
1435 pthread_mutex_lock(&mutex_);
1436 const bool notified = notified_;
1437 pthread_mutex_unlock(&mutex_);
1440 SleepMilliseconds(10);
1445 pthread_mutex_t mutex_;
1451# elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
1464 typedef void* Handle;
1466 explicit AutoHandle(Handle handle);
1472 void Reset(Handle handle);
1477 bool IsCloseable() const;
1494 void WaitForNotification();
1506# if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW
1513class ThreadWithParamBase {
1515 virtual ~ThreadWithParamBase() {}
1516 virtual void Run() = 0;
1525extern "C" inline void* ThreadFuncWithCLinkage( void* thread) {
1526 static_cast<ThreadWithParamBase* >(thread)->Run();
1542template < typename T>
1543class ThreadWithParam : public ThreadWithParamBase {
1545 typedef void UserThreadFunc(T);
1547 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1550 thread_can_start_(thread_can_start),
1552 ThreadWithParamBase* const base = this;
1556 pthread_create(&thread_, nullptr, &ThreadFuncWithCLinkage, base));
1558 ~ThreadWithParam() override { Join(); }
1567 void Run() override {
1568 if (thread_can_start_ != nullptr) thread_can_start_->WaitForNotification();
1573 UserThreadFunc* const func_;
1577 Notification* const thread_can_start_;
1587# if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_
1591# elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
1609 enum MutexType { kStatic = 0, kDynamic = 1 };
1613 enum StaticConstructorSelector { kStaticMutex = 0 };
1618 explicit Mutex(StaticConstructorSelector ) {}
1633 void ThreadSafeLazyInit();
1637 unsigned int owner_thread_id_;
1642 long critical_section_init_phase_;
1643 GTEST_CRITICAL_SECTION* critical_section_;
1648# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
1649 extern ::testing::internal::Mutex mutex
1651# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
1652 ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex)
1659class GTestMutexLock {
1662 : mutex_(mutex) { mutex_->Lock(); }
1664 ~GTestMutexLock() { mutex_->Unlock(); }
1667 Mutex* const mutex_;
1676class ThreadLocalValueHolderBase {
1678 virtual ~ThreadLocalValueHolderBase() {}
1683class ThreadLocalBase {
1689 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread() const = 0;
1692 ThreadLocalBase() {}
1693 virtual ~ThreadLocalBase() {}
1706 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
1707 const ThreadLocalBase* thread_local_instance);
1710 static void OnThreadLocalDestroyed(
1711 const ThreadLocalBase* thread_local_instance);
1721 virtual ~Runnable() {}
1722 virtual void Run() = 0;
1725 ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start);
1726 virtual ~ThreadWithParamBase();
1733template < typename T>
1734class ThreadWithParam : public ThreadWithParamBase {
1736 typedef void UserThreadFunc(T);
1738 ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)
1739 : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) {
1741 virtual ~ThreadWithParam() {}
1744 class RunnableImpl : public Runnable {
1746 RunnableImpl(UserThreadFunc* func, T param)
1750 virtual ~RunnableImpl() {}
1751 virtual void Run() {
1756 UserThreadFunc* const func_;
1792template < typename T>
1793class ThreadLocal : public ThreadLocalBase {
1795 ThreadLocal() : default_factory_(new DefaultValueHolderFactory()) {}
1797 : default_factory_(new InstanceValueHolderFactory( value)) {}
1799 ~ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed( this); }
1801 T* pointer() { return GetOrCreateValue(); }
1802 const T* pointer() const { return GetOrCreateValue(); }
1809 class ValueHolder : public ThreadLocalValueHolderBase {
1811 ValueHolder() : value_() {}
1812 explicit ValueHolder( const T& value) : value_( value) {}
1814 T* pointer() { return &value_; }
1822 T* GetOrCreateValue() const {
1823 return static_cast<ValueHolder* >(
1824 ThreadLocalRegistry::GetValueOnCurrentThread( this))-> pointer();
1827 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread() const {
1828 return default_factory_->MakeNewHolder();
1831 class ValueHolderFactory {
1833 ValueHolderFactory() {}
1834 virtual ~ValueHolderFactory() {}
1835 virtual ValueHolder* MakeNewHolder() const = 0;
1841 class DefaultValueHolderFactory : public ValueHolderFactory {
1843 DefaultValueHolderFactory() {}
1844 virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
1850 class InstanceValueHolderFactory : public ValueHolderFactory {
1852 explicit InstanceValueHolderFactory( const T& value) : value_( value) {}
1853 virtual ValueHolder* MakeNewHolder() const {
1854 return new ValueHolder(value_);
1863 std::unique_ptr<ValueHolderFactory> default_factory_;
1868# elif GTEST_HAS_PTHREAD
1876 owner_ = pthread_self();
1892 void AssertHeld() const {
1893 GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
1894 << "The current thread is not holding the mutex @" << this;
1903 pthread_mutex_t mutex_;
1915# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
1916 extern ::testing::internal::MutexBase mutex
1924#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
1925 ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0}
1929class Mutex : public MutexBase {
1948class GTestMutexLock {
1951 : mutex_(mutex) { mutex_->Lock(); }
1953 ~GTestMutexLock() { mutex_->Unlock(); }
1956 MutexBase* const mutex_;
1969class ThreadLocalValueHolderBase {
1971 virtual ~ThreadLocalValueHolderBase() {}
1976extern "C" inline void DeleteThreadLocalValue( void* value_holder) {
1977 delete static_cast<ThreadLocalValueHolderBase* >(value_holder);
1981template < typename T>
1985 : key_(CreateKey()), default_factory_(new DefaultValueHolderFactory()) {}
1986 explicit ThreadLocal( const T& value)
1987 : key_(CreateKey()),
1988 default_factory_(new InstanceValueHolderFactory( value)) {}
1992 DeleteThreadLocalValue(pthread_getspecific(key_));
1999 T* pointer() { return GetOrCreateValue(); }
2000 const T* pointer() const { return GetOrCreateValue(); }
2001 const T& get() const { return *pointer(); }
2002 void set( const T& value) { *pointer() = value; }
2006 class ValueHolder : public ThreadLocalValueHolderBase {
2008 ValueHolder() : value_() {}
2009 explicit ValueHolder( const T& value) : value_( value) {}
2011 T* pointer() { return &value_; }
2018 static pthread_key_t CreateKey() {
2023 pthread_key_create(&key, &DeleteThreadLocalValue));
2027 T* GetOrCreateValue() const {
2028 ThreadLocalValueHolderBase* const holder =
2029 static_cast<ThreadLocalValueHolderBase* >(pthread_getspecific(key_));
2030 if (holder != nullptr) {
2031 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
2034 ValueHolder* const new_holder = default_factory_->MakeNewHolder();
2035 ThreadLocalValueHolderBase* const holder_base = new_holder;
2037 return new_holder->pointer();
2040 class ValueHolderFactory {
2042 ValueHolderFactory() {}
2043 virtual ~ValueHolderFactory() {}
2044 virtual ValueHolder* MakeNewHolder() const = 0;
2050 class DefaultValueHolderFactory : public ValueHolderFactory {
2052 DefaultValueHolderFactory() {}
2053 virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
2059 class InstanceValueHolderFactory : public ValueHolderFactory {
2061 explicit InstanceValueHolderFactory( const T& value) : value_( value) {}
2062 virtual ValueHolder* MakeNewHolder() const {
2063 return new ValueHolder(value_);
2073 const pthread_key_t key_;
2074 std::unique_ptr<ValueHolderFactory> default_factory_;
2096# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
2097 extern ::testing::internal::Mutex mutex
2099# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex
2113template < typename T>
2120 const T& get() const { return value_; }
2136# define GTEST_PATH_SEP_ "\\"
2137# define GTEST_HAS_ALT_PATH_SEP_ 1
2141# define GTEST_PATH_SEP_ "/"
2142# define GTEST_HAS_ALT_PATH_SEP_ 0
2154 return isalpha( static_cast<unsigned char>(ch)) != 0;
2157 return isalnum( static_cast<unsigned char>(ch)) != 0;
2160 return isdigit( static_cast<unsigned char>(ch)) != 0;
2163 return islower( static_cast<unsigned char>(ch)) != 0;
2166 return isspace( static_cast<unsigned char>(ch)) != 0;
2169 return isupper( static_cast<unsigned char>(ch)) != 0;
2172 return isxdigit( static_cast<unsigned char>(ch)) != 0;
2175 const unsigned char low_byte = static_cast<unsigned char>(ch);
2176 return ch == low_byte && isxdigit(low_byte) != 0;
2180 return static_cast<char>(tolower( static_cast<unsigned char>(ch)));
2183 return static_cast<char>(toupper( static_cast<unsigned char>(ch)));
2187 std::string::iterator it = str.end();
2188 while (it != str.begin() && IsSpace(*--it))
2208inline int IsATTY( int fd) { return isatty(fd); }
2209inline int StrCaseCmp( const char* s1, const char* s2) {
2210 return stricmp(s1, s2);
2212inline char* StrDup( const char* src) { return strdup(src); }
2214# if GTEST_OS_WINDOWS_MOBILE
2215inline int IsATTY( int ) { return 0; }
2217inline int IsATTY( int fd) { return _isatty(fd); }
2219inline int StrCaseCmp( const char* s1, const char* s2) {
2220 return _stricmp(s1, s2);
2222inline char* StrDup( const char* src) { return _strdup(src); }
2225# if GTEST_OS_WINDOWS_MOBILE
2226inline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); }
2230inline int FileNo(FILE* file) { return _fileno(file); }
2231inline int Stat( const char* path, StatStruct* buf) { return _stat(path, buf); }
2232inline int RmDir( const char* dir) { return _rmdir(dir); }
2234 return (_S_IFDIR & st.st_mode) != 0;
2242inline int FileNo(FILE* file) { return fileno(file); }
2243inline int IsATTY( int fd) { return isatty(fd); }
2246 return strcasecmp(s1, s2);
2248inline char* StrDup( const char* src) { return strdup(src); }
2249inline int RmDir( const char* dir) { return rmdir(dir); }
2258inline const char* StrNCpy( char* dest, const char* src, size_t n) {
2259 return strncpy(dest, src, n);
2266#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
2267inline int ChDir( const char* dir) { return chdir(dir); }
2269inline FILE* FOpen( const char* path, const char* mode) {
2270 return fopen(path, mode);
2272#if !GTEST_OS_WINDOWS_MOBILE
2273inline FILE * FReopen( const char* path, const char* mode, FILE* stream) {
2274 return freopen(path, mode, stream);
2276inline FILE* FDOpen( int fd, const char* mode) { return fdopen(fd, mode); }
2278inline int FClose(FILE* fp) { return fclose(fp); }
2279#if !GTEST_OS_WINDOWS_MOBILE
2281 return static_cast<int>(read(fd, buf, count));
2284 return static_cast<int>( write(fd, buf, count));
2286inline int Close( int fd) { return close(fd); }
2287inline const char* StrError( int errnum) { return strerror(errnum); }
2290#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT
2292 static_cast<void>( name);
2294#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
2297 const char* const env = getenv( name);
2298 return (env != nullptr && env[0] != '\0') ? env : nullptr;
2300 return getenv( name);
2306#if GTEST_OS_WINDOWS_MOBILE
2310[[noreturn]] void Abort();
2312[[noreturn]] inline void Abort() { abort(); }
2322#if _MSC_VER && !GTEST_OS_WINDOWS_MOBILE
2324# define GTEST_SNPRINTF_(buffer, size, format, ...) \
2325 _snprintf_s(buffer, size, size, format, __VA_ARGS__)
2326#elif defined(_MSC_VER)
2328# define GTEST_SNPRINTF_ _snprintf
2330# define GTEST_SNPRINTF_ snprintf
2361template < size_t size>
2386 typedef __int64 Int;
2387 typedef unsigned __int64 UInt;
2404#if !defined(GTEST_FLAG)
2405# define GTEST_FLAG(name) FLAGS_gtest_##name
2408#if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_)
2409# define GTEST_USE_OWN_FLAGFILE_FLAG_ 1
2412#if !defined(GTEST_DECLARE_bool_)
2413# define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver
2416# define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
2417# define GTEST_DECLARE_int32_(name) \
2418 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
2419# define GTEST_DECLARE_string_(name) \
2420 GTEST_API_ extern ::std::string GTEST_FLAG(name)
2423# define GTEST_DEFINE_bool_(name, default_val, doc) \
2424 GTEST_API_ bool GTEST_FLAG(name) = (default_val)
2425# define GTEST_DEFINE_int32_(name, default_val, doc) \
2426 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
2427# define GTEST_DEFINE_string_(name, default_val, doc) \
2428 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)
2433#if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)
2434# define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)
2435# define GTEST_LOCK_EXCLUDED_(locks)
2453#if !defined(GTEST_INTERNAL_DEPRECATED)
2463#if defined(_MSC_VER)
2464#define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message))
2465#elif defined(__GNUC__)
2466#define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message)))
2468#define GTEST_INTERNAL_DEPRECATED(message)
2477# include <sys/types.h>
2478# include <sys/wait.h>
2482#if GTEST_HAS_EXCEPTIONS
2483# include <stdexcept>
2494#include <type_traits>
2543#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
2544#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
2555void operator<<(const testing::internal::Secret&, int);
2589 typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
2601 explicit Message( const char* str) : ss_(new ::std::stringstream) {
2606 template < typename T>
2622 using ::operator <<;
2640 template < typename T>
2642 if (pointer == nullptr) {
2663 return * this << ( b ? "true" : "false");
2671#if GTEST_HAS_STD_WSTRING
2685 const std::unique_ptr< ::std::stringstream> ss_;
2689 void operator=( const Message&);
2703template < typename T>
2705 return ( Message() << streamable).GetString();
2753#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
2754#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
2796#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
2797#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
2823 static const char* CloneCString( const char* c_str);
2825#if GTEST_OS_WINDOWS_MOBILE
2838 static LPCWSTR AnsiToUtf16( const char* c_str);
2848 static const char* Utf16ToAnsi(LPCWSTR utf16_str);
2857 static bool CStringEquals( const char* lhs, const char* rhs);
2863 static std::string ShowWideCString( const wchar_t* wide_c_str);
2871 static bool WideCStringEquals( const wchar_t* lhs, const wchar_t* rhs);
2879 static bool CaseInsensitiveCStringEquals( const char* lhs,
2894 static bool CaseInsensitiveWideCStringEquals( const wchar_t* lhs,
2895 const wchar_t* rhs);
2899 static bool EndsWithCaseInsensitive(
2946 FilePath() : pathname_( "") { }
2947 FilePath( const FilePath& rhs) : pathname_(rhs.pathname_) { }
2949 explicit FilePath( const std::string& pathname) : pathname_(pathname) {
2953 FilePath& operator=( const FilePath& rhs) {
2958 void Set( const FilePath& rhs) {
2959 pathname_ = rhs.pathname_;
2963 const char* c_str() const { return pathname_.c_str(); }
2966 static FilePath GetCurrentDir();
2972 static FilePath MakeFileName( const FilePath& directory,
2973 const FilePath& base_name,
2980 static FilePath ConcatPaths( const FilePath& directory,
2981 const FilePath& relative_path);
2991 static FilePath GenerateUniqueFileName( const FilePath& directory,
2992 const FilePath& base_name,
2996 bool IsEmpty() const { return pathname_.empty(); }
3001 FilePath RemoveTrailingPathSeparator() const;
3009 FilePath RemoveDirectoryName() const;
3017 FilePath RemoveFileName() const;
3023 FilePath RemoveExtension( const char* extension) const;
3029 bool CreateDirectoriesRecursively() const;
3035 bool CreateFolder() const;
3039 bool FileOrDirectoryExists() const;
3043 bool DirectoryExists() const;
3048 bool IsDirectory() const;
3052 bool IsRootDirectory() const;
3055 bool IsAbsolutePath() const;
3083 const char* FindLastPathSeparator() const;
3137#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3138#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3143# if GTEST_HAS_CXXABI_H_
3145# elif defined(__HP_aCC)
3146# include <acxx_demangle.h>
3157 static const char prefix[] = "std::__";
3158 if (s.compare(0, strlen(prefix), prefix) == 0) {
3159 std::string::size_type end = s.find( "::", strlen(prefix));
3160 if (end != s.npos) {
3162 s.erase(strlen( "std"), end - strlen( "std"));
3171template < typename T>
3175 const char* const name = typeid(T). name();
3176# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
3180# if GTEST_HAS_CXXABI_H_
3181 using abi::__cxa_demangle;
3183 char* const readable_name = __cxa_demangle( name, nullptr, nullptr, & status);
3185 free(readable_name);
3186 return CanonicalizeForStdLibVersioning(name_str);
3198#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3218template < typename T1>
3221 typedef Types0 Tail;
3223template < typename T1, typename T2>
3226 typedef Types1<T2> Tail;
3229template < typename T1, typename T2, typename T3>
3232 typedef Types2<T2, T3> Tail;
3235template < typename T1, typename T2, typename T3, typename T4>
3238 typedef Types3<T2, T3, T4> Tail;
3241template < typename T1, typename T2, typename T3, typename T4, typename T5>
3244 typedef Types4<T2, T3, T4, T5> Tail;
3247template < typename T1, typename T2, typename T3, typename T4, typename T5,
3251 typedef Types5<T2, T3, T4, T5, T6> Tail;
3254template < typename T1, typename T2, typename T3, typename T4, typename T5,
3255 typename T6, typename T7>
3258 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
3261template < typename T1, typename T2, typename T3, typename T4, typename T5,
3262 typename T6, typename T7, typename T8>
3265 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
3268template < typename T1, typename T2, typename T3, typename T4, typename T5,
3269 typename T6, typename T7, typename T8, typename T9>
3272 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
3275template < typename T1, typename T2, typename T3, typename T4, typename T5,
3276 typename T6, typename T7, typename T8, typename T9, typename T10>
3279 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
3282template < typename T1, typename T2, typename T3, typename T4, typename T5,
3283 typename T6, typename T7, typename T8, typename T9, typename T10,
3287 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
3290template < typename T1, typename T2, typename T3, typename T4, typename T5,
3291 typename T6, typename T7, typename T8, typename T9, typename T10,
3292 typename T11, typename T12>
3295 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
3298template < typename T1, typename T2, typename T3, typename T4, typename T5,
3299 typename T6, typename T7, typename T8, typename T9, typename T10,
3300 typename T11, typename T12, typename T13>
3303 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
3306template < typename T1, typename T2, typename T3, typename T4, typename T5,
3307 typename T6, typename T7, typename T8, typename T9, typename T10,
3308 typename T11, typename T12, typename T13, typename T14>
3311 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
3314template < typename T1, typename T2, typename T3, typename T4, typename T5,
3315 typename T6, typename T7, typename T8, typename T9, typename T10,
3316 typename T11, typename T12, typename T13, typename T14, typename T15>
3319 typedef Types14< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3323template < typename T1, typename T2, typename T3, typename T4, typename T5,
3324 typename T6, typename T7, typename T8, typename T9, typename T10,
3325 typename T11, typename T12, typename T13, typename T14, typename T15,
3329 typedef Types15< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3333template < typename T1, typename T2, typename T3, typename T4, typename T5,
3334 typename T6, typename T7, typename T8, typename T9, typename T10,
3335 typename T11, typename T12, typename T13, typename T14, typename T15,
3336 typename T16, typename T17>
3339 typedef Types16< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3343template < typename T1, typename T2, typename T3, typename T4, typename T5,
3344 typename T6, typename T7, typename T8, typename T9, typename T10,
3345 typename T11, typename T12, typename T13, typename T14, typename T15,
3346 typename T16, typename T17, typename T18>
3349 typedef Types17< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3350 T16, T17, T18> Tail;
3353template < typename T1, typename T2, typename T3, typename T4, typename T5,
3354 typename T6, typename T7, typename T8, typename T9, typename T10,
3355 typename T11, typename T12, typename T13, typename T14, typename T15,
3356 typename T16, typename T17, typename T18, typename T19>
3359 typedef Types18< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3360 T16, T17, T18, T19> Tail;
3363template < 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, typename T13, typename T14, typename T15,
3366 typename T16, typename T17, typename T18, typename T19, typename T20>
3369 typedef Types19< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3370 T16, T17, T18, T19, T20> Tail;
3373template < typename T1, typename T2, typename T3, typename T4, typename T5,
3374 typename T6, typename T7, typename T8, typename T9, typename T10,
3375 typename T11, typename T12, typename T13, typename T14, typename T15,
3376 typename T16, typename T17, typename T18, typename T19, typename T20,
3380 typedef Types20< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3381 T16, T17, T18, T19, T20, T21> Tail;
3384template < typename T1, typename T2, typename T3, typename T4, typename T5,
3385 typename T6, typename T7, typename T8, typename T9, typename T10,
3386 typename T11, typename T12, typename T13, typename T14, typename T15,
3387 typename T16, typename T17, typename T18, typename T19, typename T20,
3388 typename T21, typename T22>
3391 typedef Types21< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3392 T16, T17, T18, T19, T20, T21, T22> Tail;
3395template < typename T1, typename T2, typename T3, typename T4, typename T5,
3396 typename T6, typename T7, typename T8, typename T9, typename T10,
3397 typename T11, typename T12, typename T13, typename T14, typename T15,
3398 typename T16, typename T17, typename T18, typename T19, typename T20,
3399 typename T21, typename T22, typename T23>
3402 typedef Types22< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3403 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
3406template < 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, typename T18, typename T19, typename T20,
3410 typename T21, typename T22, typename T23, typename T24>
3413 typedef Types23< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3414 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
3417template < typename T1, typename T2, typename T3, typename T4, typename T5,
3418 typename T6, typename T7, typename T8, typename T9, typename T10,
3419 typename T11, typename T12, typename T13, typename T14, typename T15,
3420 typename T16, typename T17, typename T18, typename T19, typename T20,
3421 typename T21, typename T22, typename T23, typename T24, typename T25>
3424 typedef Types24< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3425 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
3428template < typename T1, typename T2, typename T3, typename T4, typename T5,
3429 typename T6, typename T7, typename T8, typename T9, typename T10,
3430 typename T11, typename T12, typename T13, typename T14, typename T15,
3431 typename T16, typename T17, typename T18, typename T19, typename T20,
3432 typename T21, typename T22, typename T23, typename T24, typename T25,
3436 typedef Types25< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3437 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
3440template < typename T1, typename T2, typename T3, typename T4, typename T5,
3441 typename T6, typename T7, typename T8, typename T9, typename T10,
3442 typename T11, typename T12, typename T13, typename T14, typename T15,
3443 typename T16, typename T17, typename T18, typename T19, typename T20,
3444 typename T21, typename T22, typename T23, typename T24, typename T25,
3445 typename T26, typename T27>
3448 typedef Types26< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3449 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
3452template < typename T1, typename T2, typename T3, typename T4, typename T5,
3453 typename T6, typename T7, typename T8, typename T9, typename T10,
3454 typename T11, typename T12, typename T13, typename T14, typename T15,
3455 typename T16, typename T17, typename T18, typename T19, typename T20,
3456 typename T21, typename T22, typename T23, typename T24, typename T25,
3457 typename T26, typename T27, typename T28>
3460 typedef Types27< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3461 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
3464template < typename T1, typename T2, typename T3, typename T4, typename T5,
3465 typename T6, typename T7, typename T8, typename T9, typename T10,
3466 typename T11, typename T12, typename T13, typename T14, typename T15,
3467 typename T16, typename T17, typename T18, typename T19, typename T20,
3468 typename T21, typename T22, typename T23, typename T24, typename T25,
3469 typename T26, typename T27, typename T28, typename T29>
3472 typedef Types28< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3473 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3477template < typename T1, typename T2, typename T3, typename T4, typename T5,
3478 typename T6, typename T7, typename T8, typename T9, typename T10,
3479 typename T11, typename T12, typename T13, typename T14, typename T15,
3480 typename T16, typename T17, typename T18, typename T19, typename T20,
3481 typename T21, typename T22, typename T23, typename T24, typename T25,
3482 typename T26, typename T27, typename T28, typename T29, typename T30>
3485 typedef Types29< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3486 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3490template < 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,
3495 typename T26, typename T27, typename T28, typename T29, typename T30,
3499 typedef Types30< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3500 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3504template < typename T1, typename T2, typename T3, typename T4, typename T5,
3505 typename T6, typename T7, typename T8, typename T9, typename T10,
3506 typename T11, typename T12, typename T13, typename T14, typename T15,
3507 typename T16, typename T17, typename T18, typename T19, typename T20,
3508 typename T21, typename T22, typename T23, typename T24, typename T25,
3509 typename T26, typename T27, typename T28, typename T29, typename T30,
3510 typename T31, typename T32>
3513 typedef Types31< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3514 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3515 T30, T31, T32> Tail;
3518template < typename T1, typename T2, typename T3, typename T4, typename T5,
3519 typename T6, typename T7, typename T8, typename T9, typename T10,
3520 typename T11, typename T12, typename T13, typename T14, typename T15,
3521 typename T16, typename T17, typename T18, typename T19, typename T20,
3522 typename T21, typename T22, typename T23, typename T24, typename T25,
3523 typename T26, typename T27, typename T28, typename T29, typename T30,
3524 typename T31, typename T32, typename T33>
3527 typedef Types32< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3528 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3529 T30, T31, T32, T33> Tail;
3532template < typename T1, typename T2, typename T3, typename T4, typename T5,
3533 typename T6, typename T7, typename T8, typename T9, typename T10,
3534 typename T11, typename T12, typename T13, typename T14, typename T15,
3535 typename T16, typename T17, typename T18, typename T19, typename T20,
3536 typename T21, typename T22, typename T23, typename T24, typename T25,
3537 typename T26, typename T27, typename T28, typename T29, typename T30,
3538 typename T31, typename T32, typename T33, typename T34>
3541 typedef Types33< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3542 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3543 T30, T31, T32, T33, T34> Tail;
3546template < typename T1, typename T2, typename T3, typename T4, typename T5,
3547 typename T6, typename T7, typename T8, typename T9, typename T10,
3548 typename T11, typename T12, typename T13, typename T14, typename T15,
3549 typename T16, typename T17, typename T18, typename T19, typename T20,
3550 typename T21, typename T22, typename T23, typename T24, typename T25,
3551 typename T26, typename T27, typename T28, typename T29, typename T30,
3552 typename T31, typename T32, typename T33, typename T34, typename T35>
3555 typedef Types34< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3556 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3557 T30, T31, T32, T33, T34, T35> Tail;
3560template < typename T1, typename T2, typename T3, typename T4, typename T5,
3561 typename T6, typename T7, typename T8, typename T9, typename T10,
3562 typename T11, typename T12, typename T13, typename T14, typename T15,
3563 typename T16, typename T17, typename T18, typename T19, typename T20,
3564 typename T21, typename T22, typename T23, typename T24, typename T25,
3565 typename T26, typename T27, typename T28, typename T29, typename T30,
3566 typename T31, typename T32, typename T33, typename T34, typename T35,
3570 typedef Types35< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3571 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3572 T30, T31, T32, T33, T34, T35, T36> Tail;
3575template < typename T1, typename T2, typename T3, typename T4, typename T5,
3576 typename T6, typename T7, typename T8, typename T9, typename T10,
3577 typename T11, typename T12, typename T13, typename T14, typename T15,
3578 typename T16, typename T17, typename T18, typename T19, typename T20,
3579 typename T21, typename T22, typename T23, typename T24, typename T25,
3580 typename T26, typename T27, typename T28, typename T29, typename T30,
3581 typename T31, typename T32, typename T33, typename T34, typename T35,
3582 typename T36, typename T37>
3585 typedef Types36< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3586 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3587 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
3590template < typename T1, typename T2, typename T3, typename T4, typename T5,
3591 typename T6, typename T7, typename T8, typename T9, typename T10,
3592 typename T11, typename T12, typename T13, typename T14, typename T15,
3593 typename T16, typename T17, typename T18, typename T19, typename T20,
3594 typename T21, typename T22, typename T23, typename T24, typename T25,
3595 typename T26, typename T27, typename T28, typename T29, typename T30,
3596 typename T31, typename T32, typename T33, typename T34, typename T35,
3597 typename T36, typename T37, typename T38>
3600 typedef Types37< 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, T34, T35, T36, T37, T38> Tail;
3605template < 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, typename T35,
3612 typename T36, typename T37, typename T38, typename T39>
3615 typedef Types38< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3616 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3617 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
3620template < typename T1, typename T2, typename T3, typename T4, typename T5,
3621 typename T6, typename T7, typename T8, typename T9, typename T10,
3622 typename T11, typename T12, typename T13, typename T14, typename T15,
3623 typename T16, typename T17, typename T18, typename T19, typename T20,
3624 typename T21, typename T22, typename T23, typename T24, typename T25,
3625 typename T26, typename T27, typename T28, typename T29, typename T30,
3626 typename T31, typename T32, typename T33, typename T34, typename T35,
3627 typename T36, typename T37, typename T38, typename T39, typename T40>
3630 typedef Types39< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3631 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3632 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
3635template < typename T1, typename T2, typename T3, typename T4, typename T5,
3636 typename T6, typename T7, typename T8, typename T9, typename T10,
3637 typename T11, typename T12, typename T13, typename T14, typename T15,
3638 typename T16, typename T17, typename T18, typename T19, typename T20,
3639 typename T21, typename T22, typename T23, typename T24, typename T25,
3640 typename T26, typename T27, typename T28, typename T29, typename T30,
3641 typename T31, typename T32, typename T33, typename T34, typename T35,
3642 typename T36, typename T37, typename T38, typename T39, typename T40,
3646 typedef Types40< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3647 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3648 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
3651template < typename T1, typename T2, typename T3, typename T4, typename T5,
3652 typename T6, typename T7, typename T8, typename T9, typename T10,
3653 typename T11, typename T12, typename T13, typename T14, typename T15,
3654 typename T16, typename T17, typename T18, typename T19, typename T20,
3655 typename T21, typename T22, typename T23, typename T24, typename T25,
3656 typename T26, typename T27, typename T28, typename T29, typename T30,
3657 typename T31, typename T32, typename T33, typename T34, typename T35,
3658 typename T36, typename T37, typename T38, typename T39, typename T40,
3659 typename T41, typename T42>
3662 typedef Types41< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3663 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3664 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
3667template < typename T1, typename T2, typename T3, typename T4, typename T5,
3668 typename T6, typename T7, typename T8, typename T9, typename T10,
3669 typename T11, typename T12, typename T13, typename T14, typename T15,
3670 typename T16, typename T17, typename T18, typename T19, typename T20,
3671 typename T21, typename T22, typename T23, typename T24, typename T25,
3672 typename T26, typename T27, typename T28, typename T29, typename T30,
3673 typename T31, typename T32, typename T33, typename T34, typename T35,
3674 typename T36, typename T37, typename T38, typename T39, typename T40,
3675 typename T41, typename T42, typename T43>
3678 typedef Types42< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3679 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3680 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
3684template < typename T1, typename T2, typename T3, typename T4, typename T5,
3685 typename T6, typename T7, typename T8, typename T9, typename T10,
3686 typename T11, typename T12, typename T13, typename T14, typename T15,
3687 typename T16, typename T17, typename T18, typename T19, typename T20,
3688 typename T21, typename T22, typename T23, typename T24, typename T25,
3689 typename T26, typename T27, typename T28, typename T29, typename T30,
3690 typename T31, typename T32, typename T33, typename T34, typename T35,
3691 typename T36, typename T37, typename T38, typename T39, typename T40,
3692 typename T41, typename T42, typename T43, typename T44>
3695 typedef Types43< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3696 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3697 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3701template < typename T1, typename T2, typename T3, typename T4, typename T5,
3702 typename T6, typename T7, typename T8, typename T9, typename T10,
3703 typename T11, typename T12, typename T13, typename T14, typename T15,
3704 typename T16, typename T17, typename T18, typename T19, typename T20,
3705 typename T21, typename T22, typename T23, typename T24, typename T25,
3706 typename T26, typename T27, typename T28, typename T29, typename T30,
3707 typename T31, typename T32, typename T33, typename T34, typename T35,
3708 typename T36, typename T37, typename T38, typename T39, typename T40,
3709 typename T41, typename T42, typename T43, typename T44, typename T45>
3712 typedef Types44< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3713 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3714 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3718template < typename T1, typename T2, typename T3, typename T4, typename T5,
3719 typename T6, typename T7, typename T8, typename T9, typename T10,
3720 typename T11, typename T12, typename T13, typename T14, typename T15,
3721 typename T16, typename T17, typename T18, typename T19, typename T20,
3722 typename T21, typename T22, typename T23, typename T24, typename T25,
3723 typename T26, typename T27, typename T28, typename T29, typename T30,
3724 typename T31, typename T32, typename T33, typename T34, typename T35,
3725 typename T36, typename T37, typename T38, typename T39, typename T40,
3726 typename T41, typename T42, typename T43, typename T44, typename T45,
3730 typedef Types45< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3731 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3732 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3733 T44, T45, T46> Tail;
3736template < typename T1, typename T2, typename T3, typename T4, typename T5,
3737 typename T6, typename T7, typename T8, typename T9, typename T10,
3738 typename T11, typename T12, typename T13, typename T14, typename T15,
3739 typename T16, typename T17, typename T18, typename T19, typename T20,
3740 typename T21, typename T22, typename T23, typename T24, typename T25,
3741 typename T26, typename T27, typename T28, typename T29, typename T30,
3742 typename T31, typename T32, typename T33, typename T34, typename T35,
3743 typename T36, typename T37, typename T38, typename T39, typename T40,
3744 typename T41, typename T42, typename T43, typename T44, typename T45,
3745 typename T46, typename T47>
3748 typedef Types46< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3749 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3750 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3751 T44, T45, T46, T47> Tail;
3754template < typename T1, typename T2, typename T3, typename T4, typename T5,
3755 typename T6, typename T7, typename T8, typename T9, typename T10,
3756 typename T11, typename T12, typename T13, typename T14, typename T15,
3757 typename T16, typename T17, typename T18, typename T19, typename T20,
3758 typename T21, typename T22, typename T23, typename T24, typename T25,
3759 typename T26, typename T27, typename T28, typename T29, typename T30,
3760 typename T31, typename T32, typename T33, typename T34, typename T35,
3761 typename T36, typename T37, typename T38, typename T39, typename T40,
3762 typename T41, typename T42, typename T43, typename T44, typename T45,
3763 typename T46, typename T47, typename T48>
3766 typedef Types47< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3767 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3768 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3769 T44, T45, T46, T47, T48> Tail;
3772template < typename T1, typename T2, typename T3, typename T4, typename T5,
3773 typename T6, typename T7, typename T8, typename T9, typename T10,
3774 typename T11, typename T12, typename T13, typename T14, typename T15,
3775 typename T16, typename T17, typename T18, typename T19, typename T20,
3776 typename T21, typename T22, typename T23, typename T24, typename T25,
3777 typename T26, typename T27, typename T28, typename T29, typename T30,
3778 typename T31, typename T32, typename T33, typename T34, typename T35,
3779 typename T36, typename T37, typename T38, typename T39, typename T40,
3780 typename T41, typename T42, typename T43, typename T44, typename T45,
3781 typename T46, typename T47, typename T48, typename T49>
3784 typedef Types48< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3785 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3786 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3787 T44, T45, T46, T47, T48, T49> Tail;
3790template < typename T1, typename T2, typename T3, typename T4, typename T5,
3791 typename T6, typename T7, typename T8, typename T9, typename T10,
3792 typename T11, typename T12, typename T13, typename T14, typename T15,
3793 typename T16, typename T17, typename T18, typename T19, typename T20,
3794 typename T21, typename T22, typename T23, typename T24, typename T25,
3795 typename T26, typename T27, typename T28, typename T29, typename T30,
3796 typename T31, typename T32, typename T33, typename T34, typename T35,
3797 typename T36, typename T37, typename T38, typename T39, typename T40,
3798 typename T41, typename T42, typename T43, typename T44, typename T45,
3799 typename T46, typename T47, typename T48, typename T49, typename T50>
3802 typedef Types49< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3803 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3804 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3805 T44, T45, T46, T47, T48, T49, T50> Tail;
3824template < typename T1 = internal::None, typename T2 = internal::None,
3825 typename T3 = internal::None, typename T4 = internal::None,
3826 typename T5 = internal::None, typename T6 = internal::None,
3827 typename T7 = internal::None, typename T8 = internal::None,
3828 typename T9 = internal::None, typename T10 = internal::None,
3829 typename T11 = internal::None, typename T12 = internal::None,
3830 typename T13 = internal::None, typename T14 = internal::None,
3831 typename T15 = internal::None, typename T16 = internal::None,
3832 typename T17 = internal::None, typename T18 = internal::None,
3833 typename T19 = internal::None, typename T20 = internal::None,
3834 typename T21 = internal::None, typename T22 = internal::None,
3835 typename T23 = internal::None, typename T24 = internal::None,
3836 typename T25 = internal::None, typename T26 = internal::None,
3837 typename T27 = internal::None, typename T28 = internal::None,
3838 typename T29 = internal::None, typename T30 = internal::None,
3839 typename T31 = internal::None, typename T32 = internal::None,
3840 typename T33 = internal::None, typename T34 = internal::None,
3841 typename T35 = internal::None, typename T36 = internal::None,
3842 typename T37 = internal::None, typename T38 = internal::None,
3843 typename T39 = internal::None, typename T40 = internal::None,
3844 typename T41 = internal::None, typename T42 = internal::None,
3845 typename T43 = internal::None, typename T44 = internal::None,
3846 typename T45 = internal::None, typename T46 = internal::None,
3847 typename T47 = internal::None, typename T48 = internal::None,
3848 typename T49 = internal::None, typename T50 = internal::None>
3850 typedef internal::Types50< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
3851 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
3852 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3853 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
3857struct Types<internal::None, internal::None, internal::None, internal::None,
3858 internal::None, internal::None, internal::None, internal::None,
3859 internal::None, internal::None, internal::None, internal::None,
3860 internal::None, internal::None, internal::None, internal::None,
3861 internal::None, internal::None, internal::None, internal::None,
3862 internal::None, internal::None, internal::None, internal::None,
3863 internal::None, internal::None, internal::None, internal::None,
3864 internal::None, internal::None, internal::None, internal::None,
3865 internal::None, internal::None, internal::None, internal::None,
3866 internal::None, internal::None, internal::None, internal::None,
3867 internal::None, internal::None, internal::None, internal::None,
3868 internal::None, internal::None, internal::None, internal::None,
3869 internal::None, internal::None> {
3870 typedef internal::Types0 type;
3872template < typename T1>
3873struct Types< T1, internal::None, internal::None, internal::None,
3874 internal::None, internal::None, internal::None, internal::None,
3875 internal::None, internal::None, internal::None, internal::None,
3876 internal::None, internal::None, internal::None, internal::None,
3877 internal::None, internal::None, internal::None, internal::None,
3878 internal::None, internal::None, internal::None, internal::None,
3879 internal::None, internal::None, internal::None, internal::None,
3880 internal::None, internal::None, internal::None, internal::None,
3881 internal::None, internal::None, internal::None, internal::None,
3882 internal::None, internal::None, internal::None, internal::None,
3883 internal::None, internal::None, internal::None, internal::None,
3884 internal::None, internal::None, internal::None, internal::None,
3885 internal::None, internal::None> {
3886 typedef internal::Types1<T1> type;
3888template < typename T1, typename T2>
3889struct Types< T1, T2, internal::None, internal::None, internal::None,
3890 internal::None, internal::None, internal::None, internal::None,
3891 internal::None, internal::None, internal::None, internal::None,
3892 internal::None, internal::None, internal::None, internal::None,
3893 internal::None, internal::None, internal::None, internal::None,
3894 internal::None, internal::None, internal::None, internal::None,
3895 internal::None, internal::None, internal::None, internal::None,
3896 internal::None, internal::None, internal::None, internal::None,
3897 internal::None, internal::None, internal::None, internal::None,
3898 internal::None, internal::None, internal::None, internal::None,
3899 internal::None, internal::None, internal::None, internal::None,
3900 internal::None, internal::None, internal::None, internal::None,
3902 typedef internal::Types2<T1, T2> type;
3904template < typename T1, typename T2, typename T3>
3905struct Types< T1, T2, T3, internal::None, internal::None, internal::None,
3906 internal::None, internal::None, internal::None, internal::None,
3907 internal::None, internal::None, internal::None, internal::None,
3908 internal::None, internal::None, internal::None, internal::None,
3909 internal::None, internal::None, internal::None, internal::None,
3910 internal::None, internal::None, internal::None, internal::None,
3911 internal::None, internal::None, internal::None, internal::None,
3912 internal::None, internal::None, internal::None, internal::None,
3913 internal::None, internal::None, internal::None, internal::None,
3914 internal::None, internal::None, internal::None, internal::None,
3915 internal::None, internal::None, internal::None, internal::None,
3916 internal::None, internal::None, internal::None, internal::None> {
3917 typedef internal::Types3<T1, T2, T3> type;
3919template < typename T1, typename T2, typename T3, typename T4>
3920struct Types< T1, T2, T3, T4, internal::None, internal::None, internal::None,
3921 internal::None, internal::None, internal::None, internal::None,
3922 internal::None, internal::None, internal::None, internal::None,
3923 internal::None, internal::None, internal::None, internal::None,
3924 internal::None, internal::None, internal::None, internal::None,
3925 internal::None, internal::None, internal::None, internal::None,
3926 internal::None, internal::None, internal::None, internal::None,
3927 internal::None, internal::None, internal::None, internal::None,
3928 internal::None, internal::None, internal::None, internal::None,
3929 internal::None, internal::None, internal::None, internal::None,
3930 internal::None, internal::None, internal::None, internal::None,
3931 internal::None, internal::None, internal::None> {
3932 typedef internal::Types4<T1, T2, T3, T4> type;
3934template < typename T1, typename T2, typename T3, typename T4, typename T5>
3935struct Types< T1, T2, T3, T4, T5, 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, internal::None, internal::None,
3943 internal::None, internal::None, internal::None, internal::None,
3944 internal::None, internal::None, internal::None, internal::None,
3945 internal::None, internal::None, internal::None, internal::None,
3946 internal::None, internal::None, internal::None> {
3947 typedef internal::Types5<T1, T2, T3, T4, T5> type;
3949template < typename T1, typename T2, typename T3, typename T4, typename T5,
3951struct Types< T1, T2, T3, T4, T5, T6, 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, internal::None, internal::None,
3959 internal::None, internal::None, internal::None, internal::None,
3960 internal::None, internal::None, internal::None, internal::None,
3961 internal::None, internal::None, internal::None, internal::None,
3962 internal::None, internal::None> {
3963 typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
3965template < typename T1, typename T2, typename T3, typename T4, typename T5,
3966 typename T6, typename T7>
3967struct Types< T1, T2, T3, T4, T5, T6, T7, 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,
3974 internal::None, internal::None, internal::None, internal::None,
3975 internal::None, internal::None, internal::None, internal::None,
3976 internal::None, internal::None, internal::None, internal::None,
3977 internal::None, internal::None, internal::None, internal::None,
3979 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
3981template < typename T1, typename T2, typename T3, typename T4, typename T5,
3982 typename T6, typename T7, typename T8>
3983struct Types< T1, T2, T3, T4, T5, T6, T7, T8, 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 internal::None, internal::None, internal::None, internal::None,
3991 internal::None, internal::None, internal::None, internal::None,
3992 internal::None, internal::None, internal::None, internal::None,
3993 internal::None, internal::None, internal::None, internal::None> {
3994 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
3996template < typename T1, typename T2, typename T3, typename T4, typename T5,
3997 typename T6, typename T7, typename T8, typename T9>
3998struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, 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, internal::None,
4005 internal::None, internal::None, internal::None, internal::None,
4006 internal::None, internal::None, internal::None, internal::None,
4007 internal::None, internal::None, internal::None, internal::None,
4008 internal::None, internal::None, internal::None, internal::None> {
4009 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
4011template < typename T1, typename T2, typename T3, typename T4, typename T5,
4012 typename T6, typename T7, typename T8, typename T9, typename T10>
4013struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 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, internal::None,
4020 internal::None, internal::None, internal::None, internal::None,
4021 internal::None, internal::None, internal::None, internal::None,
4022 internal::None, internal::None, internal::None, internal::None,
4023 internal::None, internal::None, internal::None> {
4024 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
4026template < typename T1, typename T2, typename T3, typename T4, typename T5,
4027 typename T6, typename T7, typename T8, typename T9, typename T10,
4029struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 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, internal::None, internal::None,
4036 internal::None, internal::None, internal::None, internal::None,
4037 internal::None, internal::None, internal::None, internal::None,
4038 internal::None, internal::None, internal::None, internal::None,
4039 internal::None, internal::None> {
4040 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
4042template < typename T1, typename T2, typename T3, typename T4, typename T5,
4043 typename T6, typename T7, typename T8, typename T9, typename T10,
4044 typename T11, typename T12>
4045struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, 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,
4051 internal::None, internal::None, internal::None, internal::None,
4052 internal::None, internal::None, internal::None, internal::None,
4053 internal::None, internal::None, internal::None, internal::None,
4054 internal::None, internal::None, internal::None, internal::None,
4056 typedef internal::Types12< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
4059template < typename T1, typename T2, typename T3, typename T4, typename T5,
4060 typename T6, typename T7, typename T8, typename T9, typename T10,
4061 typename T11, typename T12, typename T13>
4062struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
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 internal::None, internal::None, internal::None, internal::None,
4068 internal::None, internal::None, internal::None, internal::None,
4069 internal::None, internal::None, internal::None, internal::None,
4070 internal::None, internal::None, internal::None, internal::None,
4071 internal::None, internal::None, internal::None, internal::None,
4073 typedef internal::Types13< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4076template < typename T1, typename T2, typename T3, typename T4, typename T5,
4077 typename T6, typename T7, typename T8, typename T9, typename T10,
4078 typename T11, typename T12, typename T13, typename T14>
4079struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4080 internal::None, internal::None, internal::None, internal::None,
4081 internal::None, internal::None, internal::None, internal::None,
4082 internal::None, internal::None, internal::None, internal::None,
4083 internal::None, internal::None, internal::None, internal::None,
4084 internal::None, internal::None, internal::None, internal::None,
4085 internal::None, internal::None, internal::None, internal::None,
4086 internal::None, internal::None, internal::None, internal::None,
4087 internal::None, internal::None, internal::None, internal::None,
4088 internal::None, internal::None, internal::None, internal::None> {
4089 typedef internal::Types14< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4092template < typename T1, typename T2, typename T3, typename T4, typename T5,
4093 typename T6, typename T7, typename T8, typename T9, typename T10,
4094 typename T11, typename T12, typename T13, typename T14, typename T15>
4095struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4096 internal::None, internal::None, internal::None, internal::None,
4097 internal::None, internal::None, internal::None, internal::None,
4098 internal::None, internal::None, internal::None, internal::None,
4099 internal::None, internal::None, internal::None, internal::None,
4100 internal::None, internal::None, internal::None, internal::None,
4101 internal::None, internal::None, internal::None, internal::None,
4102 internal::None, internal::None, internal::None, internal::None,
4103 internal::None, internal::None, internal::None, internal::None,
4104 internal::None, internal::None, internal::None> {
4105 typedef internal::Types15< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4106 T13, T14, T15> type;
4108template < typename T1, typename T2, typename T3, typename T4, typename T5,
4109 typename T6, typename T7, typename T8, typename T9, typename T10,
4110 typename T11, typename T12, typename T13, typename T14, typename T15,
4112struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4113 T16, internal::None, internal::None, internal::None, internal::None,
4114 internal::None, internal::None, internal::None, internal::None,
4115 internal::None, internal::None, internal::None, internal::None,
4116 internal::None, internal::None, internal::None, internal::None,
4117 internal::None, internal::None, internal::None, internal::None,
4118 internal::None, internal::None, internal::None, 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> {
4122 typedef internal::Types16< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4123 T13, T14, T15, T16> type;
4125template < typename T1, typename T2, typename T3, typename T4, typename T5,
4126 typename T6, typename T7, typename T8, typename T9, typename T10,
4127 typename T11, typename T12, typename T13, typename T14, typename T15,
4128 typename T16, typename T17>
4129struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4130 T16, T17, internal::None, internal::None, internal::None, internal::None,
4131 internal::None, internal::None, internal::None, internal::None,
4132 internal::None, internal::None, internal::None, internal::None,
4133 internal::None, internal::None, internal::None, internal::None,
4134 internal::None, internal::None, internal::None, internal::None,
4135 internal::None, internal::None, internal::None, internal::None,
4136 internal::None, internal::None, internal::None, internal::None,
4137 internal::None, internal::None, internal::None, internal::None,
4139 typedef internal::Types17< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4140 T13, T14, T15, T16, T17> type;
4142template < typename T1, typename T2, typename T3, typename T4, typename T5,
4143 typename T6, typename T7, typename T8, typename T9, typename T10,
4144 typename T11, typename T12, typename T13, typename T14, typename T15,
4145 typename T16, typename T17, typename T18>
4146struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4147 T16, T17, T18, internal::None, internal::None, internal::None,
4148 internal::None, internal::None, internal::None, internal::None,
4149 internal::None, internal::None, internal::None, internal::None,
4150 internal::None, internal::None, internal::None, internal::None,
4151 internal::None, internal::None, internal::None, internal::None,
4152 internal::None, internal::None, internal::None, internal::None,
4153 internal::None, internal::None, internal::None, internal::None,
4154 internal::None, internal::None, internal::None, internal::None,
4156 typedef internal::Types18< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4157 T13, T14, T15, T16, T17, T18> type;
4159template < typename T1, typename T2, typename T3, typename T4, typename T5,
4160 typename T6, typename T7, typename T8, typename T9, typename T10,
4161 typename T11, typename T12, typename T13, typename T14, typename T15,
4162 typename T16, typename T17, typename T18, typename T19>
4163struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4164 T16, T17, T18, T19, internal::None, internal::None, internal::None,
4165 internal::None, internal::None, internal::None, internal::None,
4166 internal::None, internal::None, internal::None, internal::None,
4167 internal::None, internal::None, internal::None, internal::None,
4168 internal::None, internal::None, internal::None, internal::None,
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 typedef internal::Types19< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4173 T13, T14, T15, T16, T17, T18, T19> type;
4175template < typename T1, typename T2, typename T3, typename T4, typename T5,
4176 typename T6, typename T7, typename T8, typename T9, typename T10,
4177 typename T11, typename T12, typename T13, typename T14, typename T15,
4178 typename T16, typename T17, typename T18, typename T19, typename T20>
4179struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4180 T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
4181 internal::None, internal::None, internal::None, internal::None,
4182 internal::None, internal::None, internal::None, internal::None,
4183 internal::None, internal::None, internal::None, internal::None,
4184 internal::None, internal::None, internal::None, internal::None,
4185 internal::None, internal::None, internal::None, internal::None,
4186 internal::None, internal::None, internal::None, internal::None,
4187 internal::None, internal::None, internal::None> {
4188 typedef internal::Types20< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4189 T13, T14, T15, T16, T17, T18, T19, T20> type;
4191template < typename T1, typename T2, typename T3, typename T4, typename T5,
4192 typename T6, typename T7, typename T8, typename T9, typename T10,
4193 typename T11, typename T12, typename T13, typename T14, typename T15,
4194 typename T16, typename T17, typename T18, typename T19, typename T20,
4196struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4197 T16, T17, T18, T19, T20, T21, internal::None, internal::None,
4198 internal::None, internal::None, internal::None, internal::None,
4199 internal::None, internal::None, internal::None, internal::None,
4200 internal::None, internal::None, internal::None, internal::None,
4201 internal::None, internal::None, internal::None, internal::None,
4202 internal::None, internal::None, internal::None, internal::None,
4203 internal::None, internal::None, internal::None, internal::None,
4204 internal::None, internal::None, internal::None> {
4205 typedef internal::Types21< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4206 T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
4208template < typename T1, typename T2, typename T3, typename T4, typename T5,
4209 typename T6, typename T7, typename T8, typename T9, typename T10,
4210 typename T11, typename T12, typename T13, typename T14, typename T15,
4211 typename T16, typename T17, typename T18, typename T19, typename T20,
4212 typename T21, typename T22>
4213struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4214 T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
4215 internal::None, internal::None, internal::None, internal::None,
4216 internal::None, internal::None, internal::None, internal::None,
4217 internal::None, internal::None, internal::None, internal::None,
4218 internal::None, internal::None, internal::None, internal::None,
4219 internal::None, internal::None, internal::None, internal::None,
4220 internal::None, internal::None, internal::None, internal::None,
4221 internal::None, internal::None> {
4222 typedef internal::Types22< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4223 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
4225template < typename T1, typename T2, typename T3, typename T4, typename T5,
4226 typename T6, typename T7, typename T8, typename T9, typename T10,
4227 typename T11, typename T12, typename T13, typename T14, typename T15,
4228 typename T16, typename T17, typename T18, typename T19, typename T20,
4229 typename T21, typename T22, typename T23>
4230struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4231 T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
4232 internal::None, internal::None, internal::None, internal::None,
4233 internal::None, internal::None, internal::None, internal::None,
4234 internal::None, internal::None, internal::None, internal::None,
4235 internal::None, internal::None, internal::None, internal::None,
4236 internal::None, internal::None, internal::None, internal::None,
4237 internal::None, internal::None, internal::None, internal::None,
4239 typedef internal::Types23< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4240 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
4242template < typename T1, typename T2, typename T3, typename T4, typename T5,
4243 typename T6, typename T7, typename T8, typename T9, typename T10,
4244 typename T11, typename T12, typename T13, typename T14, typename T15,
4245 typename T16, typename T17, typename T18, typename T19, typename T20,
4246 typename T21, typename T22, typename T23, typename T24>
4247struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4248 T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
4249 internal::None, internal::None, internal::None, internal::None,
4250 internal::None, internal::None, internal::None, internal::None,
4251 internal::None, internal::None, internal::None, internal::None,
4252 internal::None, internal::None, internal::None, internal::None,
4253 internal::None, internal::None, internal::None, internal::None,
4254 internal::None, internal::None, internal::None, internal::None,
4256 typedef internal::Types24< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4257 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
4259template < typename T1, typename T2, typename T3, typename T4, typename T5,
4260 typename T6, typename T7, typename T8, typename T9, typename T10,
4261 typename T11, typename T12, typename T13, typename T14, typename T15,
4262 typename T16, typename T17, typename T18, typename T19, typename T20,
4263 typename T21, typename T22, typename T23, typename T24, typename T25>
4264struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4265 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
4266 internal::None, internal::None, internal::None, internal::None,
4267 internal::None, internal::None, internal::None, internal::None,
4268 internal::None, internal::None, internal::None, internal::None,
4269 internal::None, internal::None, internal::None, internal::None,
4270 internal::None, internal::None, internal::None, internal::None,
4271 internal::None, internal::None, internal::None, internal::None> {
4272 typedef internal::Types25< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4273 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
4275template < typename T1, typename T2, typename T3, typename T4, typename T5,
4276 typename T6, typename T7, typename T8, typename T9, typename T10,
4277 typename T11, typename T12, typename T13, typename T14, typename T15,
4278 typename T16, typename T17, typename T18, typename T19, typename T20,
4279 typename T21, typename T22, typename T23, typename T24, typename T25,
4281struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4282 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
4283 internal::None, internal::None, internal::None, internal::None,
4284 internal::None, internal::None, internal::None, internal::None,
4285 internal::None, internal::None, internal::None, internal::None,
4286 internal::None, internal::None, internal::None, internal::None,
4287 internal::None, internal::None, internal::None, internal::None,
4288 internal::None, internal::None, internal::None> {
4289 typedef internal::Types26< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4290 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
4293template < typename T1, typename T2, typename T3, typename T4, typename T5,
4294 typename T6, typename T7, typename T8, typename T9, typename T10,
4295 typename T11, typename T12, typename T13, typename T14, typename T15,
4296 typename T16, typename T17, typename T18, typename T19, typename T20,
4297 typename T21, typename T22, typename T23, typename T24, typename T25,
4298 typename T26, typename T27>
4299struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4300 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
4301 internal::None, internal::None, internal::None, internal::None,
4302 internal::None, internal::None, internal::None, internal::None,
4303 internal::None, internal::None, internal::None, internal::None,
4304 internal::None, internal::None, internal::None, internal::None,
4305 internal::None, internal::None, internal::None, internal::None,
4306 internal::None, internal::None> {
4307 typedef internal::Types27< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4308 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4311template < typename T1, typename T2, typename T3, typename T4, typename T5,
4312 typename T6, typename T7, typename T8, typename T9, typename T10,
4313 typename T11, typename T12, typename T13, typename T14, typename T15,
4314 typename T16, typename T17, typename T18, typename T19, typename T20,
4315 typename T21, typename T22, typename T23, typename T24, typename T25,
4316 typename T26, typename T27, typename T28>
4317struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4318 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
4319 internal::None, internal::None, internal::None, internal::None,
4320 internal::None, internal::None, internal::None, internal::None,
4321 internal::None, internal::None, internal::None, 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> {
4325 typedef internal::Types28< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4326 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4329template < typename T1, typename T2, typename T3, typename T4, typename T5,
4330 typename T6, typename T7, typename T8, typename T9, typename T10,
4331 typename T11, typename T12, typename T13, typename T14, typename T15,
4332 typename T16, typename T17, typename T18, typename T19, typename T20,
4333 typename T21, typename T22, typename T23, typename T24, typename T25,
4334 typename T26, typename T27, typename T28, typename T29>
4335struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4336 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4337 internal::None, internal::None, internal::None, internal::None,
4338 internal::None, internal::None, internal::None, 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,
4343 typedef internal::Types29< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4344 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4345 T27, T28, T29> type;
4347template < typename T1, typename T2, typename T3, typename T4, typename T5,
4348 typename T6, typename T7, typename T8, typename T9, typename T10,
4349 typename T11, typename T12, typename T13, typename T14, typename T15,
4350 typename T16, typename T17, typename T18, typename T19, typename T20,
4351 typename T21, typename T22, typename T23, typename T24, typename T25,
4352 typename T26, typename T27, typename T28, typename T29, typename T30>
4353struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4354 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4355 internal::None, internal::None, internal::None, 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 typedef internal::Types30< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4361 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4362 T27, T28, T29, T30> type;
4364template < typename T1, typename T2, typename T3, typename T4, typename T5,
4365 typename T6, typename T7, typename T8, typename T9, typename T10,
4366 typename T11, typename T12, typename T13, typename T14, typename T15,
4367 typename T16, typename T17, typename T18, typename T19, typename T20,
4368 typename T21, typename T22, typename T23, typename T24, typename T25,
4369 typename T26, typename T27, typename T28, typename T29, typename T30,
4371struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4372 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4373 T31, internal::None, internal::None, internal::None, 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> {
4378 typedef internal::Types31< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4379 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4380 T27, T28, T29, T30, T31> type;
4382template < typename T1, typename T2, typename T3, typename T4, typename T5,
4383 typename T6, typename T7, typename T8, typename T9, typename T10,
4384 typename T11, typename T12, typename T13, typename T14, typename T15,
4385 typename T16, typename T17, typename T18, typename T19, typename T20,
4386 typename T21, typename T22, typename T23, typename T24, typename T25,
4387 typename T26, typename T27, typename T28, typename T29, typename T30,
4388 typename T31, typename T32>
4389struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4390 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4391 T31, T32, internal::None, internal::None, internal::None, internal::None,
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> {
4396 typedef internal::Types32< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4397 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4398 T27, T28, T29, T30, T31, T32> type;
4400template < typename T1, typename T2, typename T3, typename T4, typename T5,
4401 typename T6, typename T7, typename T8, typename T9, typename T10,
4402 typename T11, typename T12, typename T13, typename T14, typename T15,
4403 typename T16, typename T17, typename T18, typename T19, typename T20,
4404 typename T21, typename T22, typename T23, typename T24, typename T25,
4405 typename T26, typename T27, typename T28, typename T29, typename T30,
4406 typename T31, typename T32, typename T33>
4407struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4408 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4409 T31, T32, T33, internal::None, internal::None, internal::None,
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> {
4414 typedef internal::Types33< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4415 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4416 T27, T28, T29, T30, T31, T32, T33> type;
4418template < typename T1, typename T2, typename T3, typename T4, typename T5,
4419 typename T6, typename T7, typename T8, typename T9, typename T10,
4420 typename T11, typename T12, typename T13, typename T14, typename T15,
4421 typename T16, typename T17, typename T18, typename T19, typename T20,
4422 typename T21, typename T22, typename T23, typename T24, typename T25,
4423 typename T26, typename T27, typename T28, typename T29, typename T30,
4424 typename T31, typename T32, typename T33, typename T34>
4425struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4426 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4427 T31, T32, T33, T34, internal::None, internal::None, internal::None,
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,
4432 typedef internal::Types34< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4433 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4434 T27, T28, T29, T30, T31, T32, T33, T34> type;
4436template < typename T1, typename T2, typename T3, typename T4, typename T5,
4437 typename T6, typename T7, typename T8, typename T9, typename T10,
4438 typename T11, typename T12, typename T13, typename T14, typename T15,
4439 typename T16, typename T17, typename T18, typename T19, typename T20,
4440 typename T21, typename T22, typename T23, typename T24, typename T25,
4441 typename T26, typename T27, typename T28, typename T29, typename T30,
4442 typename T31, typename T32, typename T33, typename T34, typename T35>
4443struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4444 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4445 T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
4446 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 typedef internal::Types35< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4450 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4451 T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
4453template < typename T1, typename T2, typename T3, typename T4, typename T5,
4454 typename T6, typename T7, typename T8, typename T9, typename T10,
4455 typename T11, typename T12, typename T13, typename T14, typename T15,
4456 typename T16, typename T17, typename T18, typename T19, typename T20,
4457 typename T21, typename T22, typename T23, typename T24, typename T25,
4458 typename T26, typename T27, typename T28, typename T29, typename T30,
4459 typename T31, typename T32, typename T33, typename T34, typename T35,
4461struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4462 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4463 T31, T32, T33, T34, T35, T36, internal::None, internal::None,
4464 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 typedef internal::Types36< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4468 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4469 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
4471template < typename T1, typename T2, typename T3, typename T4, typename T5,
4472 typename T6, typename T7, typename T8, typename T9, typename T10,
4473 typename T11, typename T12, typename T13, typename T14, typename T15,
4474 typename T16, typename T17, typename T18, typename T19, typename T20,
4475 typename T21, typename T22, typename T23, typename T24, typename T25,
4476 typename T26, typename T27, typename T28, typename T29, typename T30,
4477 typename T31, typename T32, typename T33, typename T34, typename T35,
4478 typename T36, typename T37>
4479struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4480 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4481 T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
4482 internal::None, internal::None, internal::None, internal::None,
4483 internal::None, internal::None, internal::None, internal::None,
4484 internal::None, internal::None, internal::None> {
4485 typedef internal::Types37< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4486 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4487 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
4489template < typename T1, typename T2, typename T3, typename T4, typename T5,
4490 typename T6, typename T7, typename T8, typename T9, typename T10,
4491 typename T11, typename T12, typename T13, typename T14, typename T15,
4492 typename T16, typename T17, typename T18, typename T19, typename T20,
4493 typename T21, typename T22, typename T23, typename T24, typename T25,
4494 typename T26, typename T27, typename T28, typename T29, typename T30,
4495 typename T31, typename T32, typename T33, typename T34, typename T35,
4496 typename T36, typename T37, typename T38>
4497struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4498 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4499 T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
4500 internal::None, internal::None, internal::None, internal::None,
4501 internal::None, internal::None, internal::None, internal::None,
4502 internal::None, internal::None> {
4503 typedef internal::Types38< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4504 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4505 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
4507template < typename T1, typename T2, typename T3, typename T4, typename T5,
4508 typename T6, typename T7, typename T8, typename T9, typename T10,
4509 typename T11, typename T12, typename T13, typename T14, typename T15,
4510 typename T16, typename T17, typename T18, typename T19, typename T20,
4511 typename T21, typename T22, typename T23, typename T24, typename T25,
4512 typename T26, typename T27, typename T28, typename T29, typename T30,
4513 typename T31, typename T32, typename T33, typename T34, typename T35,
4514 typename T36, typename T37, typename T38, typename T39>
4515struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4516 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4517 T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
4518 internal::None, internal::None, internal::None, internal::None,
4519 internal::None, internal::None, internal::None, internal::None,
4520 internal::None, internal::None> {
4521 typedef internal::Types39< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4522 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4523 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
4525template < typename T1, typename T2, typename T3, typename T4, typename T5,
4526 typename T6, typename T7, typename T8, typename T9, typename T10,
4527 typename T11, typename T12, typename T13, typename T14, typename T15,
4528 typename T16, typename T17, typename T18, typename T19, typename T20,
4529 typename T21, typename T22, typename T23, typename T24, typename T25,
4530 typename T26, typename T27, typename T28, typename T29, typename T30,
4531 typename T31, typename T32, typename T33, typename T34, typename T35,
4532 typename T36, typename T37, typename T38, typename T39, typename T40>
4533struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4534 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4535 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
4536 internal::None, internal::None, internal::None, internal::None,
4537 internal::None, internal::None, internal::None, internal::None,
4539 typedef internal::Types40< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4540 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4541 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
4544template < 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, typename T38, typename T39, typename T40,
4553struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4554 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4555 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
4556 internal::None, internal::None, internal::None, internal::None,
4557 internal::None, internal::None, internal::None, internal::None> {
4558 typedef internal::Types41< 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, T38, T39, T40,
4563template < typename T1, typename T2, typename T3, typename T4, typename T5,
4564 typename T6, typename T7, typename T8, typename T9, typename T10,
4565 typename T11, typename T12, typename T13, typename T14, typename T15,
4566 typename T16, typename T17, typename T18, typename T19, typename T20,
4567 typename T21, typename T22, typename T23, typename T24, typename T25,
4568 typename T26, typename T27, typename T28, typename T29, typename T30,
4569 typename T31, typename T32, typename T33, typename T34, typename T35,
4570 typename T36, typename T37, typename T38, typename T39, typename T40,
4571 typename T41, typename T42>
4572struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4573 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4574 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
4575 internal::None, internal::None, internal::None, internal::None,
4576 internal::None, internal::None, internal::None> {
4577 typedef internal::Types42< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4578 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4579 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4582template < typename T1, typename T2, typename T3, typename T4, typename T5,
4583 typename T6, typename T7, typename T8, typename T9, typename T10,
4584 typename T11, typename T12, typename T13, typename T14, typename T15,
4585 typename T16, typename T17, typename T18, typename T19, typename T20,
4586 typename T21, typename T22, typename T23, typename T24, typename T25,
4587 typename T26, typename T27, typename T28, typename T29, typename T30,
4588 typename T31, typename T32, typename T33, typename T34, typename T35,
4589 typename T36, typename T37, typename T38, typename T39, typename T40,
4590 typename T41, typename T42, typename T43>
4591struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4592 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4593 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4594 internal::None, internal::None, internal::None, internal::None,
4595 internal::None, internal::None, internal::None> {
4596 typedef internal::Types43< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4597 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4598 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4599 T41, T42, T43> type;
4601template < typename T1, typename T2, typename T3, typename T4, typename T5,
4602 typename T6, typename T7, typename T8, typename T9, typename T10,
4603 typename T11, typename T12, typename T13, typename T14, typename T15,
4604 typename T16, typename T17, typename T18, typename T19, typename T20,
4605 typename T21, typename T22, typename T23, typename T24, typename T25,
4606 typename T26, typename T27, typename T28, typename T29, typename T30,
4607 typename T31, typename T32, typename T33, typename T34, typename T35,
4608 typename T36, typename T37, typename T38, typename T39, typename T40,
4609 typename T41, typename T42, typename T43, typename T44>
4610struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4611 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4612 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
4613 internal::None, internal::None, internal::None, internal::None,
4614 internal::None, internal::None> {
4615 typedef internal::Types44< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4616 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4617 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4618 T41, T42, T43, T44> type;
4620template < typename T1, typename T2, typename T3, typename T4, typename T5,
4621 typename T6, typename T7, typename T8, typename T9, typename T10,
4622 typename T11, typename T12, typename T13, typename T14, typename T15,
4623 typename T16, typename T17, typename T18, typename T19, typename T20,
4624 typename T21, typename T22, typename T23, typename T24, typename T25,
4625 typename T26, typename T27, typename T28, typename T29, typename T30,
4626 typename T31, typename T32, typename T33, typename T34, typename T35,
4627 typename T36, typename T37, typename T38, typename T39, typename T40,
4628 typename T41, typename T42, typename T43, typename T44, typename T45>
4629struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4630 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4631 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4632 internal::None, internal::None, internal::None, internal::None,
4634 typedef internal::Types45< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4635 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4636 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4637 T41, T42, T43, T44, T45> type;
4639template < typename T1, typename T2, typename T3, typename T4, typename T5,
4640 typename T6, typename T7, typename T8, typename T9, typename T10,
4641 typename T11, typename T12, typename T13, typename T14, typename T15,
4642 typename T16, typename T17, typename T18, typename T19, typename T20,
4643 typename T21, typename T22, typename T23, typename T24, typename T25,
4644 typename T26, typename T27, typename T28, typename T29, typename T30,
4645 typename T31, typename T32, typename T33, typename T34, typename T35,
4646 typename T36, typename T37, typename T38, typename T39, typename T40,
4647 typename T41, typename T42, typename T43, typename T44, typename T45,
4649struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4650 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4651 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4652 T46, internal::None, internal::None, internal::None, internal::None> {
4653 typedef internal::Types46< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4654 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4655 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4656 T41, T42, T43, T44, T45, T46> type;
4658template < typename T1, typename T2, typename T3, typename T4, typename T5,
4659 typename T6, typename T7, typename T8, typename T9, typename T10,
4660 typename T11, typename T12, typename T13, typename T14, typename T15,
4661 typename T16, typename T17, typename T18, typename T19, typename T20,
4662 typename T21, typename T22, typename T23, typename T24, typename T25,
4663 typename T26, typename T27, typename T28, typename T29, typename T30,
4664 typename T31, typename T32, typename T33, typename T34, typename T35,
4665 typename T36, typename T37, typename T38, typename T39, typename T40,
4666 typename T41, typename T42, typename T43, typename T44, typename T45,
4667 typename T46, typename T47>
4668struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4669 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4670 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4671 T46, T47, internal::None, internal::None, internal::None> {
4672 typedef internal::Types47< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4673 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4674 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4675 T41, T42, T43, T44, T45, T46, T47> type;
4677template < typename T1, typename T2, typename T3, typename T4, typename T5,
4678 typename T6, typename T7, typename T8, typename T9, typename T10,
4679 typename T11, typename T12, typename T13, typename T14, typename T15,
4680 typename T16, typename T17, typename T18, typename T19, typename T20,
4681 typename T21, typename T22, typename T23, typename T24, typename T25,
4682 typename T26, typename T27, typename T28, typename T29, typename T30,
4683 typename T31, typename T32, typename T33, typename T34, typename T35,
4684 typename T36, typename T37, typename T38, typename T39, typename T40,
4685 typename T41, typename T42, typename T43, typename T44, typename T45,
4686 typename T46, typename T47, typename T48>
4687struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4688 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4689 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4690 T46, T47, T48, internal::None, internal::None> {
4691 typedef internal::Types48< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4692 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4693 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4694 T41, T42, T43, T44, T45, T46, T47, T48> type;
4696template < typename T1, typename T2, typename T3, typename T4, typename T5,
4697 typename T6, typename T7, typename T8, typename T9, typename T10,
4698 typename T11, typename T12, typename T13, typename T14, typename T15,
4699 typename T16, typename T17, typename T18, typename T19, typename T20,
4700 typename T21, typename T22, typename T23, typename T24, typename T25,
4701 typename T26, typename T27, typename T28, typename T29, typename T30,
4702 typename T31, typename T32, typename T33, typename T34, typename T35,
4703 typename T36, typename T37, typename T38, typename T39, typename T40,
4704 typename T41, typename T42, typename T43, typename T44, typename T45,
4705 typename T46, typename T47, typename T48, typename T49>
4706struct Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4707 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4708 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4709 T46, T47, T48, T49, internal::None> {
4710 typedef internal::Types49< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4711 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4712 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4713 T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
4718# define GTEST_TEMPLATE_ template <typename T> class
4728template <GTEST_TEMPLATE_ Tmpl>
4730 template < typename T>
4732 typedef Tmpl<T> type;
4736# define GTEST_BIND_(TmplSel, T) \
4737 TmplSel::template Bind<T>::type
4743template < typename T>
4754struct Templates0 {};
4758template <GTEST_TEMPLATE_ T1>
4760 typedef TemplateSel<T1> Head;
4761 typedef Templates0 Tail;
4763template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
4765 typedef TemplateSel<T1> Head;
4766 typedef Templates1<T2> Tail;
4769template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
4771 typedef TemplateSel<T1> Head;
4772 typedef Templates2<T2, T3> Tail;
4775template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4778 typedef TemplateSel<T1> Head;
4779 typedef Templates3<T2, T3, T4> Tail;
4782template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4783 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
4785 typedef TemplateSel<T1> Head;
4786 typedef Templates4<T2, T3, T4, T5> Tail;
4789template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4790 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
4792 typedef TemplateSel<T1> Head;
4793 typedef Templates5<T2, T3, T4, T5, T6> Tail;
4796template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4797 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4800 typedef TemplateSel<T1> Head;
4801 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
4804template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4805 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4806 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
4808 typedef TemplateSel<T1> Head;
4809 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
4812template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4813 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4814 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
4816 typedef TemplateSel<T1> Head;
4817 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
4820template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4821 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4822 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4823 GTEST_TEMPLATE_ T10>
4825 typedef TemplateSel<T1> Head;
4826 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
4829template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4830 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4831 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4832 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
4834 typedef TemplateSel<T1> Head;
4835 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
4838template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4839 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4840 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4841 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
4843 typedef TemplateSel<T1> Head;
4844 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
4847template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4848 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4849 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4850 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4851 GTEST_TEMPLATE_ T13>
4853 typedef TemplateSel<T1> Head;
4854 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
4857template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4858 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4859 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4860 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4861 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
4863 typedef TemplateSel<T1> Head;
4864 typedef Templates13< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
4868template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4869 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4870 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4871 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4872 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
4874 typedef TemplateSel<T1> Head;
4875 typedef Templates14< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4879template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4880 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4881 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4882 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4883 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4884 GTEST_TEMPLATE_ T16>
4886 typedef TemplateSel<T1> Head;
4887 typedef Templates15< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4891template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4892 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4893 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4894 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4895 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4896 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
4898 typedef TemplateSel<T1> Head;
4899 typedef Templates16< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4900 T15, T16, T17> Tail;
4903template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4904 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4905 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4906 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4907 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4908 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
4910 typedef TemplateSel<T1> Head;
4911 typedef Templates17< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4912 T15, T16, T17, T18> Tail;
4915template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4916 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4917 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4918 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4919 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4920 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4921 GTEST_TEMPLATE_ T19>
4923 typedef TemplateSel<T1> Head;
4924 typedef Templates18< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4925 T15, T16, T17, T18, T19> Tail;
4928template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4929 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4930 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4931 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4932 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4933 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4934 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
4936 typedef TemplateSel<T1> Head;
4937 typedef Templates19< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4938 T15, T16, T17, T18, T19, T20> Tail;
4941template <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 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4947 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
4949 typedef TemplateSel<T1> Head;
4950 typedef Templates20< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4951 T15, T16, T17, T18, T19, T20, T21> Tail;
4954template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4955 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4956 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4957 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4958 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4959 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4960 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
4961 GTEST_TEMPLATE_ T22>
4963 typedef TemplateSel<T1> Head;
4964 typedef Templates21< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4965 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
4968template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4969 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4970 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4971 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4972 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4973 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4974 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
4975 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
4977 typedef TemplateSel<T1> Head;
4978 typedef Templates22< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4979 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
4982template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4983 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4984 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4985 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
4986 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
4987 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
4988 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
4989 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
4991 typedef TemplateSel<T1> Head;
4992 typedef Templates23< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4993 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
4996template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
4997 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
4998 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
4999 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5000 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5001 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5002 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5003 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5004 GTEST_TEMPLATE_ T25>
5006 typedef TemplateSel<T1> Head;
5007 typedef Templates24< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5008 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
5011template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5012 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5013 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5014 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5015 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5016 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5017 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5018 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5019 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
5021 typedef TemplateSel<T1> Head;
5022 typedef Templates25< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5023 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
5026template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5027 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5028 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5029 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5030 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5031 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5032 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5033 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5034 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
5036 typedef TemplateSel<T1> Head;
5037 typedef Templates26< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5038 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
5041template <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, GTEST_TEMPLATE_ T24,
5049 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5050 GTEST_TEMPLATE_ T28>
5052 typedef TemplateSel<T1> Head;
5053 typedef Templates27< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5054 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5058template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5059 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5060 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5061 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5062 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5063 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5064 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5065 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5066 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5067 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
5069 typedef TemplateSel<T1> Head;
5070 typedef Templates28< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5071 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5075template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5076 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5077 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5078 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5079 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5080 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5081 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5082 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5083 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5084 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
5086 typedef TemplateSel<T1> Head;
5087 typedef Templates29< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5088 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5092template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5093 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5094 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5095 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5096 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5097 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5098 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5099 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5100 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5101 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5102 GTEST_TEMPLATE_ T31>
5104 typedef TemplateSel<T1> Head;
5105 typedef Templates30< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5106 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5107 T29, T30, T31> Tail;
5110template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5111 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5112 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5113 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5114 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5115 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5116 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5117 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5118 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5119 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5120 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
5122 typedef TemplateSel<T1> Head;
5123 typedef Templates31< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5124 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5125 T29, T30, T31, T32> Tail;
5128template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5129 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5130 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5131 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5132 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5133 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5134 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5135 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5136 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5137 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5138 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
5140 typedef TemplateSel<T1> Head;
5141 typedef Templates32< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5142 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5143 T29, T30, T31, T32, T33> Tail;
5146template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5147 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5148 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5149 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5150 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5151 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5152 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5153 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5154 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5155 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5156 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5157 GTEST_TEMPLATE_ T34>
5159 typedef TemplateSel<T1> Head;
5160 typedef Templates33< 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,
5162 T29, T30, T31, T32, T33, T34> Tail;
5165template <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, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5176 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
5178 typedef TemplateSel<T1> Head;
5179 typedef Templates34< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5180 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5181 T29, T30, T31, T32, T33, T34, T35> Tail;
5184template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5185 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5186 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5187 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5188 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5189 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5190 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5191 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5192 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5193 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5194 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5195 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
5197 typedef TemplateSel<T1> Head;
5198 typedef Templates35< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5199 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5200 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
5203template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5204 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5205 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5206 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5207 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5208 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5209 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5210 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5211 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5212 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5213 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5214 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5215 GTEST_TEMPLATE_ T37>
5217 typedef TemplateSel<T1> Head;
5218 typedef Templates36< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5219 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5220 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
5223template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5224 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5225 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5226 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5227 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5228 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5229 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5230 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5231 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5232 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5233 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5234 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5235 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
5237 typedef TemplateSel<T1> Head;
5238 typedef Templates37< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5239 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5240 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
5243template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5244 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5245 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5246 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5247 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5248 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5249 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5250 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5251 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5252 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5253 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5254 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5255 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
5257 typedef TemplateSel<T1> Head;
5258 typedef Templates38< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5259 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5260 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
5263template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5264 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5265 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5266 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5267 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5268 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5269 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5270 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5271 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5272 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5273 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5274 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5275 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5276 GTEST_TEMPLATE_ T40>
5278 typedef TemplateSel<T1> Head;
5279 typedef Templates39< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5280 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5281 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5284template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5285 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5286 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5287 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5288 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5289 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5290 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5291 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5292 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5293 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5294 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5295 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5296 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5297 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
5299 typedef TemplateSel<T1> Head;
5300 typedef Templates40< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5301 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5302 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5305template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5306 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5307 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5308 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5309 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5310 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5311 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5312 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5313 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5314 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5315 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5316 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5317 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5318 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
5320 typedef TemplateSel<T1> Head;
5321 typedef Templates41< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5322 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5323 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5327template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5328 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5329 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5330 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5331 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5332 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5333 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5334 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5335 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5336 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5337 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5338 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5339 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5340 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5341 GTEST_TEMPLATE_ T43>
5343 typedef TemplateSel<T1> Head;
5344 typedef Templates42< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5345 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5346 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5350template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5351 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5352 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5353 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5354 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5355 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5356 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5357 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5358 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5359 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5360 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5361 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5362 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5363 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5364 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
5366 typedef TemplateSel<T1> Head;
5367 typedef Templates43< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5368 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5369 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5373template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5374 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5375 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5376 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5377 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5378 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5379 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5380 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5381 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5382 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5383 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5384 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5385 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5386 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5387 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
5389 typedef TemplateSel<T1> Head;
5390 typedef Templates44< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5391 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5392 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5393 T43, T44, T45> Tail;
5396template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5397 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5398 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5399 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5400 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5401 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5402 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5403 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5404 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5405 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5406 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5407 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5408 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5409 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5410 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5411 GTEST_TEMPLATE_ T46>
5413 typedef TemplateSel<T1> Head;
5414 typedef Templates45< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5415 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5416 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5417 T43, T44, T45, T46> Tail;
5420template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5421 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5422 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5423 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5424 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5425 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5426 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5427 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5428 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5429 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5430 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5431 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5432 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5433 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5434 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5435 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
5437 typedef TemplateSel<T1> Head;
5438 typedef Templates46< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5439 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5440 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5441 T43, T44, T45, T46, T47> Tail;
5444template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5445 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5446 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5447 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5448 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5449 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5450 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5451 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5452 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5453 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5454 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5455 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5456 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5457 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5458 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5459 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
5461 typedef TemplateSel<T1> Head;
5462 typedef Templates47< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5463 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5464 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5465 T43, T44, T45, T46, T47, T48> Tail;
5468template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5469 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5470 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5471 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5472 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5473 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5474 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5475 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5476 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5477 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5478 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5479 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5480 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5481 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5482 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5483 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
5484 GTEST_TEMPLATE_ T49>
5486 typedef TemplateSel<T1> Head;
5487 typedef Templates48< 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, T47, T48, T49> Tail;
5493template <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, GTEST_TEMPLATE_ T48,
5509 GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
5511 typedef TemplateSel<T1> Head;
5512 typedef Templates49< T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5513 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5514 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5515 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
5532template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
5533 GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
5534 GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
5535 GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
5536 GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
5537 GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
5538 GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
5539 GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
5540 GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
5541 GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
5542 GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
5543 GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
5544 GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
5545 GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
5546 GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
5547 GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
5548 GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
5549 GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
5550 GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
5551 GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
5552 GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
5553 GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
5554 GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
5555 GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
5556 GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
5558 typedef Templates50< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5559 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5560 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5561 T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
5565struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5566 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5567 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5568 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5569 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5571 typedef Templates0 type;
5573template <GTEST_TEMPLATE_ T1>
5574struct Templates< T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5575 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5576 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5577 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5578 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5580 typedef Templates1<T1> type;
5582template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
5583struct Templates< T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5584 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5585 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5586 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5587 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5589 typedef Templates2<T1, T2> type;
5591template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
5592struct Templates< T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5593 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5594 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5595 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5596 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5597 typedef Templates3<T1, T2, T3> type;
5599template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5601struct Templates< T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5602 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5603 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5604 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5605 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5606 typedef Templates4<T1, T2, T3, T4> type;
5608template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5609 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
5610struct Templates< T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5611 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5612 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5613 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5614 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5615 typedef Templates5<T1, T2, T3, T4, T5> type;
5617template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5618 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
5619struct Templates< T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
5620 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5621 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5622 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5623 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5624 typedef Templates6<T1, T2, T3, T4, T5, T6> type;
5626template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5627 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5629struct Templates< T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
5630 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5631 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5632 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5633 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5634 typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
5636template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5637 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5638 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
5639struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, 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,
5643 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5644 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
5646template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5647 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5648 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
5649struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, 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,
5652 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5653 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5654 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
5656template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5657 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5658 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5659 GTEST_TEMPLATE_ T10>
5660struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
5661 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5662 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5663 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5664 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5665 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
5667template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5668 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5669 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5670 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
5671struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
5672 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5673 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5674 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5675 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5676 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
5678template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5679 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5680 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5681 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
5682struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
5683 NoneT, NoneT, NoneT, NoneT, 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> {
5687 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
5689template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5690 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5691 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5692 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5693 GTEST_TEMPLATE_ T13>
5694struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
5695 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5696 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5697 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5698 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5699 typedef Templates13< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
5702template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5703 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5704 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5705 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5706 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
5707struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5708 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5709 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5710 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5711 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5712 typedef Templates14< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5715template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5716 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5717 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5718 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5719 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
5720struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5721 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5722 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5723 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5724 NoneT, NoneT, NoneT, NoneT, NoneT> {
5725 typedef Templates15< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5728template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5729 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5730 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5731 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5732 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5733 GTEST_TEMPLATE_ T16>
5734struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5735 T15, T16, 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, NoneT, NoneT, NoneT,
5738 NoneT, NoneT, NoneT, NoneT, NoneT> {
5739 typedef Templates16< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5740 T14, T15, T16> type;
5742template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5743 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5744 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5745 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5746 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5747 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
5748struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5749 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5750 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5751 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5752 NoneT, NoneT, NoneT, NoneT, NoneT> {
5753 typedef Templates17< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5754 T14, T15, T16, T17> type;
5756template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5757 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5758 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5759 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5760 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5761 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
5762struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5763 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5764 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5765 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5766 NoneT, NoneT, NoneT, NoneT> {
5767 typedef Templates18< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5768 T14, T15, T16, T17, T18> type;
5770template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5771 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5772 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5773 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5774 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5775 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5776 GTEST_TEMPLATE_ T19>
5777struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5778 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5779 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5780 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5781 NoneT, NoneT, NoneT, NoneT> {
5782 typedef Templates19< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5783 T14, T15, T16, T17, T18, T19> type;
5785template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5786 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5787 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5788 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5789 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5790 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5791 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
5792struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5793 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5794 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> {
5797 typedef Templates20< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5798 T14, T15, T16, T17, T18, T19, T20> type;
5800template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5801 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5802 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5803 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5804 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5805 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5806 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
5807struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5808 T15, T16, T17, T18, T19, T20, T21, 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> {
5812 typedef Templates21< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5813 T14, T15, T16, T17, T18, T19, T20, T21> type;
5815template <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, GTEST_TEMPLATE_ T18,
5821 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5822 GTEST_TEMPLATE_ T22>
5823struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5824 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
5825 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5826 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5827 NoneT, NoneT, NoneT> {
5828 typedef Templates22< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5829 T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
5831template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5832 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5833 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5834 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5835 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5836 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5837 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5838 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
5839struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5840 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
5841 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5842 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5843 NoneT, NoneT, NoneT> {
5844 typedef Templates23< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5845 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
5847template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5848 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5849 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5850 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5851 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5852 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5853 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5854 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
5855struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5856 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
5857 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5858 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5859 NoneT, NoneT, NoneT> {
5860 typedef Templates24< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5861 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
5863template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5864 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5865 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5866 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5867 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5868 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5869 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5870 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5871 GTEST_TEMPLATE_ T25>
5872struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5873 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
5874 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5875 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5877 typedef Templates25< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5878 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
5880template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5881 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5882 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5883 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5884 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5885 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5886 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5887 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5888 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
5889struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5890 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
5891 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5892 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5894 typedef Templates26< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5895 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
5897template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5898 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5899 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5900 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5901 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5902 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5903 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5904 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5905 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
5906struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5907 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
5908 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5909 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5911 typedef Templates27< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5912 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5915template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5916 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5917 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5918 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5919 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5920 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5921 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5922 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5923 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5924 GTEST_TEMPLATE_ T28>
5925struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5926 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5927 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5928 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5930 typedef Templates28< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5931 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5934template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5935 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5936 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5937 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5938 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5939 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5940 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5941 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5942 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5943 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
5944struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5945 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5946 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5947 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5949 typedef Templates29< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5950 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5953template <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, GTEST_TEMPLATE_ T27,
5962 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
5963struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5964 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5965 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5966 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5967 typedef Templates30< 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, T27,
5969 T28, T29, T30> type;
5971template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5972 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5973 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5974 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5975 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5976 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5977 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5978 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5979 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5980 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5981 GTEST_TEMPLATE_ T31>
5982struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5983 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
5984 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5985 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5986 typedef Templates31< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5987 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5988 T28, T29, T30, T31> type;
5990template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5991 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5992 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5993 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5994 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5995 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5996 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5997 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5998 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5999 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6000 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
6001struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6002 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6003 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6004 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6005 typedef Templates32< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6006 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6007 T28, T29, T30, T31, T32> type;
6009template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6010 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6011 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6012 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6013 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6014 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6015 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6016 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6017 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6018 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6019 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
6020struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6021 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6022 T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6023 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6024 typedef Templates33< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6025 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6026 T28, T29, T30, T31, T32, T33> type;
6028template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6029 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6030 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6031 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6032 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6033 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6034 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6035 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6036 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6037 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6038 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6039 GTEST_TEMPLATE_ T34>
6040struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6041 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6042 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6043 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6044 typedef Templates34< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6045 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6046 T28, T29, T30, T31, T32, T33, T34> type;
6048template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6049 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6050 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6051 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6052 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6053 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6054 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6055 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6056 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6057 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6058 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6059 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
6060struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6061 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6062 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6063 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6064 typedef Templates35< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6065 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6066 T28, T29, T30, T31, T32, T33, T34, T35> type;
6068template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6069 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6070 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6071 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6072 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6073 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6074 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6075 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6076 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6077 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6078 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6079 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
6080struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6081 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6082 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
6083 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6084 typedef Templates36< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6085 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6086 T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
6088template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6089 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6090 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6091 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6092 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6093 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6094 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6095 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6096 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6097 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6098 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6099 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6100 GTEST_TEMPLATE_ T37>
6101struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6102 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6103 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
6104 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6105 typedef Templates37< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6106 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6107 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
6109template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6110 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6111 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6112 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6113 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6114 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6115 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6116 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6117 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6118 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6119 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6120 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6121 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
6122struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6123 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6124 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
6125 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6126 typedef Templates38< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6127 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6128 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
6130template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6131 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6132 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6133 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6134 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6135 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6136 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6137 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6138 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6139 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6140 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6141 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6142 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
6143struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6144 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6145 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
6146 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6147 typedef Templates39< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6148 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6149 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
6151template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6152 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6153 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6154 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6155 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6156 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6157 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6158 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6159 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6160 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6161 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6162 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6163 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6164 GTEST_TEMPLATE_ T40>
6165struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6166 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6167 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
6168 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6169 typedef Templates40< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6170 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6171 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
6173template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6174 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6175 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6176 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6177 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6178 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6179 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6180 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6181 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6182 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6183 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6184 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6185 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6186 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
6187struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6188 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6189 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
6190 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6191 typedef Templates41< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6192 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6193 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6196template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6197 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6198 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6199 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6200 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6201 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6202 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6203 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6204 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6205 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6206 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6207 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6208 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6209 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
6210struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6211 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6212 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
6213 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6214 typedef Templates42< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6215 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6216 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6219template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6220 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6221 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6222 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6223 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6224 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6225 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6226 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6227 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6228 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6229 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6230 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6231 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6232 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6233 GTEST_TEMPLATE_ T43>
6234struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6235 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6236 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6237 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6238 typedef Templates43< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6239 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6240 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6243template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6244 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6245 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6246 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6247 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6248 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6249 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6250 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6251 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6252 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6253 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6254 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6255 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6256 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6257 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
6258struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6259 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6260 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6261 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6262 typedef Templates44< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6263 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6264 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6265 T42, T43, T44> type;
6267template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6268 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6269 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6270 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6271 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6272 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6273 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6274 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6275 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6276 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6277 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6278 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6279 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6280 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6281 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
6282struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6283 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6284 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6285 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
6286 typedef Templates45< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6287 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6288 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6289 T42, T43, T44, T45> type;
6291template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6292 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6293 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6294 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6295 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6296 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6297 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6298 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6299 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6300 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6301 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6302 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6303 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6304 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6305 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6306 GTEST_TEMPLATE_ T46>
6307struct 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, T44,
6310 T45, T46, NoneT, NoneT, NoneT, NoneT> {
6311 typedef Templates46< 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,
6314 T42, T43, T44, T45, T46> type;
6316template <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, GTEST_TEMPLATE_ T45,
6331 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
6332struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6333 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6334 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6335 T45, T46, T47, NoneT, NoneT, NoneT> {
6336 typedef Templates47< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6337 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6338 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6339 T42, T43, T44, T45, T46, T47> type;
6341template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6342 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6343 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6344 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6345 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6346 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6347 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6348 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6349 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6350 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6351 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6352 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6353 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6354 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6355 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6356 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
6357struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6358 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6359 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6360 T45, T46, T47, T48, NoneT, NoneT> {
6361 typedef Templates48< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6362 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6363 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6364 T42, T43, T44, T45, T46, T47, T48> type;
6366template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6367 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6368 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6369 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6370 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6371 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6372 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6373 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6374 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6375 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6376 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6377 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6378 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6379 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6380 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6381 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
6382 GTEST_TEMPLATE_ T49>
6383struct Templates< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6384 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6385 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6386 T45, T46, T47, T48, T49, NoneT> {
6387 typedef Templates49< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6388 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6389 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6390 T42, T43, T44, T45, T46, T47, T48, T49> type;
6397template < typename T>
6399 typedef Types1<T> type;
6402template < typename T1, typename T2, typename T3, typename T4, typename T5,
6403 typename T6, typename T7, typename T8, typename T9, typename T10,
6404 typename T11, typename T12, typename T13, typename T14, typename T15,
6405 typename T16, typename T17, typename T18, typename T19, typename T20,
6406 typename T21, typename T22, typename T23, typename T24, typename T25,
6407 typename T26, typename T27, typename T28, typename T29, typename T30,
6408 typename T31, typename T32, typename T33, typename T34, typename T35,
6409 typename T36, typename T37, typename T38, typename T39, typename T40,
6410 typename T41, typename T42, typename T43, typename T44, typename T45,
6411 typename T46, typename T47, typename T48, typename T49, typename T50>
6412struct TypeList<Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6413 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6414 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6415 T44, T45, T46, T47, T48, T49, T50> > {
6416 typedef typename Types< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
6417 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6418 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6419 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
6437#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
6438#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
6441#define GTEST_STRINGIFY_(name) #name
6449class AssertionResult;
6453class TestPartResult;
6456template < typename T>
6480 template < typename T,
6490#if GTEST_HAS_EXCEPTIONS
6501class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
6503 explicit GoogleTestFailureException( const TestPartResult& failure);
6510namespace edit_distance {
6518 const std::vector<size_t>& left, const std::vector<size_t>& right);
6522 const std::vector<std::string>& left,
6523 const std::vector<std::string>& right);
6527 const std::vector<std::string>& right,
6528 size_t context = 2);
6538 size_t* total_line_count);
6556 const char* actual_expression,
6559 bool ignoring_case);
6563 const AssertionResult& assertion_result,
6564 const char* expression_text,
6565 const char* actual_predicate_value,
6566 const char* expected_predicate_value);
6597template < typename RawType>
6611 std::numeric_limits<RawType>::digits - 1;
6656 return fp.u_.value_;
6699 return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
6705 union FloatingPointUnion {
6725 static Bits SignAndMagnitudeToBiased( const Bits &sam) {
6737 static Bits DistanceBetweenSignAndMagnitudeNumbers( const Bits &sam1,
6739 const Bits biased1 = SignAndMagnitudeToBiased(sam1);
6740 const Bits biased2 = SignAndMagnitudeToBiased(sam2);
6741 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
6744 FloatingPointUnion u_;
6767template < typename T>
6776template < typename T>
6782template < typename T>
6817template < class TestClass>
6829GTEST_API_ AssertionResult IsHRESULTSuccess( const char* expr,
6831GTEST_API_ AssertionResult IsHRESULTFailure( const char* expr,
6856 return a == def ? nullptr : a;
6859template < typename T>
6867 typename std::conditional< sizeof(T) != 0, ::testing::Test, void>::type;
6877 << "Test can not provide both SetUpTestSuite and SetUpTestCase, please "
6878 "make sure there is only one present at "
6879 << filename << ":" << line_num;
6881 return test_case_fp != nullptr ? test_case_fp : test_suite_fp;
6892 << "Test can not provide both TearDownTestSuite and TearDownTestCase,"
6893 " please make sure there is only one present at"
6894 << filename << ":" << line_num;
6896 return test_case_fp != nullptr ? test_case_fp : test_suite_fp;
6919 const char* test_suite_name, const char* name, const char* type_param,
6929#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
6937 TypedTestSuitePState() : registered_( false) {}
6942 bool AddTestName( const char* file, int line, const char* case_name,
6943 const char* test_name) {
6946 "%s Test %s must be defined before "
6947 "REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n",
6952 registered_tests_.insert(
6953 ::std::make_pair(test_name, CodeLocation(file, line)));
6957 bool TestExists( const std::string& test_name) const {
6958 return registered_tests_.count(test_name) > 0;
6961 const CodeLocation& GetCodeLocation( const std::string& test_name) const {
6962 RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);
6970 const char* VerifyRegisteredTestNames(
6971 const char* file, int line, const char* registered_tests);
6974 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;
6977 RegisteredTestsMap registered_tests_;
6981#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
6982using TypedTestCasePState = TypedTestSuitePState;
6989inline const char* SkipComma(const char* str) {
6990 const char* comma = strchr(str, ',');
6991 if (comma == nullptr) {
6994 while ( IsSpace(*(++comma))) {}
7000inline std::string GetPrefixUntilComma( const char* str) {
7001 const char* comma = strchr(str, ',');
7002 return comma == nullptr ? str : std::string(str, comma);
7008 ::std::vector< ::std::string>* dest);
7012struct DefaultNameGenerator {
7013 template < typename T>
7019template < typename Prov ided = DefaultNameGenerator>
7020struct NameGeneratorSelector {
7021 typedef Provided type;
7024template < typename NameGenerator>
7025void GenerateNamesRecursively(Types0, std::vector<std::string>*, int) {}
7027template < typename NameGenerator, typename Types>
7028void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) {
7029 result->push_back(NameGenerator::template GetName<typename Types::Head>(i));
7030 GenerateNamesRecursively<NameGenerator>( typename Types::Tail(), result,
7034template < typename NameGenerator, typename Types>
7035std::vector<std::string> GenerateNames() {
7036 std::vector<std::string> result;
7037 GenerateNamesRecursively<NameGenerator>(Types(), &result, 0);
7048template <GTEST_TEMPLATE_ Fixture, class TestSel, typename Types>
7049class TypeParameterizedTest {
7055 static bool Register( const char* prefix, const CodeLocation& code_location,
7056 const char* case_name, const char* test_names, int index,
7057 const std::vector<std::string>& type_names =
7058 GenerateNames<DefaultNameGenerator, Types>()) {
7059 typedef typename Types::Head Type;
7060 typedef Fixture<Type> FixtureClass;
7061 typedef typename GTEST_BIND_(TestSel, Type) TestClass;
7066 ( std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name +
7067 "/" + type_names[ static_cast<size_t>( index)])
7070 GetTypeName<Type>().c_str(),
7072 code_location, GetTypeId<FixtureClass>(),
7074 code_location.file.c_str(), code_location.line),
7076 code_location.file.c_str(), code_location.line),
7077 new TestFactoryImpl<TestClass>);
7080 return TypeParameterizedTest<Fixture, TestSel,
7081 typename Types::Tail>::Register(prefix,
7091template <GTEST_TEMPLATE_ Fixture, class TestSel>
7092class TypeParameterizedTest<Fixture, TestSel, Types0> {
7094 static bool Register( const char* , const CodeLocation&,
7095 const char* , const char* ,
7097 const std::vector<std::string>& =
7098 std::vector<std::string>() ) {
7107template <GTEST_TEMPLATE_ Fixture, typename Tests, typename Types>
7108class TypeParameterizedTestSuite {
7110 static bool Register( const char* prefix, CodeLocation code_location,
7111 const TypedTestSuitePState* state, const char* case_name,
7112 const char* test_names,
7113 const std::vector<std::string>& type_names =
7114 GenerateNames<DefaultNameGenerator, Types>()) {
7116 GetPrefixUntilComma(test_names));
7117 if (!state->TestExists(test_name)) {
7118 fprintf(stderr, "Failed to get code location for test %s.%s at %s.",
7119 case_name, test_name.c_str(),
7121 code_location.line).c_str());
7125 const CodeLocation& test_location = state->GetCodeLocation(test_name);
7127 typedef typename Tests::Head Head;
7130 TypeParameterizedTest<Fixture, Head, Types>::Register(
7131 prefix, test_location, case_name, test_names, 0, type_names);
7134 return TypeParameterizedTestSuite<Fixture, typename Tests::Tail,
7135 Types>::Register(prefix, code_location,
7137 SkipComma(test_names),
7143template <GTEST_TEMPLATE_ Fixture, typename Types>
7144class TypeParameterizedTestSuite<Fixture, Templates0, Types> {
7146 static bool Register( const char* , const CodeLocation&,
7147 const TypedTestSuitePState* ,
7148 const char* , const char* ,
7149 const std::vector<std::string>& =
7150 std::vector<std::string>() ) {
7168 UnitTest* unit_test, int skip_count);
7184 operator bool() const { return true; }
7211#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
7212 typename std::remove_const<typename std::remove_reference<T>::type>::type
7216template < typename T>
7219 std::is_convertible<const T*, const ::proto2::Message*>::value> {};
7247 class Iterator = decltype(::std::declval<const C&>().begin()),
7248 class = decltype(::std::declval<const C&>().end()),
7249 class = decltype(++::std::declval<Iterator&>()),
7250 class = decltype(*::std::declval<Iterator>()),
7251 class = typename C::const_iterator>
7264template < typename T>
7267 template < typename U>
7268 static char test( typename U::hasher*, typename U::reverse_iterator*);
7269 template < typename U>
7270 static int test( typename U::hasher*, ...);
7271 template < typename U>
7272 static char test(...);
7275 static const bool value = sizeof(test<T>( nullptr, nullptr)) == sizeof( int);
7278template < typename T>
7281template < typename C,
7282 bool = sizeof(IsContainerTest<C>(0)) == sizeof( IsContainer)>
7285template < typename C>
7292template < typename C>
7294 using value_type = decltype(*std::declval<typename C::const_iterator>());
7296 std::is_same< typename std::remove_const<
7297 typename std::remove_reference<value_type>::type>::type,
7307template < typename C>
7316template < typename T, typename U>
7317bool ArrayEq( const T* lhs, size_t size, const U* rhs);
7320template < typename T, typename U>
7321inline bool ArrayEq( const T& lhs, const U& rhs) { return lhs == rhs; }
7324template < typename T, typename U, size_t N>
7325inline bool ArrayEq( const T(&lhs)[N], const U(&rhs)[N]) {
7332template < typename T, typename U>
7333bool ArrayEq( const T* lhs, size_t size, const U* rhs) {
7334 for ( size_t i = 0; i != size; i++) {
7343template < typename Iter, typename Element>
7345 for (Iter it = begin; it != end; ++it) {
7356template < typename T, typename U>
7360template < typename T, typename U>
7364template < typename T, typename U, size_t N>
7372template < typename T, typename U>
7374 for ( size_t i = 0; i != size; i++) {
7394template < typename Element>
7404 InitRef(array, count);
7409 InitCopy(array, count);
7414 (this->*rhs.clone_)(rhs.array_, rhs.size_);
7418 if (clone_ != &NativeArray::InitRef)
7423 size_t size() const { return size_; }
7434 "Type must not be a reference");
7437 void InitCopy( const Element* array, size_t a_size) {
7438 Element* const copy = new Element[a_size];
7442 clone_ = &NativeArray::InitCopy;
7446 void InitRef( const Element* array, size_t a_size) {
7449 clone_ = &NativeArray::InitRef;
7452 const Element* array_;
7454 void ( NativeArray::*clone_)( const Element*, size_t);
7460template < size_t... Is>
7466template < bool plus_one, typename T, size_t sizeofT>
7468template < size_t... I, size_t sizeofT>
7472template < size_t... I, size_t sizeofT>
7481 : DoubleSequence<N % 2 == 1, typename MakeIndexSequence<N / 2>::type,
7490template < typename T, size_t, size_t>
7493template < typename T, size_t I>
7500template < size_t N, typename I, typename... T>
7503template < size_t N, size_t... I, typename... T>
7507template < typename... T>
7510template < typename Derived, size_t I>
7513template < typename... T, size_t I>
7523template < typename Derived, typename Idx>
7526template < size_t... Idx, typename... T>
7544template < typename... T>
7547 typename MakeIndexSequence<sizeof...(T)>::type> {
7548 using Indices = typename FlatTuple::FlatTupleBase::Indices;
7568 "INSTANTIATE_TEST_CASE_P is deprecated, please use "
7569 "INSTANTIATE_TEST_SUITE_P")
7570constexpr bool InstantiateTestCase_P_IsDeprecated() { return true; }
7573 "TYPED_TEST_CASE_P is deprecated, please use "
7574 "TYPED_TEST_SUITE_P")
7575constexpr bool TypedTestCase_P_IsDeprecated() { return true; }
7578 "TYPED_TEST_CASE is deprecated, please use "
7580constexpr bool TypedTestCaseIsDeprecated() { return true; }
7583 "REGISTER_TYPED_TEST_CASE_P is deprecated, please use "
7584 "REGISTER_TYPED_TEST_SUITE_P")
7585constexpr bool RegisterTypedTestCase_P_IsDeprecated() { return true; }
7588 "INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please use "
7589 "INSTANTIATE_TYPED_TEST_SUITE_P")
7590constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; }
7595#define GTEST_MESSAGE_AT_(file, line, message, result_type) \
7596 ::testing::internal::AssertHelper(result_type, file, line, message) \
7597 = ::testing::Message()
7599#define GTEST_MESSAGE_(message, result_type) \
7600 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
7602#define GTEST_FATAL_FAILURE_(message) \
7603 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
7605#define GTEST_NONFATAL_FAILURE_(message) \
7606 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
7608#define GTEST_SUCCESS_(message) \
7609 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
7611#define GTEST_SKIP_(message) \
7612 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip)
7617#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
7618 if (::testing::internal::AlwaysTrue()) { statement; }
7620#define GTEST_TEST_THROW_(statement, expected_exception, fail) \
7621 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7622 if (::testing::internal::ConstCharPtr gtest_msg = "") { \
7623 bool gtest_caught_expected = false; \
7625 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7627 catch (expected_exception const&) { \
7628 gtest_caught_expected = true; \
7632 "Expected: " #statement " throws an exception of type " \
7633 #expected_exception ".\n Actual: it throws a different type."; \
7634 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
7636 if (!gtest_caught_expected) { \
7638 "Expected: " #statement " throws an exception of type " \
7639 #expected_exception ".\n Actual: it throws nothing."; \
7640 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
7643 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
7644 fail(gtest_msg.value)
7646#define GTEST_TEST_NO_THROW_(statement, fail) \
7647 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7648 if (::testing::internal::AlwaysTrue()) { \
7650 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7653 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
7656 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
7657 fail("Expected: " #statement " doesn't throw an exception.\n" \
7658 " Actual: it throws.")
7660#define GTEST_TEST_ANY_THROW_(statement, fail) \
7661 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7662 if (::testing::internal::AlwaysTrue()) { \
7663 bool gtest_caught_any = false; \
7665 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7668 gtest_caught_any = true; \
7670 if (!gtest_caught_any) { \
7671 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
7674 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \
7675 fail("Expected: " #statement " throws an exception.\n" \
7676 " Actual: it doesn't.")
7682#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
7683 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7684 if (const ::testing::AssertionResult gtest_ar_ = \
7685 ::testing::AssertionResult(expression)) \
7688 fail(::testing::internal::GetBoolAssertionFailureMessage(\
7689 gtest_ar_, text, #actual, #expected).c_str())
7691#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
7692 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7693 if (::testing::internal::AlwaysTrue()) { \
7694 ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
7695 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7696 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
7697 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
7700 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \
7701 fail("Expected: " #statement " doesn't generate new fatal " \
7702 "failures in the current thread.\n" \
7703 " Actual: it does.")
7706#define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
7707 test_suite_name##_##test_name##_Test
7710#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \
7711 static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \
7712 "test_suite_name must not be empty"); \
7713 static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \
7714 "test_name must not be empty"); \
7715 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
7716 : public parent_class { \
7718 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
7721 virtual void TestBody(); \
7722 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \
7723 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
7727 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \
7728 test_name)::test_info_ = \
7729 ::testing::internal::MakeAndRegisterTestInfo( \
7730 #test_suite_name, #test_name, nullptr, nullptr, \
7731 ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \
7732 ::testing::internal::SuiteApiResolver< \
7733 parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \
7734 ::testing::internal::SuiteApiResolver< \
7735 parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \
7736 new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \
7737 test_suite_name, test_name)>); \
7738 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
7778#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
7779#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
7816#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
7817#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
7857#ifndef GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_
7858#define GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_
7863#include <type_traits>
7964#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
7965#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
7967#include <functional>
7972#include <type_traits>
7977#include "absl/strings/string_view.h"
7978#include "absl/types/optional.h"
7979#include "absl/types/variant.h"
7986namespace internal2 {
7992 ::std::ostream* os);
8001 kConvertibleToStringView,
8011template < typename T, TypeKind kTypeKind>
8017 static_cast<const unsigned char* >(
8018 reinterpret_cast<const void* >(std::addressof( value))),
8028template < typename T>
8034 pretty_str = "\n" + value.DebugString();
8036 *os << ( "<" + pretty_str + ">");
8040template < typename T>
8057template < typename T>
8058class TypeWithoutFormatter<T, kConvertibleToStringView> {
8093template < typename Char, typename CharTraits, typename T>
8094::std::basic_ostream<Char, CharTraits>& operator<<(
8095 ::std::basic_ostream<Char, CharTraits>& os, const T& x) {
8098 : std::is_convertible<
8103 std::is_convertible<
8104 const T&, absl::string_view> ::value
8105 ? kConvertibleToStringView
8121template < typename T>
8172template < typename ToPr int, typename OtherOperand>
8181template < typename ToPr int, size_t N, typename OtherOperand>
8192#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \
8193 template <typename OtherOperand> \
8194 class FormatForComparison<CharType*, OtherOperand> { \
8196 static ::std::string Format(CharType* value) { \
8197 return ::testing::PrintToString(static_cast<const void*>(value)); \
8206#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_
8211#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \
8213 class FormatForComparison<CharType*, OtherStringType> { \
8215 static ::std::string Format(CharType* value) { \
8216 return ::testing::PrintToString(value); \
8223#if GTEST_HAS_STD_WSTRING
8228#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_
8238template < typename T1, typename T2>
8251template < typename T>
8252class UniversalPrinter;
8254template < typename T>
8267template < typename C>
8269 const C& container, ::std::ostream* os) {
8270 const size_t kMaxCount = 32;
8273 for ( typename C::const_iterator it = container.begin();
8274 it != container.end(); ++it, ++ count) {
8277 if ( count == kMaxCount) {
8300template < typename T>
8302 T* p, ::std::ostream* os) {
8312template < typename T>
8314 T* p, ::std::ostream* os) {
8321 *os << reinterpret_cast<const void*>(p);
8327template < typename T>
8329 const T& value, ::std::ostream* os) {
8344template < typename T>
8367 ( sizeof(IsContainerTest<T>(0)) == sizeof( IsContainer)) &&
8389 PrintTo( static_cast<unsigned char>(c), os);
8393inline void PrintTo( bool x, ::std::ostream* os) {
8394 *os << ( x ? "true" : "false");
8409 PrintTo(ImplicitCast_<const char*>(s), os);
8414inline void PrintTo( const signed char* s, ::std::ostream* os) {
8415 PrintTo(ImplicitCast_<const void*>(s), os);
8417inline void PrintTo( signed char* s, ::std::ostream* os) {
8418 PrintTo(ImplicitCast_<const void*>(s), os);
8420inline void PrintTo( const unsigned char* s, ::std::ostream* os) {
8421 PrintTo(ImplicitCast_<const void*>(s), os);
8423inline void PrintTo( unsigned char* s, ::std::ostream* os) {
8424 PrintTo(ImplicitCast_<const void*>(s), os);
8432#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
8435inline void PrintTo( wchar_t* s, ::std::ostream* os) {
8436 PrintTo(ImplicitCast_<const wchar_t*>(s), os);
8445template < typename T>
8448 for ( size_t i = 1; i != count; i++) {
8461#if GTEST_HAS_STD_WSTRING
8463inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
8470inline void PrintTo(absl::string_view sp, ::std::ostream* os) {
8475inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; }
8477template < typename T>
8478void PrintTo(std::reference_wrapper<T> ref, ::std::ostream* os) {
8484template < typename T>
8488template < typename T, size_t I>
8490 ::std::ostream* os) {
8491 PrintTupleTo( t, std::integral_constant<size_t, I - 1>(), os);
8498 std::get<I - 1>( t), os);
8501template < typename... Types>
8502void PrintTo(const ::std::tuple<Types...>& t, ::std::ostream* os) {
8504 PrintTupleTo( t, std::integral_constant< size_t, sizeof...(Types)>(), os);
8509template < typename T1, typename T2>
8522template < typename T>
8551template < typename T>
8552class UniversalPrinter<::absl::optional<T>> {
8554 static void Print(const ::absl::optional<T>& value, ::std::ostream* os) {
8567template < typename... T>
8568class UniversalPrinter<::absl::variant<T...>> {
8570 static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) {
8572 absl::visit(Visitor{os}, value);
8578 template < typename U>
8579 void operator()( const U& u) const {
8580 *os << "'" << GetTypeName<U>() << "' with value ";
8591template < typename T>
8597 const size_t kThreshold = 18;
8598 const size_t kChunkSize = 8;
8602 if (len <= kThreshold) {
8614 const char* begin, size_t len, ::std::ostream* os);
8618 const wchar_t* begin, size_t len, ::std::ostream* os);
8621template < typename T, size_t N>
8626 static void Print( const T (&a)[N], ::std::ostream* os) {
8632template < typename T>
8639 static void Print(const T& value, ::std::ostream* os) {
8642 *os << "@" << reinterpret_cast<const void* >(& value) << " ";
8655template < typename T>
8662template < typename T>
8669template < typename T, size_t N>
8679 static void Print( const char* str, ::std::ostream* os) {
8680 if (str == nullptr) {
8690 static void Print( char* str, ::std::ostream* os) {
8695#if GTEST_HAS_STD_WSTRING
8699 static void Print( const wchar_t* str, ::std::ostream* os) {
8700 if (str == nullptr) {
8712 static void Print( wchar_t* str, ::std::ostream* os) {
8717template < typename T>
8726template < typename T>
8738template < typename Tuple>
8741template < typename Tuple, size_t I>
8743 std::integral_constant<size_t, I>,
8747 ::std::stringstream ss;
8749 strings->push_back(ss.str());
8755template < typename Tuple>
8767namespace internal2 {
8768template < typename T>
8770 const T& value, ::std::ostream* os) {
8776template < typename T>
8778 ::std::stringstream ss;
8826#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
8827#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
8834#if defined(_MSC_VER) && _MSC_VER >= 1915
8835#define GTEST_MAYBE_5046_ 5046
8837#define GTEST_MAYBE_5046_
8862class MatchResultListener {
8867 explicit MatchResultListener(::std::ostream* os) : stream_(os) {}
8868 virtual ~MatchResultListener() = 0;
8872 template < typename T>
8874 if (stream_ != nullptr) *stream_ << x;
8879 ::std::ostream* stream() { return stream_; }
8885 bool IsInterested() const { return stream_ != nullptr; }
8888 ::std::ostream* const stream_;
8893inline MatchResultListener::~MatchResultListener() {
8898class MatcherDescriberInterface {
8900 virtual ~MatcherDescriberInterface() {}
8907 virtual void DescribeTo(::std::ostream* os) const = 0;
8915 virtual void DescribeNegationTo(::std::ostream* os) const {
8923template < typename T>
8924class MatcherInterface : public MatcherDescriberInterface {
8957 virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0;
8967template < typename T>
8968class MatcherInterfaceAdapter : public MatcherInterface<const T&> {
8970 explicit MatcherInterfaceAdapter( const MatcherInterface<T>* impl)
8972 ~MatcherInterfaceAdapter() override { delete impl_; }
8974 void DescribeTo(::std::ostream* os) const override { impl_->DescribeTo(os); }
8976 void DescribeNegationTo(::std::ostream* os) const override {
8977 impl_->DescribeNegationTo(os);
8980 bool MatchAndExplain( const T& x,
8981 MatchResultListener* listener) const override {
8982 return impl_->MatchAndExplain( x, listener);
8986 const MatcherInterface<T>* const impl_;
8992 template < typename A, typename B>
8993 bool operator()( const A& a, const B& b) const { return a == b; }
8996 template < typename A, typename B>
8997 bool operator()( const A& a, const B& b) const { return a != b; }
9000 template < typename A, typename B>
9001 bool operator()( const A& a, const B& b) const { return a < b; }
9004 template < typename A, typename B>
9005 bool operator()( const A& a, const B& b) const { return a > b; }
9008 template < typename A, typename B>
9009 bool operator()( const A& a, const B& b) const { return a <= b; }
9012 template < typename A, typename B>
9013 bool operator()( const A& a, const B& b) const { return a >= b; }
9017class DummyMatchResultListener : public MatchResultListener {
9019 DummyMatchResultListener() : MatchResultListener( nullptr) {}
9028class StreamMatchResultListener : public MatchResultListener {
9030 explicit StreamMatchResultListener(::std::ostream* os)
9031 : MatchResultListener(os) {}
9040template < typename T>
9045 bool MatchAndExplain( const T& x, MatchResultListener* listener) const {
9046 return impl_->MatchAndExplain( x, listener);
9051 DummyMatchResultListener dummy;
9052 return MatchAndExplain( x, &dummy);
9056 void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); }
9059 void DescribeNegationTo(::std::ostream* os) const {
9060 impl_->DescribeNegationTo(os);
9064 void ExplainMatchResultTo( const T& x, ::std::ostream* os) const {
9065 StreamMatchResultListener listener(os);
9066 MatchAndExplain( x, &listener);
9072 const MatcherDescriberInterface* GetDescriber() const {
9080 explicit MatcherBase( const MatcherInterface<const T&>* impl) : impl_(impl) {}
9082 template < typename U>
9083 explicit MatcherBase(
9084 const MatcherInterface<U>* impl,
9087 : impl_( new internal::MatcherInterfaceAdapter<U>(impl)) {}
9089 MatcherBase( const MatcherBase&) = default;
9090 MatcherBase& operator=( const MatcherBase&) = default;
9091 MatcherBase(MatcherBase&&) = default;
9092 MatcherBase& operator=(MatcherBase&&) = default;
9094 virtual ~MatcherBase() {}
9097 std::shared_ptr<const MatcherInterface<const T&>> impl_;
9106template < typename T>
9107class Matcher : public internal::MatcherBase<T> {
9112 explicit Matcher() {}
9115 explicit Matcher( const MatcherInterface<const T&>* impl)
9116 : internal::MatcherBase<T>(impl) {}
9118 template < typename U>
9120 const MatcherInterface<U>* impl,
9123 : internal::MatcherBase<T>(impl) {}
9135 : public internal::MatcherBase<const std::string&> {
9139 explicit Matcher( const MatcherInterface<const std::string&>* impl)
9140 : internal::MatcherBase<const std::string&>(impl) {}
9147 Matcher( const char* s);
9152 : public internal::MatcherBase<std::string> {
9156 explicit Matcher( const MatcherInterface<const std::string&>* impl)
9157 : internal::MatcherBase<std::string>(impl) {}
9158 explicit Matcher( const MatcherInterface<std::string>* impl)
9159 : internal::MatcherBase<std::string>(impl) {}
9166 Matcher( const char* s);
9174class GTEST_API_ Matcher<const absl::string_view&>
9175 : public internal::MatcherBase<const absl::string_view&> {
9179 explicit Matcher( const MatcherInterface<const absl::string_view&>* impl)
9180 : internal::MatcherBase<const absl::string_view&>(impl) {}
9187 Matcher( const char* s);
9190 Matcher(absl::string_view s);
9195 : public internal::MatcherBase<absl::string_view> {
9199 explicit Matcher( const MatcherInterface<const absl::string_view&>* impl)
9200 : internal::MatcherBase<absl::string_view>(impl) {}
9201 explicit Matcher( const MatcherInterface<absl::string_view>* impl)
9202 : internal::MatcherBase<absl::string_view>(impl) {}
9209 Matcher( const char* s);
9212 Matcher(absl::string_view s);
9217template < typename T>
9218std::ostream& operator<<(std::ostream& os, const Matcher<T>& matcher) {
9219 matcher.DescribeTo(&os);
9235template < class Impl>
9236class PolymorphicMatcher {
9238 explicit PolymorphicMatcher( const Impl& an_impl) : impl_(an_impl) {}
9242 Impl& mutable_impl() { return impl_; }
9246 const Impl& impl() const { return impl_; }
9248 template < typename T>
9249 operator Matcher<T>() const {
9250 return Matcher<T>( new MonomorphicImpl<const T&>(impl_));
9254 template < typename T>
9255 class MonomorphicImpl : public MatcherInterface<T> {
9257 explicit MonomorphicImpl( const Impl& impl) : impl_(impl) {}
9259 virtual void DescribeTo(::std::ostream* os) const { impl_.DescribeTo(os); }
9261 virtual void DescribeNegationTo(::std::ostream* os) const {
9262 impl_.DescribeNegationTo(os);
9265 virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
9266 return impl_.MatchAndExplain( x, listener);
9282template < typename T>
9283inline Matcher<T> MakeMatcher( const MatcherInterface<T>* impl) {
9284 return Matcher<T>(impl);
9294template < class Impl>
9295inline PolymorphicMatcher<Impl> MakePolymorphicMatcher( const Impl& impl) {
9296 return PolymorphicMatcher<Impl>(impl);
9310template < typename D, typename Rhs, typename Op>
9311class ComparisonBase {
9313 explicit ComparisonBase( const Rhs& rhs) : rhs_(rhs) {}
9314 template < typename Lhs>
9315 operator Matcher<Lhs>() const {
9316 return Matcher<Lhs>( new Impl<const Lhs&>(rhs_));
9320 template < typename T>
9321 static const T& Unwrap( const T& v) { return v; }
9322 template < typename T>
9323 static const T& Unwrap(std::reference_wrapper<T> v) { return v; }
9325 template < typename Lhs, typename = Rhs>
9326 class Impl : public MatcherInterface<Lhs> {
9328 explicit Impl( const Rhs& rhs) : rhs_(rhs) {}
9329 bool MatchAndExplain(Lhs lhs,
9330 MatchResultListener* ) const override {
9331 return Op()(lhs, Unwrap(rhs_));
9333 void DescribeTo(::std::ostream* os) const override {
9334 *os << D::Desc() << " ";
9337 void DescribeNegationTo(::std::ostream* os) const override {
9338 *os << D::NegatedDesc() << " ";
9348template < typename Rhs>
9349class EqMatcher : public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> {
9351 explicit EqMatcher( const Rhs& rhs)
9352 : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) { }
9353 static const char* Desc() { return "is equal to"; }
9354 static const char* NegatedDesc() { return "isn't equal to"; }
9356template < typename Rhs>
9357class NeMatcher : public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> {
9359 explicit NeMatcher( const Rhs& rhs)
9360 : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) { }
9361 static const char* Desc() { return "isn't equal to"; }
9362 static const char* NegatedDesc() { return "is equal to"; }
9364template < typename Rhs>
9365class LtMatcher : public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> {
9367 explicit LtMatcher( const Rhs& rhs)
9368 : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) { }
9369 static const char* Desc() { return "is <"; }
9370 static const char* NegatedDesc() { return "isn't <"; }
9372template < typename Rhs>
9373class GtMatcher : public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> {
9375 explicit GtMatcher( const Rhs& rhs)
9376 : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) { }
9377 static const char* Desc() { return "is >"; }
9378 static const char* NegatedDesc() { return "isn't >"; }
9380template < typename Rhs>
9381class LeMatcher : public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> {
9383 explicit LeMatcher( const Rhs& rhs)
9384 : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) { }
9385 static const char* Desc() { return "is <="; }
9386 static const char* NegatedDesc() { return "isn't <="; }
9388template < typename Rhs>
9389class GeMatcher : public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> {
9391 explicit GeMatcher( const Rhs& rhs)
9392 : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) { }
9393 static const char* Desc() { return "is >="; }
9394 static const char* NegatedDesc() { return "isn't >="; }
9400class MatchesRegexMatcher {
9402 MatchesRegexMatcher( const RE* regex, bool full_match)
9403 : regex_(regex), full_match_(full_match) {}
9406 bool MatchAndExplain( const absl::string_view& s,
9407 MatchResultListener* listener) const {
9417 template < typename CharType>
9418 bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
9419 return s != nullptr && MatchAndExplain( std::string(s), listener);
9426 template < class MatcheeStringType>
9427 bool MatchAndExplain( const MatcheeStringType& s,
9428 MatchResultListener* ) const {
9434 void DescribeTo(::std::ostream* os) const {
9435 *os << (full_match_ ? "matches" : "contains") << " regular expression ";
9439 void DescribeNegationTo(::std::ostream* os) const {
9440 *os << "doesn't " << (full_match_ ? "match" : "contain")
9441 << " regular expression ";
9446 const std::shared_ptr<const RE> regex_;
9447 const bool full_match_;
9453inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
9454 const internal::RE* regex) {
9455 return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, true));
9457inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
9459 return MatchesRegex( new internal::RE(regex));
9464inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
9465 const internal::RE* regex) {
9466 return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, false));
9468inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
9470 return ContainsRegex( new internal::RE(regex));
9476template < typename T>
9477inline internal::EqMatcher<T> Eq(T x) { return internal::EqMatcher<T>( x); }
9481template < typename T>
9482Matcher<T>::Matcher(T value) { * this = Eq( value); }
9496template < typename Lhs, typename Rhs>
9497inline Matcher<Lhs> TypedEq( const Rhs& rhs) { return Eq(rhs); }
9500template < typename Rhs>
9501inline internal::GeMatcher<Rhs> Ge(Rhs x) {
9502 return internal::GeMatcher<Rhs>( x);
9506template < typename Rhs>
9507inline internal::GtMatcher<Rhs> Gt(Rhs x) {
9508 return internal::GtMatcher<Rhs>( x);
9512template < typename Rhs>
9513inline internal::LeMatcher<Rhs> Le(Rhs x) {
9514 return internal::LeMatcher<Rhs>( x);
9518template < typename Rhs>
9519inline internal::LtMatcher<Rhs> Lt(Rhs x) {
9520 return internal::LtMatcher<Rhs>( x);
9524template < typename Rhs>
9525inline internal::NeMatcher<Rhs> Ne(Rhs x) {
9526 return internal::NeMatcher<Rhs>( x);
9543const char kDeathTestStyleFlag[] = "death_test_style";
9544const char kDeathTestUseFork[] = "death_test_use_fork";
9545const char kInternalRunDeathTestFlag[] = "internal_run_death_test";
9547#if GTEST_HAS_DEATH_TEST
9575 static bool Create( const char* statement, Matcher<const std::string&> matcher,
9576 const char* file, int line, DeathTest** test);
9578 virtual ~DeathTest() { }
9581 class ReturnSentinel {
9583 explicit ReturnSentinel(DeathTest* test) : test_(test) { }
9584 ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
9586 DeathTest* const test_;
9595 enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
9599 TEST_ENCOUNTERED_RETURN_STATEMENT,
9600 TEST_THREW_EXCEPTION,
9605 virtual TestRole AssumeRole() = 0;
9608 virtual int Wait() = 0;
9617 virtual bool Passed( bool exit_status_ok) = 0;
9620 virtual void Abort(AbortReason reason) = 0;
9624 static const char* LastMessage();
9626 static void set_last_death_test_message( const std::string& message);
9638class DeathTestFactory {
9640 virtual ~DeathTestFactory() { }
9641 virtual bool Create( const char* statement,
9642 Matcher<const std::string&> matcher, const char* file,
9643 int line, DeathTest** test) = 0;
9647class DefaultDeathTestFactory : public DeathTestFactory {
9649 bool Create( const char* statement, Matcher<const std::string&> matcher,
9650 const char* file, int line, DeathTest** test) override;
9655GTEST_API_ bool ExitedUnsuccessfully( int exit_status);
9660inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9662 return ContainsRegex(regex. pattern());
9664inline Matcher<const ::std::string&> MakeDeathTestMatcher( const char* regex) {
9665 return ContainsRegex(regex);
9667inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9669 return ContainsRegex(regex);
9674inline Matcher<const ::std::string&> MakeDeathTestMatcher(
9675 Matcher<const ::std::string&> matcher) {
9681# if GTEST_HAS_EXCEPTIONS
9682# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
9684 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
9685 } catch (const ::std::exception& gtest_exception) { \
9688 "\n%s: Caught std::exception-derived exception escaping the " \
9689 "death test statement. Exception message: %s\n", \
9690 ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
9691 gtest_exception.what()); \
9693 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
9695 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
9699# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
9700 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
9706#define GTEST_DEATH_TEST_(statement, predicate, regex_or_matcher, fail) \
9707 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9708 if (::testing::internal::AlwaysTrue()) { \
9709 ::testing::internal::DeathTest* gtest_dt; \
9710 if (!::testing::internal::DeathTest::Create( \
9712 ::testing::internal::MakeDeathTestMatcher(regex_or_matcher), \
9713 __FILE__, __LINE__, >est_dt)) { \
9714 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
9716 if (gtest_dt != nullptr) { \
9717 std::unique_ptr< ::testing::internal::DeathTest> gtest_dt_ptr(gtest_dt); \
9718 switch (gtest_dt->AssumeRole()) { \
9719 case ::testing::internal::DeathTest::OVERSEE_TEST: \
9720 if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
9721 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
9724 case ::testing::internal::DeathTest::EXECUTE_TEST: { \
9725 ::testing::internal::DeathTest::ReturnSentinel gtest_sentinel( \
9727 GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
9728 gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
9736 GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__) \
9737 : fail(::testing::internal::DeathTest::LastMessage())
9746#define GTEST_EXECUTE_STATEMENT_(statement, regex_or_matcher) \
9747 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9748 if (::testing::internal::AlwaysTrue()) { \
9749 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
9750 } else if (!::testing::internal::AlwaysTrue()) { \
9751 ::testing::internal::MakeDeathTestMatcher(regex_or_matcher); \
9753 ::testing::Message()
9758class InternalRunDeathTestFlag {
9760 InternalRunDeathTestFlag( const std::string& a_file,
9764 : file_(a_file), line_(a_line), index_(an_index),
9765 write_fd_(a_write_fd) {}
9767 ~InternalRunDeathTestFlag() {
9773 int line() const { return line_; }
9774 int index() const { return index_; }
9775 int write_fd() const { return write_fd_; }
9789InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
9807#if GTEST_HAS_DEATH_TEST
9923# define ASSERT_EXIT(statement, predicate, regex) \
9924 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)
9928# define EXPECT_EXIT(statement, predicate, regex) \
9929 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)
9934# define ASSERT_DEATH(statement, regex) \
9935 ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
9939# define EXPECT_DEATH(statement, regex) \
9940 EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
9947 explicit ExitedWithCode( int exit_code);
9948 bool operator()( int exit_status) const;
9951 void operator=( const ExitedWithCode& other);
9953 const int exit_code_;
9956# if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA
9962 explicit KilledBySignal( int signum);
9963 bool operator()( int exit_status) const;
10014# define EXPECT_DEBUG_DEATH(statement, regex) \
10015 GTEST_EXECUTE_STATEMENT_(statement, regex)
10017# define ASSERT_DEBUG_DEATH(statement, regex) \
10018 GTEST_EXECUTE_STATEMENT_(statement, regex)
10022# define EXPECT_DEBUG_DEATH(statement, regex) \
10023 EXPECT_DEATH(statement, regex)
10025# define ASSERT_DEBUG_DEATH(statement, regex) \
10026 ASSERT_DEATH(statement, regex)
10066# define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator) \
10067 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
10068 if (::testing::internal::AlwaysTrue()) { \
10069 GTEST_LOG_(WARNING) \
10070 << "Death tests are not supported on this platform.\n" \
10071 << "Statement '" #statement "' cannot be verified."; \
10072 } else if (::testing::internal::AlwaysFalse()) { \
10073 ::testing::internal::RE::PartialMatch(".*", (regex)); \
10074 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
10077 ::testing::Message()
10084#if GTEST_HAS_DEATH_TEST
10085# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
10086 EXPECT_DEATH(statement, regex)
10087# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
10088 ASSERT_DEATH(statement, regex)
10090# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
10091 GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, )
10092# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
10093 GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return)
10134#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
10135#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
10161TEST_P(FooTest, DoesBlah) {
10168TEST_P(FooTest, HasBlahBlah) {
10198 Values( "meeny", "miny", "moe"));
10219const char* pets[] = { "cat", "dog"};
10264TEST_F(BaseTest, HasFoo) {
10268TEST_P(DerivedTest, DoesBlah) {
10312#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
10313#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
10329template < class ParamType>
10341 template < class ParamType>
10347namespace internal {
10364template < typename T>
10394template < typename T>
10404 if ( this != &other)
10405 impl_.reset(other.impl_->Clone());
10423 return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);
10426 return !(* this == other);
10432 std::unique_ptr<ParamIteratorInterface<T> > impl_;
10437template < typename T>
10454template< typename T>
10463 impl_ = other.impl_;
10471 std::shared_ptr<const ParamGeneratorInterface<T> > impl_;
10478template < typename T, typename IncrementT>
10482 : begin_( begin), end_(end),
10483 step_(step), end_index_(CalculateEndIndex( begin, end, step)) {}
10487 return new Iterator( this, begin_, 0, step_);
10490 return new Iterator( this, end_, end_index_, step_);
10498 : base_(base), value_( value), index_( index), step_(step) {}
10499 ~Iterator() override {}
10501 const ParamGeneratorInterface<T>* BaseGenerator() const override {
10504 void Advance() override {
10505 value_ = static_cast<T >(value_ + step_);
10508 ParamIteratorInterface<T>* Clone() const override {
10509 return new Iterator(* this);
10511 const T* Current() const override { return &value_; }
10512 bool Equals( const ParamIteratorInterface<T>& other) const override {
10515 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10516 << "The program attempted to compare iterators "
10517 << "from different generators." << std::endl;
10518 const int other_index =
10519 CheckedDowncastToActualType<const Iterator>(&other)->index_;
10520 return index_ == other_index;
10524 Iterator( const Iterator& other)
10525 : ParamIteratorInterface<T>(),
10526 base_(other.base_), value_(other.value_), index_(other.index_),
10527 step_(other.step_) {}
10530 void operator=( const Iterator& other);
10532 const ParamGeneratorInterface<T>* const base_;
10535 const IncrementT step_;
10538 static int CalculateEndIndex( const T& begin,
10540 const IncrementT& step) {
10542 for (T i = begin; i < end; i = static_cast<T>(i + step))
10552 const IncrementT step_;
10555 const int end_index_;
10563template < typename T>
10566 template < typename ForwardIterator>
10568 : container_( begin, end) {}
10572 return new Iterator( this, container_.begin());
10575 return new Iterator( this, container_.end());
10579 typedef typename ::std::vector<T> ContainerType;
10584 typename ContainerType::const_iterator iterator)
10585 : base_(base), iterator_(iterator) {}
10586 ~Iterator() override {}
10588 const ParamGeneratorInterface<T>* BaseGenerator() const override {
10591 void Advance() override {
10595 ParamIteratorInterface<T>* Clone() const override {
10596 return new Iterator(* this);
10605 const T* Current() const override {
10606 if (value_.get() == nullptr) value_.reset( new T(*iterator_));
10607 return value_.get();
10609 bool Equals( const ParamIteratorInterface<T>& other) const override {
10612 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10613 << "The program attempted to compare iterators "
10614 << "from different generators." << std::endl;
10615 return iterator_ ==
10616 CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
10620 Iterator( const Iterator& other)
10623 : ParamIteratorInterface<T>(),
10624 base_(other.base_),
10625 iterator_(other.iterator_) {}
10627 const ParamGeneratorInterface<T>* const base_;
10628 typename ContainerType::const_iterator iterator_;
10634 mutable std::unique_ptr<const T> value_;
10640 const ContainerType container_;
10647template < class ParamType>
10650 name_stream << info. index;
10654template < typename T = int>
10656 static_assert( sizeof(T) == 0, "Empty arguments are not allowed.");
10658template < typename T = int>
10665template < class TestClass>
10670 parameter_(parameter) {}
10672 TestClass::SetParam(¶meter_);
10673 return new TestClass();
10686template < class ParamType>
10702template < class TestSuite>
10756template < class TestSuite>
10769 : test_suite_name_( name), code_location_(code_location) {}
10773 return test_suite_name_;
10785 tests_.push_back(std::shared_ptr<TestInfo>(
10786 new TestInfo(test_suite_name, test_base_name, meta_factory)));
10791 GeneratorCreationFunc* func,
10793 const char* file, int line) {
10794 instantiations_.push_back(
10795 InstantiationInfo(instantiation_name, func, name_func, file, line));
10804 for ( typename TestInfoContainer::iterator test_it = tests_.begin();
10805 test_it != tests_.end(); ++test_it) {
10806 std::shared_ptr<TestInfo> test_info = *test_it;
10807 for ( typename InstantiationContainer::iterator gen_it =
10808 instantiations_.begin(); gen_it != instantiations_.end();
10810 const std::string& instantiation_name = gen_it->name;
10813 const char* file = gen_it->file;
10814 int line = gen_it->line;
10817 if ( !instantiation_name.empty() )
10818 test_suite_name = instantiation_name + "/";
10819 test_suite_name += test_info->test_suite_base_name;
10822 std::set<std::string> test_param_names;
10825 param_it != generator. end(); ++param_it, ++i) {
10832 << "Parameterized test name '" << param_name
10833 << "' is invalid, in " << file
10834 << " line " << line << std::endl;
10837 << "Duplicate parameterized test name '" << param_name
10838 << "', in " << file << " line " << line << std::endl;
10840 test_param_names.insert(param_name);
10842 if (!test_info->test_base_name.empty()) {
10843 test_name_stream << test_info->test_base_name << "/";
10845 test_name_stream << param_name;
10847 test_suite_name.c_str(), test_name_stream. GetString().c_str(),
10853 test_info->test_meta_factory->CreateTestFactory(*param_it));
10863 TestInfo( const char* a_test_suite_base_name, const char* a_test_base_name,
10865 : test_suite_base_name(a_test_suite_base_name),
10866 test_base_name(a_test_base_name),
10867 test_meta_factory(a_test_meta_factory) {}
10871 const std::unique_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
10873 using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo> >;
10877 struct InstantiationInfo {
10879 GeneratorCreationFunc* generator_in,
10881 const char* file_in,
10884 generator(generator_in),
10885 name_func(name_func_in),
10890 GeneratorCreationFunc* generator;
10895 typedef ::std::vector<InstantiationInfo> InstantiationContainer;
10912 CodeLocation code_location_;
10913 TestInfoContainer tests_;
10914 InstantiationContainer instantiations_;
10920#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
10921template < class TestCase>
10935 for ( auto& test_suite_info : test_suite_infos_) {
10936 delete test_suite_info;
10942 template < class TestSuite>
10944 const char* test_suite_name, CodeLocation code_location) {
10946 for ( auto& test_suite_info : test_suite_infos_) {
10947 if (test_suite_info->GetTestSuiteName() == test_suite_name) {
10948 if (test_suite_info->GetTestSuiteTypeId() != GetTypeId<TestSuite>()) {
10964 if (typed_test_info == nullptr) {
10966 test_suite_name, code_location);
10967 test_suite_infos_.push_back(typed_test_info);
10969 return typed_test_info;
10972 for ( auto& test_suite_info : test_suite_infos_) {
10973 test_suite_info->RegisterTests();
10977#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
10978 template < class TestCase>
10980 const char* test_case_name, CodeLocation code_location) {
10981 return GetTestSuitePatternHolder<TestCase>(test_case_name, code_location);
10987 using TestSuiteInfoContainer = ::std::vector<ParameterizedTestSuiteInfoBase*>;
10989 TestSuiteInfoContainer test_suite_infos_;
10998template < class Container>
10999internal::ParamGenerator<typename Container::value_type> ValuesIn(
11000 const Container& container);
11002namespace internal {
11005template < typename... Ts>
11010 template < typename T>
11016 template < typename T, size_t... I>
11018 return std::vector<T>{ static_cast<T >(v_.template Get<I>())...};
11021 FlatTuple<Ts...> v_;
11024template < typename... T>
11031 : generators_(g) {}
11035 return new Iterator( this, generators_, false);
11038 return new Iterator( this, generators_, true);
11043 class IteratorImpl;
11044 template < size_t... I>
11051 begin_(std:: get<I>(generators). begin()...),
11052 end_(std:: get<I>(generators).end()...),
11053 current_(is_end ? end_ : begin_) {
11054 ComputeCurrentValue();
11056 ~IteratorImpl() override {}
11058 const ParamGeneratorInterface<ParamType>* BaseGenerator() const override {
11063 void Advance() override {
11066 ++ std::get< sizeof...(T) - 1>(current_);
11068 AdvanceIfEnd< sizeof...(T) - 1>();
11069 ComputeCurrentValue();
11071 ParamIteratorInterface<ParamType>* Clone() const override {
11072 return new IteratorImpl(* this);
11075 const ParamType* Current() const override { return current_value_.get(); }
11077 bool Equals( const ParamIteratorInterface<ParamType>& other) const override {
11080 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
11081 << "The program attempted to compare iterators "
11082 << "from different generators." << std::endl;
11083 const IteratorImpl* typed_other =
11084 CheckedDowncastToActualType<const IteratorImpl>(&other);
11089 if (AtEnd() && typed_other->AtEnd()) return true;
11093 (same = same && std::get<I>(current_) ==
11094 std::get<I>(typed_other->current_))...};
11100 template < size_t ThisI>
11101 void AdvanceIfEnd() {
11102 if (std::get<ThisI>(current_) != std::get<ThisI>(end_)) return;
11104 bool last = ThisI == 0;
11110 constexpr size_t NextI = ThisI - (ThisI != 0);
11111 std::get<ThisI>(current_) = std::get<ThisI>(begin_);
11112 ++std::get<NextI>(current_);
11113 AdvanceIfEnd<NextI>();
11116 void ComputeCurrentValue() {
11118 current_value_ = std::make_shared<ParamType>(*std::get<I>(current_)...);
11120 bool AtEnd() const {
11121 bool at_end = false;
11123 (at_end = at_end || std::get<I>(current_) == std::get<I>(end_))...};
11128 const ParamGeneratorInterface<ParamType>* const base_;
11129 std::tuple<typename ParamGenerator<T>::iterator...> begin_;
11130 std::tuple<typename ParamGenerator<T>::iterator...> end_;
11131 std::tuple<typename ParamGenerator<T>::iterator...> current_;
11132 std::shared_ptr<ParamType> current_value_;
11135 using Iterator = IteratorImpl< typename MakeIndexSequence< sizeof...(T)>::type>;
11137 std::tuple<ParamGenerator<T>...> generators_;
11140template < class... Gen>
11144 template < typename... T>
11151 std::tuple<Gen...> generators_;
11203template < typename T, typename IncrementT>
11209template < typename T>
11211 return Range(start, end, 1);
11269template < typename ForwardIterator>
11270internal::ParamGenerator<
11271 typename std::iterator_traits<ForwardIterator>::value_type>
11273 typedef typename std::iterator_traits<ForwardIterator>::value_type ParamType;
11278template < typename T, size_t N>
11280 return ValuesIn(array, array + N);
11283template < class Container>
11285 const Container& container) {
11286 return ValuesIn(container.begin(), container.end());
11309template < typename... T>
11335 return Values( false, true);
11384template < typename... Generator>
11389#define TEST_P(test_suite_name, test_name) \
11390 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
11391 : public test_suite_name { \
11393 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
11394 virtual void TestBody(); \
11397 static int AddToRegistry() { \
11398 ::testing::UnitTest::GetInstance() \
11399 ->parameterized_test_registry() \
11400 .GetTestSuitePatternHolder<test_suite_name>( \
11401 #test_suite_name, \
11402 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
11403 ->AddTestPattern( \
11404 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
11405 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
11406 test_suite_name, test_name)>()); \
11409 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
11410 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
11413 int GTEST_TEST_CLASS_NAME_(test_suite_name, \
11414 test_name)::gtest_registering_dummy_ = \
11415 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
11416 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
11431#define GTEST_EXPAND_(arg) arg
11432#define GTEST_GET_FIRST_(first, ...) first
11433#define GTEST_GET_SECOND_(first, second, ...) second
11435#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \
11436 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
11437 gtest_##prefix##test_suite_name##_EvalGenerator_() { \
11438 return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \
11440 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
11441 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
11442 if (::testing::internal::AlwaysFalse()) { \
11443 ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \
11445 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
11447 auto t = std::make_tuple(__VA_ARGS__); \
11448 static_assert(std::tuple_size<decltype(t)>::value <= 2, \
11449 "Too Many Args!"); \
11451 return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \
11453 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
11454 DUMMY_PARAM_))))(info); \
11456 static int gtest_##prefix##test_suite_name##_dummy_ \
11457 GTEST_ATTRIBUTE_UNUSED_ = \
11458 ::testing::UnitTest::GetInstance() \
11459 ->parameterized_test_registry() \
11460 .GetTestSuitePatternHolder<test_suite_name>( \
11461 #test_suite_name, \
11462 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
11463 ->AddTestSuiteInstantiation( \
11464 #prefix, >est_##prefix##test_suite_name##_EvalGenerator_, \
11465 >est_##prefix##test_suite_name##_EvalGenerateName_, \
11466 __FILE__, __LINE__)
11469#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
11470#define INSTANTIATE_TEST_CASE_P \
11471 static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
11473 INSTANTIATE_TEST_SUITE_P
11512#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
11513#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
11536#define FRIEND_TEST(test_case_name, test_name)\
11537friend class test_case_name##_##test_name##_Test
11571#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
11572#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
11600 TestPartResult(Type a_type, const char* a_file_name, int a_line_number,
11601 const char* a_message)
11603 file_name_(a_file_name == nullptr ? "" : a_file_name),
11604 line_number_(a_line_number),
11605 summary_(ExtractSummary(a_message)),
11606 message_(a_message) {}
11609 Type type() const { return type_; }
11613 const char* file_name() const {
11614 return file_name_.empty() ? nullptr : file_name_.c_str();
11619 int line_number() const { return line_number_; }
11622 const char* summary() const { return summary_.c_str(); }
11625 const char* message() const { return message_.c_str(); }
11628 bool skipped() const { return type_ == kSkip; }
11631 bool passed() const { return type_ == kSuccess; }
11634 bool nonfatally_failed() const { return type_ == kNonFatalFailure; }
11637 bool fatally_failed() const { return type_ == kFatalFailure; }
11640 bool failed() const { return fatally_failed() || nonfatally_failed(); }
11647 static std::string ExtractSummary( const char* message);
11660std::ostream& operator<<(std::ostream& os, const TestPartResult& result);
11668 TestPartResultArray() {}
11671 void Append( const TestPartResult& result);
11674 const TestPartResult& GetTestPartResult( int index) const;
11680 std::vector<TestPartResult> array_;
11686class GTEST_API_ TestPartResultReporterInterface {
11688 virtual ~TestPartResultReporterInterface() {}
11690 virtual void ReportTestPartResult( const TestPartResult& result) = 0;
11693namespace internal {
11702 : public TestPartResultReporterInterface {
11704 HasNewFatalFailureHelper();
11705 ~HasNewFatalFailureHelper() override;
11706 void ReportTestPartResult( const TestPartResult& result) override;
11707 bool has_new_fatal_failure() const { return has_new_fatal_failure_; }
11709 bool has_new_fatal_failure_;
11710 TestPartResultReporterInterface* original_reporter_;
11754#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
11755#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
11767template < typename T>
11771 typedef std::list<T> List;
11779typedef testing::Types<char, int, unsigned int> MyTypes;
11780TYPED_TEST_SUITE(FooTest, MyTypes);
11788TYPED_TEST(FooTest, DoesBlah) {
11792 TypeParam n = this->value_;
11796 n += TestFixture::shared_;
11800 typename TestFixture::List values;
11801 values.push_back(n);
11805TYPED_TEST(FooTest, HasPropertyA) { ... }
11845template < typename T>
11853TYPED_TEST_SUITE_P(FooTest);
11857TYPED_TEST_P(FooTest, DoesBlah) {
11863TYPED_TEST_P(FooTest, HasPropertyA) { ... }
11869REGISTER_TYPED_TEST_SUITE_P(FooTest,
11870 DoesBlah, HasPropertyA);
11880typedef testing::Types<char, int, unsigned int> MyTypes;
11881INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
11897#if GTEST_HAS_TYPED_TEST
11903#define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_
11907#define GTEST_NAME_GENERATOR_(TestSuiteName) \
11908 gtest_type_params_##TestSuiteName##_NameGenerator
11910#define TYPED_TEST_SUITE(CaseName, Types, ...) \
11911 typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \
11913 typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
11914 GTEST_NAME_GENERATOR_(CaseName)
11916# define TYPED_TEST(CaseName, TestName) \
11917 template <typename gtest_TypeParam_> \
11918 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
11919 : public CaseName<gtest_TypeParam_> { \
11921 typedef CaseName<gtest_TypeParam_> TestFixture; \
11922 typedef gtest_TypeParam_ TypeParam; \
11923 virtual void TestBody(); \
11925 static bool gtest_##CaseName##_##TestName##_registered_ \
11926 GTEST_ATTRIBUTE_UNUSED_ = \
11927 ::testing::internal::TypeParameterizedTest< \
11929 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
11931 GTEST_TYPE_PARAMS_( \
11932 CaseName)>::Register("", \
11933 ::testing::internal::CodeLocation( \
11934 __FILE__, __LINE__), \
11935 #CaseName, #TestName, 0, \
11936 ::testing::internal::GenerateNames< \
11937 GTEST_NAME_GENERATOR_(CaseName), \
11938 GTEST_TYPE_PARAMS_(CaseName)>()); \
11939 template <typename gtest_TypeParam_> \
11940 void GTEST_TEST_CLASS_NAME_(CaseName, \
11941 TestName)<gtest_TypeParam_>::TestBody()
11944#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
11945#define TYPED_TEST_CASE \
11946 static_assert(::testing::internal::TypedTestCaseIsDeprecated(), ""); \
11954#if GTEST_HAS_TYPED_TEST_P
11961#define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_
11967#define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \
11968 gtest_typed_test_suite_p_state_##TestSuiteName##_
11974#define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \
11975 gtest_registered_test_names_##TestSuiteName##_
11980#define TYPED_TEST_SUITE_P(SuiteName) \
11981 static ::testing::internal::TypedTestSuitePState \
11982 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName)
11985#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
11986#define TYPED_TEST_CASE_P \
11987 static_assert(::testing::internal::TypedTestCase_P_IsDeprecated(), ""); \
11991#define TYPED_TEST_P(SuiteName, TestName) \
11992 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
11993 template <typename gtest_TypeParam_> \
11994 class TestName : public SuiteName<gtest_TypeParam_> { \
11996 typedef SuiteName<gtest_TypeParam_> TestFixture; \
11997 typedef gtest_TypeParam_ TypeParam; \
11998 virtual void TestBody(); \
12000 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
12001 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \
12002 __FILE__, __LINE__, #SuiteName, #TestName); \
12004 template <typename gtest_TypeParam_> \
12005 void GTEST_SUITE_NAMESPACE_( \
12006 SuiteName)::TestName<gtest_TypeParam_>::TestBody()
12008#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
12009 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
12010 typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
12012 static const char* const GTEST_REGISTERED_TEST_NAMES_( \
12013 SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
12014 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \
12015 __FILE__, __LINE__, #__VA_ARGS__)
12018#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
12019#define REGISTER_TYPED_TEST_CASE_P \
12020 static_assert(::testing::internal::RegisterTypedTestCase_P_IsDeprecated(), \
12022 REGISTER_TYPED_TEST_SUITE_P
12025#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \
12026 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
12027 ::testing::internal::TypeParameterizedTestSuite< \
12028 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
12029 ::testing::internal::TypeList<Types>::type>:: \
12030 Register(#Prefix, \
12031 ::testing::internal::CodeLocation(__FILE__, __LINE__), \
12032 >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \
12033 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \
12034 ::testing::internal::GenerateNames< \
12035 ::testing::internal::NameGeneratorSelector< \
12036 __VA_ARGS__>::type, \
12037 ::testing::internal::TypeList<Types>::type>())
12040#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
12041#define INSTANTIATE_TYPED_TEST_CASE_P \
12043 ::testing::internal::InstantiateTypedTestCase_P_IsDeprecated(), ""); \
12044 INSTANTIATE_TYPED_TEST_SUITE_P
12059# pragma warning(push)
12060# pragma warning(disable:4805)
12061# pragma warning(disable:4100)
12133#if GTEST_USE_OWN_FLAGFILE_FLAG_
12138const int kMaxStackTraceDepth = 100;
12140namespace internal {
12143class DefaultGlobalTestPartResultReporter;
12144class ExecDeathTest;
12145class NoExecDeathTest;
12146class FinalSuccessChecker;
12147class GTestFlagSaver;
12148class StreamingListenerTest;
12149class TestResultAccessor;
12150class TestEventListenersAccessor;
12151class TestEventRepeater;
12152class UnitTestRecordPropertyTestHelper;
12153class WindowsDeathTest;
12154class FuchsiaDeathTest;
12155class UnitTestImpl* GetUnitTestImpl();
12156void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
12168#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
12169using TestCase = TestSuite;
12257 AssertionResult( const AssertionResult& other);
12259#if defined(_MSC_VER) && _MSC_VER < 1910
12270 template < typename T>
12271 explicit AssertionResult(
12273 typename std::enable_if<
12277 : success_(success) {}
12279#if defined(_MSC_VER) && _MSC_VER < 1910
12284 AssertionResult& operator=(AssertionResult other) {
12290 operator bool() const { return success_; }
12293 AssertionResult operator!() const;
12299 const char* message() const {
12300 return message_.get() != nullptr ? message_->c_str() : "";
12303 const char* failure_message() const { return message(); }
12307 AppendMessage(Message() << value);
12314 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
12315 AppendMessage(Message() << basic_manipulator);
12321 void AppendMessage( const Message& a_message) {
12323 message_->append(a_message.GetString().c_str());
12327 void swap(AssertionResult& other);
12335 std::unique_ptr< ::std::string> message_;
12339GTEST_API_ AssertionResult AssertionSuccess();
12342GTEST_API_ AssertionResult AssertionFailure();
12346GTEST_API_ AssertionResult AssertionFailure( const Message& msg);
12388#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
12389#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
12426#define GTEST_ASSERT_(expression, on_failure) \
12427 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
12428 if (const ::testing::AssertionResult gtest_ar = (expression)) \
12431 on_failure(gtest_ar.failure_message())
12436template < typename Pred,
12442 if (pred(v1)) return AssertionSuccess();
12444 return AssertionFailure()
12445 << pred_text << "(" << e1 << ") evaluates to false, where"
12452#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
12453 GTEST_ASSERT_(pred_format(#v1, v1), \
12458#define GTEST_PRED1_(pred, v1, on_failure)\
12459 GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
12465#define EXPECT_PRED_FORMAT1(pred_format, v1) \
12466 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
12467#define EXPECT_PRED1(pred, v1) \
12468 GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
12469#define ASSERT_PRED_FORMAT1(pred_format, v1) \
12470 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
12471#define ASSERT_PRED1(pred, v1) \
12472 GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
12478template < typename Pred,
12487 if (pred(v1, v2)) return AssertionSuccess();
12489 return AssertionFailure()
12490 << pred_text << "(" << e1 << ", " << e2
12491 << ") evaluates to false, where"
12499#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
12500 GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \
12505#define GTEST_PRED2_(pred, v1, v2, on_failure)\
12506 GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
12514#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
12515 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
12516#define EXPECT_PRED2(pred, v1, v2) \
12517 GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
12518#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
12519 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
12520#define ASSERT_PRED2(pred, v1, v2) \
12521 GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
12527template < typename Pred,
12539 if (pred(v1, v2, v3)) return AssertionSuccess();
12541 return AssertionFailure()
12542 << pred_text << "(" << e1 << ", " << e2 << ", " << e3
12543 << ") evaluates to false, where"
12552#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
12553 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \
12558#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
12559 GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
12569#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
12570 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
12571#define EXPECT_PRED3(pred, v1, v2, v3) \
12572 GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
12573#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
12574 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
12575#define ASSERT_PRED3(pred, v1, v2, v3) \
12576 GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
12582template < typename Pred,
12597 if (pred(v1, v2, v3, v4)) return AssertionSuccess();
12599 return AssertionFailure()
12600 << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4
12601 << ") evaluates to false, where"
12611#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
12612 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \
12617#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
12618 GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
12630#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
12631 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
12632#define EXPECT_PRED4(pred, v1, v2, v3, v4) \
12633 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
12634#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
12635 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
12636#define ASSERT_PRED4(pred, v1, v2, v3, v4) \
12637 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
12643template < typename Pred,
12661 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();
12663 return AssertionFailure()
12664 << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4
12665 << ", " << e5 << ") evaluates to false, where"
12676#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
12677 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
12682#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
12683 GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
12697#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
12698 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
12699#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
12700 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
12701#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
12702 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
12703#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
12704 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
12765#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
12781 static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }
12812 static bool HasSameFixtureClass();
12820 virtual void TestBody() = 0;
12827 void DeleteSelf_() { delete this; }
12829 const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
12847 struct Setup_should_be_spelled_SetUp {};
12848 virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }
12866 key_(a_key), value_(a_value) {
12871 return key_.c_str();
12876 return value_.c_str();
12881 value_ = new_value;
12913 bool Passed() const { return !Skipped() && !Failed(); }
12947 friend class internal::DefaultGlobalTestPartResultReporter;
12948 friend class internal::ExecDeathTest;
12949 friend class internal::TestResultAccessor;
12950 friend class internal::UnitTestImpl;
12951 friend class internal::WindowsDeathTest;
12952 friend class internal::FuchsiaDeathTest;
12955 const std::vector<TestPartResult>& test_part_results() const {
12956 return test_part_results_;
12960 const std::vector<TestProperty>& test_properties() const {
12961 return test_properties_;
12965 void set_start_timestamp( TimeInMillis start) { start_timestamp_ = start; }
12968 void set_elapsed_time( TimeInMillis elapsed) { elapsed_time_ = elapsed; }
12976 void RecordProperty( const std::string& xml_element,
12977 const TestProperty& test_property);
12982 static bool ValidateTestProperty( const std::string& xml_element,
12983 const TestProperty& test_property);
12986 void AddTestPartResult( const TestPartResult& test_part_result);
12989 int death_test_count() const { return death_test_count_; }
12992 int increment_death_test_count() { return ++death_test_count_; }
12995 void ClearTestPartResults();
13002 internal::Mutex test_properites_mutex_;
13005 std::vector<TestPartResult> test_part_results_;
13007 std::vector<TestProperty> test_properties_;
13009 int death_test_count_;
13040#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13045 const char* name() const { return name_.c_str(); }
13050 if (type_param_.get() != nullptr) return type_param_->c_str();
13057 if (value_param_.get() != nullptr) return value_param_->c_str();
13062 const char* file() const { return location_.file.c_str(); }
13065 int line() const { return location_.line; }
13092 return matches_filter_ && !is_in_another_shard_;
13099#if GTEST_HAS_DEATH_TEST
13100 friend class internal::DefaultDeathTestFactory;
13104 friend class internal::UnitTestImpl;
13105 friend class internal::StreamingListenerTest;
13107 const char* test_suite_name, const char* name, const char* type_param,
13116 const char* a_type_param,
13117 const char* a_value_param,
13124 int increment_death_test_count() {
13125 return result_.increment_death_test_count();
13132 static void ClearTestResult( TestInfo* test_info) {
13133 test_info->result_.Clear();
13141 const std::unique_ptr<const ::std::string> type_param_;
13144 const std::unique_ptr<const ::std::string> value_param_;
13145 internal::CodeLocation location_;
13149 bool matches_filter_;
13151 bool is_in_another_shard_;
13152 internal::TestFactoryBase* const factory_;
13157 TestResult result_;
13187 const char* name() const { return name_.c_str(); }
13192 if (type_param_.get() != nullptr) return type_param_->c_str();
13227 bool Failed() const { return failed_test_count() > 0; }
13246 friend class internal::UnitTestImpl;
13249 std::vector<TestInfo*>& test_info_list() { return test_info_list_; }
13252 const std::vector<TestInfo*>& test_info_list() const {
13253 return test_info_list_;
13258 TestInfo* GetMutableTestInfo( int i);
13261 void set_should_run( bool should) { should_run_ = should; }
13265 void AddTestInfo(TestInfo * test_info);
13268 void ClearResult();
13271 static void ClearTestSuiteResult(TestSuite* test_suite) {
13272 test_suite->ClearResult();
13280 void RunSetUpTestSuite() {
13281 if (set_up_tc_ != nullptr) {
13288 void RunTearDownTestSuite() {
13289 if (tear_down_tc_ != nullptr) {
13290 (*tear_down_tc_)();
13295 static bool TestPassed( const TestInfo* test_info) {
13296 return test_info->should_run() && test_info->result()->Passed();
13300 static bool TestSkipped( const TestInfo* test_info) {
13301 return test_info->should_run() && test_info->result()->Skipped();
13305 static bool TestFailed( const TestInfo* test_info) {
13306 return test_info->should_run() && test_info->result()->Failed();
13311 static bool TestReportableDisabled( const TestInfo* test_info) {
13312 return test_info->is_reportable() && test_info->is_disabled_;
13316 static bool TestDisabled( const TestInfo* test_info) {
13317 return test_info->is_disabled_;
13321 static bool TestReportable( const TestInfo* test_info) {
13322 return test_info->is_reportable();
13326 static bool ShouldRunTest( const TestInfo* test_info) {
13327 return test_info->should_run();
13331 void ShuffleTests(internal::Random* random);
13334 void UnshuffleTests();
13340 const std::unique_ptr<const ::std::string> type_param_;
13343 std::vector<TestInfo*> test_info_list_;
13347 std::vector<int> test_indices_;
13360 TestResult ad_hoc_test_result_;
13393 struct Setup_should_be_spelled_SetUp {};
13394 virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }
13397#if GTEST_HAS_EXCEPTIONS
13401 : public internal::GoogleTestFailureException {
13403 explicit AssertionException( const TestPartResult& result)
13404 : GoogleTestFailureException(result) {}
13422 int iteration) = 0;
13434#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13453#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13465 int iteration) = 0;
13485#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13493#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13526 return default_result_printer_;
13537 return default_xml_generator_;
13543 friend class internal::DefaultGlobalTestPartResultReporter;
13544 friend class internal::NoExecDeathTest;
13545 friend class internal::TestEventListenersAccessor;
13546 friend class internal::UnitTestImpl;
13568 bool EventForwardingEnabled() const;
13569 void SuppressEventForwarding();
13572 internal::TestEventRepeater* repeater_;
13609 const char* original_working_dir() const;
13616#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13626 int random_seed() const;
13632 internal::ParameterizedTestSuiteRegistry& parameterized_test_registry()
13636 int successful_test_suite_count() const;
13639 int failed_test_suite_count() const;
13642 int total_test_suite_count() const;
13646 int test_suite_to_run_count() const;
13649#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13700#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
13728 void AddTestPartResult(TestPartResult::Type result_type,
13729 const char* file_name,
13747 internal::UnitTestImpl* impl() { return impl_; }
13748 const internal::UnitTestImpl* impl() const { return impl_; }
13755 friend class internal::StreamingListenerTest;
13756 friend class internal::UnitTestRecordPropertyTestHelper;
13758 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
13759 friend void internal::ReportFailureInUnknownLocation(
13760 TestPartResult::Type result_type,
13771 void PushGTestTrace( const internal::TraceInfo& trace)
13775 void PopGTestTrace()
13780 mutable internal::Mutex mutex_;
13786 internal::UnitTestImpl* impl_;
13833namespace internal {
13838template < typename T1, typename T2>
13840 const char* rhs_expression,
13841 const T1& lhs, const T2& rhs) {
13857template < typename T1, typename T2>
13859 const char* rhs_expression,
13863 return AssertionSuccess();
13873 const char* rhs_expression,
13881 typename T1, typename T2,
13886 static AssertionResult Compare( const char* lhs_expression,
13887 const char* rhs_expression, const T1& lhs,
13889 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
13898 static AssertionResult Compare( const char* lhs_expression,
13899 const char* rhs_expression,
13902 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
13905 template < typename T>
13907 const char* lhs_expression, const char* rhs_expression,
13909 std::nullptr_t , T* rhs) {
13911 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T* >( nullptr),
13919template < typename T1, typename T2>
13921 const T1& val1, const T2& val2,
13923 return AssertionFailure()
13924 << "Expected: (" << expr1 << ") " << op << " (" << expr2
13940#define GTEST_IMPL_CMP_HELPER_(op_name, op)\
13941template <typename T1, typename T2>\
13942AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
13943 const T1& val1, const T2& val2) {\
13944 if (val1 op val2) {\
13945 return AssertionSuccess();\
13947 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\
13950GTEST_API_ AssertionResult CmpHelper##op_name(\
13951 const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)
13966#undef GTEST_IMPL_CMP_HELPER_
13972 const char* s2_expression,
13980 const char* s2_expression,
13988 const char* s2_expression,
13996 const char* s2_expression,
14005 const char* s2_expression,
14007 const wchar_t* s2);
14013 const char* s2_expression,
14015 const wchar_t* s2);
14028 const char* needle_expr, const char* haystack_expr,
14029 const char* needle, const char* haystack);
14031 const char* needle_expr, const char* haystack_expr,
14032 const wchar_t* needle, const wchar_t* haystack);
14034 const char* needle_expr, const char* haystack_expr,
14035 const char* needle, const char* haystack);
14037 const char* needle_expr, const char* haystack_expr,
14038 const wchar_t* needle, const wchar_t* haystack);
14040 const char* needle_expr, const char* haystack_expr,
14043 const char* needle_expr, const char* haystack_expr,
14046#if GTEST_HAS_STD_WSTRING
14048 const char* needle_expr, const char* haystack_expr,
14049 const ::std::wstring& needle, const ::std::wstring& haystack);
14051 const char* needle_expr, const char* haystack_expr,
14052 const ::std::wstring& needle, const ::std::wstring& haystack);
14055namespace internal {
14064template < typename RawType>
14066 const char* rhs_expression,
14068 RawType rhs_value) {
14071 if (lhs.AlmostEquals(rhs)) {
14072 return AssertionSuccess();
14075 ::std::stringstream lhs_ss;
14076 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
14079 ::std::stringstream rhs_ss;
14080 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
14085 StringStreamToString(&lhs_ss),
14086 StringStreamToString(&rhs_ss),
14095 const char* abs_error_expr,
14108 const char* message);
14120 struct AssertHelperData {
14121 AssertHelperData(TestPartResult::Type t,
14122 const char* srcfile,
14125 : type( t), file(srcfile), line(line_num), message(msg) { }
14127 TestPartResult::Type const type;
14128 const char* const file;
14136 AssertHelperData* const data_;
14183template <typename T>
14193 << "GetParam() can only be called inside a value-parameterized test "
14194 << "-- did you intend to write TEST_P instead of TEST_F?";
14195 return *parameter_;
14201 static void SetParam( const ParamType* parameter) {
14202 parameter_ = parameter;
14206 static const ParamType* parameter_;
14212template < typename T>
14218template < typename T>
14227#define GTEST_SKIP() GTEST_SKIP_("Skipped")
14247#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
14251#define ADD_FAILURE_AT(file, line) \
14252 GTEST_MESSAGE_AT_(file, line, "Failed", \
14253 ::testing::TestPartResult::kNonFatalFailure)
14256#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed")
14259#define GTEST_FAIL_AT(file, line) \
14260 GTEST_MESSAGE_AT_(file, line, "Failed", \
14261 ::testing::TestPartResult::kFatalFailure)
14265#if !GTEST_DONT_DEFINE_FAIL
14266# define FAIL() GTEST_FAIL()
14270#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded")
14274#if !GTEST_DONT_DEFINE_SUCCEED
14275# define SUCCEED() GTEST_SUCCEED()
14287#define EXPECT_THROW(statement, expected_exception) \
14288 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
14289#define EXPECT_NO_THROW(statement) \
14290 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
14291#define EXPECT_ANY_THROW(statement) \
14292 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
14293#define ASSERT_THROW(statement, expected_exception) \
14294 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
14295#define ASSERT_NO_THROW(statement) \
14296 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
14297#define ASSERT_ANY_THROW(statement) \
14298 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
14303#define EXPECT_TRUE(condition) \
14304 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
14305 GTEST_NONFATAL_FAILURE_)
14306#define EXPECT_FALSE(condition) \
14307 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
14308 GTEST_NONFATAL_FAILURE_)
14309#define ASSERT_TRUE(condition) \
14310 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
14311 GTEST_FATAL_FAILURE_)
14312#define ASSERT_FALSE(condition) \
14313 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
14314 GTEST_FATAL_FAILURE_)
14362#define EXPECT_EQ(val1, val2) \
14363 EXPECT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
14364#define EXPECT_NE(val1, val2) \
14365 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
14366#define EXPECT_LE(val1, val2) \
14367 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
14368#define EXPECT_LT(val1, val2) \
14369 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
14370#define EXPECT_GE(val1, val2) \
14371 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
14372#define EXPECT_GT(val1, val2) \
14373 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
14375#define GTEST_ASSERT_EQ(val1, val2) \
14376 ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
14377#define GTEST_ASSERT_NE(val1, val2) \
14378 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
14379#define GTEST_ASSERT_LE(val1, val2) \
14380 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
14381#define GTEST_ASSERT_LT(val1, val2) \
14382 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
14383#define GTEST_ASSERT_GE(val1, val2) \
14384 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
14385#define GTEST_ASSERT_GT(val1, val2) \
14386 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
14391#if !GTEST_DONT_DEFINE_ASSERT_EQ
14392# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
14395#if !GTEST_DONT_DEFINE_ASSERT_NE
14396# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)
14399#if !GTEST_DONT_DEFINE_ASSERT_LE
14400# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)
14403#if !GTEST_DONT_DEFINE_ASSERT_LT
14404# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)
14407#if !GTEST_DONT_DEFINE_ASSERT_GE
14408# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)
14411#if !GTEST_DONT_DEFINE_ASSERT_GT
14412# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
14431#define EXPECT_STREQ(s1, s2) \
14432 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
14433#define EXPECT_STRNE(s1, s2) \
14434 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
14435#define EXPECT_STRCASEEQ(s1, s2) \
14436 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
14437#define EXPECT_STRCASENE(s1, s2)\
14438 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
14440#define ASSERT_STREQ(s1, s2) \
14441 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
14442#define ASSERT_STRNE(s1, s2) \
14443 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
14444#define ASSERT_STRCASEEQ(s1, s2) \
14445 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
14446#define ASSERT_STRCASENE(s1, s2)\
14447 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
14463#define EXPECT_FLOAT_EQ(val1, val2)\
14464 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
14467#define EXPECT_DOUBLE_EQ(val1, val2)\
14468 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
14471#define ASSERT_FLOAT_EQ(val1, val2)\
14472 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
14475#define ASSERT_DOUBLE_EQ(val1, val2)\
14476 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
14479#define EXPECT_NEAR(val1, val2, abs_error)\
14480 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
14481 val1, val2, abs_error)
14483#define ASSERT_NEAR(val1, val2, abs_error)\
14484 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
14485 val1, val2, abs_error)
14495 float val1, float val2);
14497 double val1, double val2);
14500#if GTEST_OS_WINDOWS
14511# define EXPECT_HRESULT_SUCCEEDED(expr) \
14512 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
14514# define ASSERT_HRESULT_SUCCEEDED(expr) \
14515 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
14517# define EXPECT_HRESULT_FAILED(expr) \
14518 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
14520# define ASSERT_HRESULT_FAILED(expr) \
14521 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
14535#define ASSERT_NO_FATAL_FAILURE(statement) \
14536 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)
14537#define EXPECT_NO_FATAL_FAILURE(statement) \
14538 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
14557 template < typename T>
14559 PushTrace(file, line, ( Message() << message).GetString());
14564 PushTrace(file, line, message ? message : "(null)");
14568 PushTrace(file, line, message);
14578 void PushTrace( const char* file, int line, std::string message);
14600#define SCOPED_TRACE(message) \
14601 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
14602 __FILE__, __LINE__, (message))
14634template < typename T1, typename T2>
14637 "type1 and type2 are not the same type");
14666#define GTEST_TEST(test_suite_name, test_name) \
14667 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \
14668 ::testing::internal::GetTestTypeId())
14672#if !GTEST_DONT_DEFINE_TEST
14673#define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name)
14703#define TEST_F(test_fixture, test_name)\
14704 GTEST_TEST_(test_fixture, test_name, test_fixture, \
14705 ::testing::internal::GetTypeId<test_fixture>())
14712# pragma warning(pop)
14772template < int&... ExplicitParameterBarrier, typename Factory>
14774 const char* type_param, const char* value_param,
14775 const char* file, int line, Factory factory) {
14776 using TestT = typename std::remove_pointer< decltype(factory())>::type;
14780 explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}
14781 Test* CreateTest() override { return factory_(); }
14788 test_suite_name, test_name, type_param, value_param,
14792 new FactoryImpl{std::move(factory)});
14808 return ::testing::UnitTest::GetInstance()->Run();
const char *const const double number Definition: cJSON.h:262
const cJSON *const b Definition: cJSON.h:251
const char *const name Definition: cJSON.h:258
int index Definition: cJSON.h:168
int cJSON_bool fmt Definition: cJSON.h:158
int count Definition: cJSON.h:212
const char *const string Definition: cJSON.h:170
Definition: gtest.h:13476
void OnTestStart(const TestInfo &) override Definition: gtest.h:13489
void OnTestSuiteStart(const TestSuite &) override Definition: gtest.h:13483
void OnTestIterationStart(const UnitTest &, int) override Definition: gtest.h:13479
void OnEnvironmentsTearDownStart(const UnitTest &) override Definition: gtest.h:13497
void OnEnvironmentsSetUpStart(const UnitTest &) override Definition: gtest.h:13481
void OnTestEnd(const TestInfo &) override Definition: gtest.h:13491
void OnTestCaseStart(const TestCase &) override Definition: gtest.h:13486
void OnEnvironmentsSetUpEnd(const UnitTest &) override Definition: gtest.h:13482
void OnTestProgramEnd(const UnitTest &) override Definition: gtest.h:13501
void OnTestIterationEnd(const UnitTest &, int) override Definition: gtest.h:13499
void OnTestPartResult(const TestPartResult &) override Definition: gtest.h:13490
void OnTestCaseEnd(const TestCase &) override Definition: gtest.h:13494
void OnTestProgramStart(const UnitTest &) override Definition: gtest.h:13478
void OnEnvironmentsTearDownEnd(const UnitTest &) override Definition: gtest.h:13498
void OnTestSuiteEnd(const TestSuite &) override Definition: gtest.h:13492
Definition: gtest.h:13380
virtual void TearDown() Definition: gtest.h:13389
virtual ~Environment() Definition: gtest.h:13383
virtual void SetUp() Definition: gtest.h:13386
std::string GetString() const
Message(const char *str) Definition: gtest.h:2601
Message(const Message &msg) Definition: gtest.h:2596
Definition: gtest.h:14550
ScopedTrace(const char *file, int line, const std::string &message) Definition: gtest.h:14567
ScopedTrace(const char *file, int line, const T &message) Definition: gtest.h:14558
ScopedTrace(const char *file, int line, const char *message) Definition: gtest.h:14563
Definition: gtest.h:13411
virtual void OnTestPartResult(const TestPartResult &test_part_result)=0
virtual void OnTestSuiteStart(const TestSuite &) Definition: gtest.h:13431
virtual ~TestEventListener() Definition: gtest.h:13413
virtual void OnEnvironmentsTearDownStart(const UnitTest &unit_test)=0
virtual void OnTestIterationEnd(const UnitTest &unit_test, int iteration)=0
virtual void OnTestProgramStart(const UnitTest &unit_test)=0
virtual void OnTestIterationStart(const UnitTest &unit_test, int iteration)=0
virtual void OnTestCaseEnd(const TestCase &) Definition: gtest.h:13454
virtual void OnTestSuiteEnd(const TestSuite &) Definition: gtest.h:13450
virtual void OnEnvironmentsTearDownEnd(const UnitTest &unit_test)=0
virtual void OnEnvironmentsSetUpStart(const UnitTest &unit_test)=0
virtual void OnEnvironmentsSetUpEnd(const UnitTest &unit_test)=0
virtual void OnTestStart(const TestInfo &test_info)=0
virtual void OnTestEnd(const TestInfo &test_info)=0
virtual void OnTestCaseStart(const TestCase &) Definition: gtest.h:13435
virtual void OnTestProgramEnd(const UnitTest &unit_test)=0
Definition: gtest.h:13505
TestEventListener * Release(TestEventListener *listener)
void Append(TestEventListener *listener)
TestEventListener * default_result_printer() const Definition: gtest.h:13525
TestEventListener * default_xml_generator() const Definition: gtest.h:13536
Definition: gtest.h:13030
const char * file() const Definition: gtest.h:13062
const char * value_param() const Definition: gtest.h:13056
bool is_reportable() const Definition: gtest.h:13089
bool is_in_another_shard() const Definition: gtest.h:13068
bool should_run() const Definition: gtest.h:13086
const char * type_param() const Definition: gtest.h:13049
const char * name() const Definition: gtest.h:13045
const TestResult * result() const Definition: gtest.h:13096
const char * test_case_name() const Definition: gtest.h:13041
const char * test_suite_name() const Definition: gtest.h:13037
int line() const Definition: gtest.h:13065
Definition: gtest.h:12737
static bool HasNonfatalFailure()
static bool HasFatalFailure()
static void SetUpTestCase() Definition: gtest.h:12767
static void TearDownTestSuite() Definition: gtest.h:12762
static bool HasFailure() Definition: gtest.h:12781
static void RecordProperty(const std::string &key, const std::string &value)
static void SetUpTestSuite() Definition: gtest.h:12752
static void TearDownTestCase() Definition: gtest.h:12766
static void RecordProperty(const std::string &key, int value)
Definition: gtest.h:12860
const char * value() const Definition: gtest.h:12875
TestProperty(const std::string &a_key, const std::string &a_value) Definition: gtest.h:12865
void SetValue(const std::string &new_value) Definition: gtest.h:12880
const char * key() const Definition: gtest.h:12870
Definition: gtest.h:12897
bool HasFatalFailure() const
bool HasNonfatalFailure() const
int total_part_count() const
const TestProperty & GetTestProperty(int i) const
TimeInMillis elapsed_time() const Definition: gtest.h:12928
const TestPartResult & GetTestPartResult(int i) const
bool Passed() const Definition: gtest.h:12913
TimeInMillis start_timestamp() const Definition: gtest.h:12932
int test_property_count() const
Definition: gtest.h:13165
int test_to_run_count() const
int reportable_test_count() const
const char * name() const Definition: gtest.h:13187
TestSuite(const char *name, const char *a_type_param, internal::SetUpTestSuiteFunc set_up_tc, internal::TearDownTestSuiteFunc tear_down_tc)
TimeInMillis elapsed_time() const Definition: gtest.h:13230
int total_test_count() const
const char * type_param() const Definition: gtest.h:13191
const TestResult & ad_hoc_test_result() const Definition: gtest.h:13242
const TestInfo * GetTestInfo(int i) const
int successful_test_count() const
bool should_run() const Definition: gtest.h:13197
int failed_test_count() const
int reportable_disabled_test_count() const
TimeInMillis start_timestamp() const Definition: gtest.h:13234
int disabled_test_count() const
bool Passed() const Definition: gtest.h:13224
bool Failed() const Definition: gtest.h:13227
int skipped_test_count() const
Definition: gtest.h:14219
Definition: gtest.h:13592
int skipped_test_count() const
const TestInfo * current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_)
int reportable_disabled_test_count() const
const TestCase * current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_)
int Run() GTEST_MUST_USE_RESULT_
TimeInMillis elapsed_time() const
int reportable_test_count() const
static UnitTest * GetInstance()
int test_to_run_count() const
int successful_test_count() const
const TestCase * GetTestCase(int i) const
int total_test_case_count() const
int test_case_to_run_count() const
const TestSuite * GetTestSuite(int i) const
const TestResult & ad_hoc_test_result() const
TestEventListeners & listeners()
TimeInMillis start_timestamp() const
int failed_test_case_count() const
int successful_test_case_count() const
int failed_test_count() const
int disabled_test_count() const
int total_test_count() const
Definition: gtest.h:14184
static const ParamType & GetParam() Definition: gtest.h:14191
T ParamType Definition: gtest.h:14186
virtual ~WithParamInterface() Definition: gtest.h:14187
Definition: gtest.h:14102
void operator=(const Message &message) const
AssertHelper(TestPartResult::Type type, const char *file, int line, const char *message)
Definition: gtest.h:11026
ParamIteratorInterface< ParamType > * Begin() const override Definition: gtest.h:11034
~CartesianProductGenerator() override Definition: gtest.h:11032
ParamIteratorInterface< ParamType > * End() const override Definition: gtest.h:11037
::std::tuple< T... > ParamType Definition: gtest.h:11028
CartesianProductGenerator(const std::tuple< ParamGenerator< T >... > &g) Definition: gtest.h:11030
Definition: gtest.h:11141
CartesianProductHolder(const Gen &... g) Definition: gtest.h:11143
Definition: gtest.h:13877
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs) Definition: gtest.h:13886
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, std::nullptr_t, T *rhs) Definition: gtest.h:13906
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs) Definition: gtest.h:13898
ElemFromList< I, Indices, T... >::type & Get() Definition: gtest.h:7560
FlatTuple(T... t) Definition: gtest.h:7552
const ElemFromList< I, Indices, T... >::type & Get() const Definition: gtest.h:7555
static const Bits kFractionBitMask Definition: gtest.h:6620
static const size_t kFractionBitCount Definition: gtest.h:6610
FloatingPoint(const RawType &x) Definition: gtest.h:6646
static const size_t kExponentBitCount Definition: gtest.h:6614
bool is_nan() const Definition: gtest.h:6682
static RawType Infinity() Definition: gtest.h:6660
static const Bits kExponentBitMask Definition: gtest.h:6624
bool AlmostEquals(const FloatingPoint &rhs) const Definition: gtest.h:6694
Bits fraction_bits() const Definition: gtest.h:6676
static const size_t kMaxUlps Definition: gtest.h:6638
static const size_t kBitCount Definition: gtest.h:6607
TypeWithSize< sizeof(RawType)>::UInt Bits Definition: gtest.h:6602
static RawType ReinterpretBits(const Bits bits) Definition: gtest.h:6653
static const Bits kSignBitMask Definition: gtest.h:6617
const Bits & bits() const Definition: gtest.h:6670
Bits exponent_bits() const Definition: gtest.h:6673
Bits sign_bit() const Definition: gtest.h:6679
GTestLog(GTestLogSeverity severity, const char *file, int line)
::std::ostream & GetStream() Definition: gtest.h:1199
GTestMutexLock(Mutex *) Definition: gtest.h:2108
IgnoredValue(const T &) Definition: gtest.h:6483
void Unlock() Definition: gtest.h:2092
Mutex() Definition: gtest.h:2090
void Lock() Definition: gtest.h:2091
void AssertHeld() const Definition: gtest.h:2093
Element value_type Definition: gtest.h:7398
const_iterator begin() const Definition: gtest.h:7424
NativeArray(const Element *array, size_t count, RelationToSourceReference) Definition: gtest.h:7403
~NativeArray() Definition: gtest.h:7417
bool operator==(const NativeArray &rhs) const Definition: gtest.h:7426
const Element * const_iterator Definition: gtest.h:7400
NativeArray(const NativeArray &rhs) Definition: gtest.h:7413
Element * iterator Definition: gtest.h:7399
NativeArray(const Element *array, size_t count, RelationToSourceCopy) Definition: gtest.h:7408
const_iterator end() const Definition: gtest.h:7425
size_t size() const Definition: gtest.h:7423
Definition: gtest.h:10438
virtual ParamIteratorInterface< T > * End() const =0
T ParamType Definition: gtest.h:10440
virtual ~ParamGeneratorInterface() Definition: gtest.h:10442
virtual ParamIteratorInterface< T > * Begin() const =0
Definition: gtest.h:10455
iterator begin() const Definition: gtest.h:10467
ParamIterator< T > iterator Definition: gtest.h:10457
ParamGenerator(const ParamGenerator &other) Definition: gtest.h:10460
ParamGenerator(ParamGeneratorInterface< T > *impl) Definition: gtest.h:10459
iterator end() const Definition: gtest.h:10468
ParamGenerator & operator=(const ParamGenerator &other) Definition: gtest.h:10462
Definition: gtest.h:10365
virtual ParamIteratorInterface * Clone() const =0
virtual const ParamGeneratorInterface< T > * BaseGenerator() const =0
virtual const T * Current() const =0
virtual bool Equals(const ParamIteratorInterface &other) const =0
virtual ~ParamIteratorInterface() Definition: gtest.h:10367
Definition: gtest.h:10395
T value_type Definition: gtest.h:10397
ptrdiff_t difference_type Definition: gtest.h:10399
const T & operator*() const Definition: gtest.h:10409
bool operator!=(const ParamIterator &other) const Definition: gtest.h:10425
ParamIterator & operator++() Definition: gtest.h:10412
ParamIterator(const ParamIterator &other) Definition: gtest.h:10402
const T * operator->() const Definition: gtest.h:10410
const T & reference Definition: gtest.h:10398
ParamIterator & operator=(const ParamIterator &other) Definition: gtest.h:10403
bool operator==(const ParamIterator &other) const Definition: gtest.h:10422
ParamIterator operator++(int) Definition: gtest.h:10417
Definition: gtest.h:10666
ParameterizedTestFactory(ParamType parameter) Definition: gtest.h:10669
Test * CreateTest() override Definition: gtest.h:10671
TestClass::ParamType ParamType Definition: gtest.h:10668
Definition: gtest.h:10728
ParameterizedTestSuiteInfoBase() Definition: gtest.h:10743
virtual void RegisterTests()=0
virtual const std::string & GetTestSuiteName() const =0
virtual ~ParameterizedTestSuiteInfoBase() Definition: gtest.h:10730
virtual TypeId GetTestSuiteTypeId() const =0
Definition: gtest.h:10757
void AddTestPattern(const char *test_suite_name, const char *test_base_name, TestMetaFactoryBase< ParamType > *meta_factory) Definition: gtest.h:10783
typename TestSuite::ParamType ParamType Definition: gtest.h:10762
int AddTestSuiteInstantiation(const std::string &instantiation_name, GeneratorCreationFunc *func, ParamNameGeneratorFunc *name_func, const char *file, int line) Definition: gtest.h:10790
std::string(const TestParamInfo< ParamType > &) ParamNameGeneratorFunc Definition: gtest.h:10765
ParameterizedTestSuiteInfo(const char *name, CodeLocation code_location) Definition: gtest.h:10767
void RegisterTests() override Definition: gtest.h:10803
const std::string & GetTestSuiteName() const override Definition: gtest.h:10772
TypeId GetTestSuiteTypeId() const override Definition: gtest.h:10776
Definition: gtest.h:10931
void RegisterTests() Definition: gtest.h:10971
ParameterizedTestCaseInfo< TestCase > * GetTestCasePatternHolder(const char *test_case_name, CodeLocation code_location) Definition: gtest.h:10979
ParameterizedTestSuiteInfo< TestSuite > * GetTestSuitePatternHolder(const char *test_suite_name, CodeLocation code_location) Definition: gtest.h:10943
~ParameterizedTestSuiteRegistry() Definition: gtest.h:10934
ParameterizedTestSuiteRegistry() Definition: gtest.h:10933
static bool PartialMatch(const ::std::string &str, const RE &re) Definition: gtest.h:1138
static bool FullMatch(const char *str, const RE &re)
const char * pattern() const Definition: gtest.h:1129
RE(const ::std::string ®ex) Definition: gtest.h:1123
RE(const char *regex) Definition: gtest.h:1125
static bool PartialMatch(const char *str, const RE &re)
static bool FullMatch(const ::std::string &str, const RE &re) Definition: gtest.h:1135
RE(const RE &other) Definition: gtest.h:1120
Random(UInt32 seed) Definition: gtest.h:7197
UInt32 Generate(UInt32 range)
void Reseed(UInt32 seed) Definition: gtest.h:7199
Definition: gtest.h:10479
RangeGenerator(T begin, T end, IncrementT step) Definition: gtest.h:10481
~RangeGenerator() override Definition: gtest.h:10484
ParamIteratorInterface< T > * Begin() const override Definition: gtest.h:10486
ParamIteratorInterface< T > * End() const override Definition: gtest.h:10489
virtual ~TestFactoryBase() Definition: gtest.h:6802
virtual Test * CreateTest()=0
TestFactoryBase() Definition: gtest.h:6809
Test * CreateTest() override Definition: gtest.h:6820
ThreadLocal() Definition: gtest.h:2116
T * pointer() Definition: gtest.h:2118
ThreadLocal(const T &value) Definition: gtest.h:2117
void set(const T &value) Definition: gtest.h:2121
const T * pointer() const Definition: gtest.h:2119
const T & get() const Definition: gtest.h:2120
static bool dummy_ Definition: gtest.h:6773
unsigned int UInt Definition: gtest.h:2378
int Int Definition: gtest.h:2377
long long Int Definition: gtest.h:2389
unsigned long long UInt Definition: gtest.h:2390
void UInt Definition: gtest.h:2366
static void Print(const T(&a)[N], ::std::ostream *os) Definition: gtest.h:8626
static void Print(const T &value, ::std::ostream *os) Definition: gtest.h:8532
static void Print(const T &value, ::std::ostream *os) Definition: gtest.h:8665
static void Print(const T(&value)[N], ::std::ostream *os) Definition: gtest.h:8672
static void Print(char *str, ::std::ostream *os) Definition: gtest.h:8690
static void Print(const char *str, ::std::ostream *os) Definition: gtest.h:8679
static void Print(const wchar_t *str, ::std::ostream *os) Definition: gtest.h:8699
static void Print(wchar_t *str, ::std::ostream *os) Definition: gtest.h:8712
static void Print(const T &value, ::std::ostream *os) Definition: gtest.h:8658
Definition: gtest.h:11006
ValueArray(Ts... v) Definition: gtest.h:11008
Definition: gtest.h:10564
ParamIteratorInterface< T > * End() const override Definition: gtest.h:10574
ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) Definition: gtest.h:10567
~ValuesInIteratorRangeGenerator() override Definition: gtest.h:10569
ParamIteratorInterface< T > * Begin() const override Definition: gtest.h:10571
#define TEST_F(test_fixture, test_name) Definition: gtest.h:14703
#define GTEST_DECLARE_bool_(name) Definition: gtest.h:2416
#define TEST_P(test_suite_name, test_name) Definition: gtest.h:11389
#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) Definition: gtest.h:1246
#define GTEST_IMPL_CMP_HELPER_(op_name, op) Definition: gtest.h:13940
#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() Definition: gtest.h:564
#define GTEST_LOCK_EXCLUDED_(locks) Definition: gtest.h:2435
#define GTEST_INTENTIONAL_CONST_COND_PUSH_() Definition: gtest.h:951
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name,...) Definition: gtest.h:11435
#define GTEST_MAYBE_5046_ Definition: gtest.h:8837
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_ Definition: gtest.h:14807
#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) Definition: gtest.h:550
#define GTEST_MUST_USE_RESULT_ Definition: gtest.h:940
#define GTEST_DECLARE_string_(name) Definition: gtest.h:2419
#define GTEST_DISABLE_MSC_DEPRECATED_POP_() Definition: gtest.h:566
#define GTEST_API_ Definition: gtest.h:999
#define GTEST_DECLARE_int32_(name) Definition: gtest.h:2417
#define GTEST_CHECK_(condition) Definition: gtest.h:1233
#define EXPECT_TRUE(condition) Definition: gtest.h:14303
#define GTEST_DISALLOW_ASSIGN_(type) Definition: gtest.h:923
#define GTEST_INTENTIONAL_CONST_COND_POP_() Definition: gtest.h:953
#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) Definition: gtest.h:917
#define GTEST_DISABLE_MSC_WARNINGS_POP_() Definition: gtest.h:551
#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) Definition: gtest.h:928
#define true Definition: msvc_stdbool.h:18
#define false Definition: msvc_stdbool.h:19
char bool Definition: msvc_stdbool.h:17
StdString::RegexMatcher Matches(std::string const ®ex, CaseSensitive::Choice caseSensitivity=CaseSensitive::Yes)
StdString::EqualsMatcher Equals(std::string const &str, CaseSensitive::Choice caseSensitivity=CaseSensitive::Yes)
void write(const ::Opm::EclipseState &es, const ::Opm::EclipseGrid &grid, const ::Opm::Schedule &schedule, const ::Opm::data::Solution &simProps, std::map< std::string, std::vector< int > > int_data, const ::Opm::NNC &nnc, ::Opm::EclIO::OutputStream::Init &initFile)
function get(const std::string &func, double alpha, double beta)
constexpr double to(const double q, const double unit) Definition: custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp:247
constexpr double from(const double q, const double unit) Definition: custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp:224
status Definition: value_status.hpp:27
@ end Definition: ActionValue.hpp:20
std::string extension(const std::string &fname)
bool is_function(const expression_node< T > *node) Definition: exprtk.hpp:5363
const T1 const T2 const T3 Definition: exprtk.hpp:14424
const T1 Definition: exprtk.hpp:14380
T value(details::expression_node< T > *n) Definition: exprtk.hpp:12955
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t t(t+t)") define_sfop3(16
const T1 const T2 Definition: exprtk.hpp:14402
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)
const size_t kProtobufOneLinerMaxLength Definition: gtest.h:8026
GTEST_API_ void PrintBytesInObjectTo(const unsigned char *obj_bytes, size_t count, ::std::ostream *os)
::std::basic_ostream< Char, CharTraits > & operator<<(::std::basic_ostream< Char, CharTraits > &os, const T &x) Definition: gtest.h:8094
TypeKind Definition: gtest.h:7996
@ kProtobuf Definition: gtest.h:7997
@ kConvertibleToInteger Definition: gtest.h:7998
@ kOtherType Definition: gtest.h:8004
GTEST_API_ std::vector< EditType > CalculateOptimalEdits(const std::vector< size_t > &left, const std::vector< size_t > &right)
GTEST_API_ std::string CreateUnifiedDiff(const std::vector< std::string > &left, const std::vector< std::string > &right, size_t context=2)
EditType Definition: gtest.h:6516
@ kAdd Definition: gtest.h:6516
@ kMatch Definition: gtest.h:6516
@ kRemove Definition: gtest.h:6516
@ kReplace Definition: gtest.h:6516
int Close(int fd) Definition: gtest.h:2286
int IsATTY(int fd) Definition: gtest.h:2243
int ChDir(const char *dir) Definition: gtest.h:2267
int StrCaseCmp(const char *s1, const char *s2) Definition: gtest.h:2245
int Stat(const char *path, StatStruct *buf) Definition: gtest.h:2244
int FileNo(FILE *file) Definition: gtest.h:2242
int Read(int fd, void *buf, unsigned int count) Definition: gtest.h:2280
const char * StrNCpy(char *dest, const char *src, size_t n) Definition: gtest.h:2258
char * StrDup(const char *src) Definition: gtest.h:2248
void Abort() Definition: gtest.h:2312
const char * StrError(int errnum) Definition: gtest.h:2287
FILE * FReopen(const char *path, const char *mode, FILE *stream) Definition: gtest.h:2273
FILE * FDOpen(int fd, const char *mode) Definition: gtest.h:2276
struct stat StatStruct Definition: gtest.h:2240
const char * GetEnv(const char *name) Definition: gtest.h:2289
int RmDir(const char *dir) Definition: gtest.h:2249
bool IsDir(const StatStruct &st) Definition: gtest.h:2250
int Write(int fd, const void *buf, unsigned int count) Definition: gtest.h:2283
int FClose(FILE *fp) Definition: gtest.h:2278
FILE * FOpen(const char *path, const char *mode) Definition: gtest.h:2269
GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
FloatingPoint< float > Float Definition: gtest.h:6756
void(*)() SetUpTearDownSuiteFuncType Definition: gtest.h:6852
long long BiggestInt Definition: gtest.h:2143
void LogToStderr() Definition: gtest.h:1213
GTestMutexLock MutexLock Definition: gtest.h:2111
std::string OutputFlagAlsoCheckEnvVar()
DefaultPrinterType Definition: gtest.h:8257
@ kPrintFunctionPointer Definition: gtest.h:8260
@ kPrintOther Definition: gtest.h:8261
@ kPrintPointer Definition: gtest.h:8259
@ kPrintContainer Definition: gtest.h:8258
To DownCast_(From *f) Definition: gtest.h:1316
AssertionResult CmpHelperEQFailure(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs) Definition: gtest.h:13839
GTEST_API_ TypeId GetTestTypeId()
GTEST_API_ AssertionResult CmpHelperEQ(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)
GTEST_API_::std::string FormatCompilerIndependentFileLocation(const char *file, int line)
void FlushInfoLog() Definition: gtest.h:1214
GTEST_API_ Int32 Int32FromGTestEnv(const char *flag, Int32 default_val)
TypeWithSize< 8 >::Int Int64 Definition: gtest.h:2397
void DefaultPrintTo(WrapPrinterType< kPrintContainer >, const C &container, ::std::ostream *os) Definition: gtest.h:8268
void UniversalPrint(const T &value, ::std::ostream *os) Definition: gtest.h:8727
GTEST_API_::std::string FormatFileLocation(const char *file, int line)
GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char)
GTEST_API_ std::string GetCapturedStderr()
GTEST_API_ size_t GetFileSize(FILE *file)
TypeWithSize< 4 >::UInt UInt32 Definition: gtest.h:2396
bool AlwaysFalse() Definition: gtest.h:7177
bool IsDigit(char ch) Definition: gtest.h:2159
GTEST_API_ bool AlwaysTrue()
::std::vector< ::std::string > Strings Definition: gtest.h:8734
GTEST_API_ std::string DiffStrings(const std::string &left, const std::string &right, size_t *total_line_count)
GTEST_API_ void ReportInvalidTestSuiteType(const char *test_suite_name, CodeLocation code_location)
bool operator==(faketype, faketype) Definition: gtest.h:13853
GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
void TersePrintPrefixToStrings(const Tuple &, std::integral_constant< size_t, 0 >, Strings *) Definition: gtest.h:8739
GTestColor Definition: gtest.h:14141
@ COLOR_YELLOW Definition: gtest.h:14141
@ COLOR_GREEN Definition: gtest.h:14141
@ COLOR_RED Definition: gtest.h:14141
@ COLOR_DEFAULT Definition: gtest.h:14141
FloatingPoint< double > Double Definition: gtest.h:6757
TypeWithSize< 8 >::Int TimeInMillis Definition: gtest.h:2399
bool BoolFromGTestEnv(const char *flag, bool default_val)
TypeId GetTypeId() Definition: gtest.h:6783
GTEST_API_ AssertionResult CmpHelperSTRNE(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)
void PrintTupleTo(const T &, std::integral_constant< size_t, 0 >, ::std::ostream *) Definition: gtest.h:8485
IsContainer IsContainerTest(int) Definition: gtest.h:7252
Strings UniversalTersePrintTupleFieldsToStrings(const Tuple &value) Definition: gtest.h:8756
const char * StringFromGTestEnv(const char *flag, const char *default_val)
void(*)() TearDownTestSuiteFunc Definition: gtest.h:6838
bool IsAlNum(char ch) Definition: gtest.h:2156
void(*)() SetUpTestSuiteFunc Definition: gtest.h:6837
bool IsUpper(char ch) Definition: gtest.h:2168
AssertionResult CmpHelperOpFailure(const char *expr1, const char *expr2, const T1 &val1, const T2 &val2, const char *op) Definition: gtest.h:13920
GTEST_API_ void PrintStringTo(const ::std::string &s, ::std::ostream *os)
GTEST_API_ size_t GetThreadCount()
std::integral_constant< bool, B > bool_constant Definition: gtest.h:2133
GTEST_API_ void CaptureStderr()
TypeWithSize< 4 >::Int Int32 Definition: gtest.h:2395
std::string FormatForComparisonFailureMessage(const T1 &value, const T2 &) Definition: gtest.h:8239
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)
Iter ArrayAwareFind(Iter begin, Iter end, const Element &elem) Definition: gtest.h:7344
std::string DefaultParamName(const TestParamInfo< ParamType > &info) Definition: gtest.h:10648
SetUpTearDownSuiteFuncType GetNotDefaultOrNull(SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def) Definition: gtest.h:6854
To ImplicitCast_(To x) Definition: gtest.h:1292
AssertionResult CmpHelperFloatingPointEQ(const char *lhs_expression, const char *rhs_expression, RawType lhs_value, RawType rhs_value) Definition: gtest.h:14065
GTEST_API_ const char kStackTraceMarker[]
void TestNotEmpty() Definition: gtest.h:10655
bool IsXDigit(char ch) Definition: gtest.h:2171
GTestLogSeverity Definition: gtest.h:1182
@ GTEST_ERROR Definition: gtest.h:1185
@ GTEST_FATAL Definition: gtest.h:1186
@ GTEST_WARNING Definition: gtest.h:1184
@ GTEST_INFO Definition: gtest.h:1183
TypeWithSize< 8 >::UInt UInt64 Definition: gtest.h:2398
std::string StripTrailingSpaces(std::string str) Definition: gtest.h:2186
GTEST_API_ bool SkipPrefix(const char *prefix, const char **pstr)
std::string StreamableToString(const T &streamable) Definition: gtest.h:2704
GTEST_API_ std::vector< std::string > GetArgvs()
const void * TypeId Definition: gtest.h:6765
GTEST_API_ bool IsTrue(bool condition)
GTEST_API_ std::string ReadEntireFile(FILE *file)
char IsNotContainer Definition: gtest.h:7256
bool ParseInt32(const Message &src_text, const char *str, Int32 *value)
char ToUpper(char ch) Definition: gtest.h:2182
bool IsLower(char ch) Definition: gtest.h:2162
GTEST_INTERNAL_DEPRECATED("INSTANTIATE_TEST_CASE_P is deprecated, please use " "INSTANTIATE_TEST_SUITE_P") const expr bool InstantiateTestCase_P_IsDeprecated() Definition: gtest.h:7567
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)
GTEST_API_ void CaptureStdout()
void PrintRawArrayTo(const T a[], size_t count, ::std::ostream *os) Definition: gtest.h:8446
GTEST_API_ AssertionResult CmpHelperSTREQ(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)
void UniversalPrintArray(const T *begin, size_t len, ::std::ostream *os) Definition: gtest.h:8592
int IsContainer Definition: gtest.h:7245
const BiggestInt kMaxBiggestInt Definition: gtest.h:2340
char ToLower(char ch) Definition: gtest.h:2179
void PrintTo(const T &value, ::std::ostream *os) Definition: gtest.h:8345
GTEST_API_ void PrintWideStringTo(const ::std::wstring &s, ::std::ostream *os)
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest *unit_test, int skip_count)
GTEST_API_ AssertionResult DoubleNearPredFormat(const char *expr1, const char *expr2, const char *abs_error_expr, double val1, double val2, double abs_error)
GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string)
bool IsAlpha(char ch) Definition: gtest.h:2153
GTEST_API_ std::string GetCapturedStdout()
GTEST_API_ std::string GetBoolAssertionFailureMessage(const AssertionResult &assertion_result, const char *expression_text, const char *actual_predicate_value, const char *expected_predicate_value)
bool IsSpace(char ch) Definition: gtest.h:2165
bool ArrayEq(const T *lhs, size_t size, const U *rhs) Definition: gtest.h:7333
Derived * CheckedDowncastToActualType(Base *base) Definition: gtest.h:1341
GTEST_API_ std::string AppendUserMessage(const std::string >est_msg, const Message &user_msg)
bool operator!=(faketype, faketype) Definition: gtest.h:13854
void UniversalTersePrint(const T &value, ::std::ostream *os) Definition: gtest.h:8718
void CopyArray(const T *from, size_t size, U *to) Definition: gtest.h:7373
void DefaultPrintNonContainerTo(const T &value, ::std::ostream *os) Definition: gtest.h:8122
internal::ParamGenerator< bool > Bool() Definition: gtest.h:11334
Environment * AddGlobalTestEnvironment(Environment *env) Definition: gtest.h:13810
std::ostream & operator<<(std::ostream &os, const Message &sb) Definition: gtest.h:2693
GTEST_DECLARE_string_(death_test_style)
internal::ParamGenerator< T > Range(T start, T end, IncrementT step) Definition: gtest.h:11204
GTEST_API_ AssertionResult IsSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
GTEST_API_ AssertionResult FloatLE(const char *expr1, const char *expr2, float val1, float val2)
AssertionResult AssertPred1Helper(const char *pred_text, const char *e1, Pred pred, const T1 &v1) Definition: gtest.h:12438
constexpr bool StaticAssertTypeEq() noexcept Definition: gtest.h:14635
GTEST_API_ AssertionResult DoubleLE(const char *expr1, const char *expr2, double val1, double val2)
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) Definition: gtest.h:14773
internal::TimeInMillis TimeInMillis Definition: gtest.h:12854
::std::string PrintToString(const T &value) Definition: gtest.h:8777
AssertionResult AssertPred2Helper(const char *pred_text, const char *e1, const char *e2, Pred pred, const T1 &v1, const T2 &v2) Definition: gtest.h:12481
internal::ParamGenerator< typename Container::value_type > ValuesIn(const Container &container) Definition: gtest.h:11284
internal::CartesianProductHolder< Generator... > Combine(const Generator &... g) Definition: gtest.h:11385
GTEST_API_ AssertionResult IsNotSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
GTEST_API_ std::string TempDir()
internal::ValueArray< T... > Values(T... v) Definition: gtest.h:11310
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) Definition: gtest.h:12531
class GTEST_API_ testing::ScopedTrace GTEST_ATTRIBUTE_UNUSED_
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) Definition: gtest.h:12649
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) Definition: gtest.h:12587
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
internal::ParamGenerator< T > ValuesIn(const T(&array)[N]) Definition: gtest.h:11279
Definition: gtest.h:10340
std::string operator()(const TestParamInfo< ParamType > &info) const Definition: gtest.h:10342
Definition: gtest.h:10330
ParamType param Definition: gtest.h:10334
TestParamInfo(const ParamType &a_param, size_t an_index) Definition: gtest.h:10331
size_t index Definition: gtest.h:10335
int line Definition: gtest.h:6845
CodeLocation(const std::string &a_file, int a_line) Definition: gtest.h:6841
std::string file Definition: gtest.h:6844
const char * value Definition: gtest.h:7185
ConstCharPtr(const char *str) Definition: gtest.h:7183
T & type Definition: gtest.h:1265
const T & type Definition: gtest.h:1263
T type Definition: gtest.h:7495
FlatTupleBase(T... t) Definition: gtest.h:7531
FlatTupleElemBase(value_type t) Definition: gtest.h:7519
typename ElemFromList< I, typename MakeIndexSequence< sizeof...(T)>::type, T... >::type value_type Definition: gtest.h:7517
value_type value Definition: gtest.h:7520
decltype(*std::declval< typename C::const_iterator >()) value_type Definition: gtest.h:7294
std::is_same< typename std::remove_const< typename std::remove_reference< value_type >::type >::type, C > type Definition: gtest.h:7298
typename std::conditional< sizeof(T) !=0, ::testing::Test, void >::type Test Definition: gtest.h:6867
static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char *filename, int line_num) Definition: gtest.h:6884
static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char *filename, int line_num) Definition: gtest.h:6869
Definition: gtest.h:13852
|