51 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_
52 #define GTEST_INCLUDE_GTEST_GTEST_H_
93 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
94 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
131 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
132 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
287 # include <sys/types.h>
288 # include <sys/stat.h>
289 #endif // !_WIN32_WCE
295 #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
296 #define GTEST_FLAG_PREFIX_ "gtest_"
297 #define GTEST_FLAG_PREFIX_DASH_ "gtest-"
298 #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
299 #define GTEST_NAME_ "Google Test"
300 #define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/"
305 # define GTEST_GCC_VER_ \
306 (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
311 # define GTEST_OS_CYGWIN 1
312 #elif defined __SYMBIAN32__
313 # define GTEST_OS_SYMBIAN 1
315 # define GTEST_OS_WINDOWS 1
317 # define GTEST_OS_WINDOWS_MOBILE 1
318 # elif defined(__MINGW__) || defined(__MINGW32__)
319 # define GTEST_OS_WINDOWS_MINGW 1
321 # define GTEST_OS_WINDOWS_DESKTOP 1
322 # endif // _WIN32_WCE
323 #elif defined __APPLE__
324 # define GTEST_OS_MAC 1
325 #elif defined __linux__
326 # define GTEST_OS_LINUX 1
328 # define GTEST_OS_LINUX_ANDROID 1
330 #elif defined __MVS__
331 # define GTEST_OS_ZOS 1
332 #elif defined(__sun) && defined(__SVR4)
333 # define GTEST_OS_SOLARIS 1
335 # define GTEST_OS_AIX 1
336 #elif defined(__hpux)
337 # define GTEST_OS_HPUX 1
338 #elif defined __native_client__
339 # define GTEST_OS_NACL 1
345 #if !GTEST_OS_WINDOWS
354 # include <strings.h>
356 #elif !GTEST_OS_WINDOWS_MOBILE
362 #ifndef GTEST_HAS_POSIX_RE
363 # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
366 #if GTEST_HAS_POSIX_RE
374 # define GTEST_USES_POSIX_RE 1
376 #elif GTEST_OS_WINDOWS
380 # define GTEST_USES_SIMPLE_RE 1
386 # define GTEST_USES_SIMPLE_RE 1
388 #endif // GTEST_HAS_POSIX_RE
390 #ifndef GTEST_HAS_EXCEPTIONS
393 # if defined(_MSC_VER) || defined(__BORLANDC__)
397 # ifndef _HAS_EXCEPTIONS
398 # define _HAS_EXCEPTIONS 1
399 # endif // _HAS_EXCEPTIONS
400 # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS
401 # elif defined(__GNUC__) && __EXCEPTIONS
403 # define GTEST_HAS_EXCEPTIONS 1
404 # elif defined(__SUNPRO_CC)
408 # define GTEST_HAS_EXCEPTIONS 1
409 # elif defined(__IBMCPP__) && __EXCEPTIONS
411 # define GTEST_HAS_EXCEPTIONS 1
412 # elif defined(__HP_aCC)
415 # define GTEST_HAS_EXCEPTIONS 1
419 # define GTEST_HAS_EXCEPTIONS 0
420 # endif // defined(_MSC_VER) || defined(__BORLANDC__)
421 #endif // GTEST_HAS_EXCEPTIONS
423 #if !defined(GTEST_HAS_STD_STRING)
426 # define GTEST_HAS_STD_STRING 1
427 #elif !GTEST_HAS_STD_STRING
429 # error "Google Test cannot be used where ::std::string isn't available."
430 #endif // !defined(GTEST_HAS_STD_STRING)
432 #ifndef GTEST_HAS_GLOBAL_STRING
436 # define GTEST_HAS_GLOBAL_STRING 0
438 #endif // GTEST_HAS_GLOBAL_STRING
440 #ifndef GTEST_HAS_STD_WSTRING
449 # define GTEST_HAS_STD_WSTRING \
450 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS))
452 #endif // GTEST_HAS_STD_WSTRING
454 #ifndef GTEST_HAS_GLOBAL_WSTRING
457 # define GTEST_HAS_GLOBAL_WSTRING \
458 (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING)
459 #endif // GTEST_HAS_GLOBAL_WSTRING
462 #ifndef GTEST_HAS_RTTI
468 # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled.
469 # define GTEST_HAS_RTTI 1
471 # define GTEST_HAS_RTTI 0
475 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)
478 # define GTEST_HAS_RTTI 1
480 # define GTEST_HAS_RTTI 0
481 # endif // __GXX_RTTI
485 # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
488 # define GTEST_HAS_RTTI 1
490 # define GTEST_HAS_RTTI 0
496 # define GTEST_HAS_RTTI 1
500 #endif // GTEST_HAS_RTTI
509 #ifndef GTEST_HAS_PTHREAD
515 # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX)
516 #endif // GTEST_HAS_PTHREAD
518 #if GTEST_HAS_PTHREAD
521 # include <pthread.h>
530 #ifndef GTEST_HAS_TR1_TUPLE
532 # define GTEST_HAS_TR1_TUPLE 1
533 #endif // GTEST_HAS_TR1_TUPLE
537 #ifndef GTEST_USE_OWN_TR1_TUPLE
547 # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \
549 # define GTEST_USE_OWN_TR1_TUPLE 0
551 # define GTEST_USE_OWN_TR1_TUPLE 1
554 #endif // GTEST_USE_OWN_TR1_TUPLE
559 #if GTEST_HAS_TR1_TUPLE
561 # if GTEST_USE_OWN_TR1_TUPLE
597 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
598 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
607 #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
608 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
610 # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
611 template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
616 #define GTEST_0_TUPLE_(T) tuple<>
617 #define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
619 #define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
621 #define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
623 #define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
625 #define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
627 #define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
629 #define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
631 #define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
633 #define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
635 #define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
639 #define GTEST_0_TYPENAMES_(T)
640 #define GTEST_1_TYPENAMES_(T) typename T##0
641 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
642 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
643 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
645 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
646 typename T##3, typename T##4
647 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
648 typename T##3, typename T##4, typename T##5
649 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
650 typename T##3, typename T##4, typename T##5, typename T##6
651 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
652 typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
653 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
654 typename T##3, typename T##4, typename T##5, typename T##6, \
655 typename T##7, typename T##8
656 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
657 typename T##3, typename T##4, typename T##5, typename T##6, \
658 typename T##7, typename T##8, typename T##9
666 template <
typename T0 = void,
typename T1 = void,
typename T2 = void,
667 typename T3 = void,
typename T4 = void,
typename T5 = void,
668 typename T6 = void,
typename T7 = void,
typename T8 = void,
674 namespace gtest_internal {
677 template <
typename T>
678 struct ByRef {
typedef const T& type; };
679 template <
typename T>
680 struct ByRef<T&> {
typedef T& type; };
683 #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
687 template <
typename T>
689 template <
typename T>
693 #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
696 template <
int k>
class Get;
700 template <
bool kIndexVal
id,
int kIndex,
class Tuple>
703 template <GTEST_10_TYPENAMES_(T)>
706 template <GTEST_10_TYPENAMES_(T)>
709 template <GTEST_10_TYPENAMES_(T)>
712 template <GTEST_10_TYPENAMES_(T)>
715 template <GTEST_10_TYPENAMES_(T)>
718 template <GTEST_10_TYPENAMES_(T)>
721 template <GTEST_10_TYPENAMES_(T)>
724 template <GTEST_10_TYPENAMES_(T)>
727 template <GTEST_10_TYPENAMES_(T)>
730 template <GTEST_10_TYPENAMES_(T)>
740 tuple& operator=(
const tuple& ) {
return *
this; }
743 template <GTEST_1_TYPENAMES_(T)>
744 class GTEST_1_TUPLE_(T) {
750 explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
752 tuple(
const tuple& t) : f0_(t.f0_) {}
754 template <GTEST_1_TYPENAMES_(U)>
755 tuple(
const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
757 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
759 template <GTEST_1_TYPENAMES_(U)>
760 tuple& operator=(
const GTEST_1_TUPLE_(U)& t) {
764 GTEST_DECLARE_TUPLE_AS_FRIEND_
766 template <GTEST_1_TYPENAMES_(U)>
767 tuple& CopyFrom(
const GTEST_1_TUPLE_(U)& t) {
775 template <GTEST_2_TYPENAMES_(T)>
776 class GTEST_2_TUPLE_(T) {
778 template <
int k>
friend class gtest_internal::Get;
780 tuple() : f0_(), f1_() {}
782 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
785 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
787 template <GTEST_2_TYPENAMES_(U)>
788 tuple(
const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
789 template <
typename U0,
typename U1>
790 tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
792 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
794 template <GTEST_2_TYPENAMES_(U)>
795 tuple& operator=(
const GTEST_2_TUPLE_(U)& t) {
798 template <
typename U0,
typename U1>
799 tuple& operator=(const ::std::pair<U0, U1>& p) {
805 GTEST_DECLARE_TUPLE_AS_FRIEND_
807 template <GTEST_2_TYPENAMES_(U)>
808 tuple& CopyFrom(
const GTEST_2_TUPLE_(U)& t) {
818 template <GTEST_3_TYPENAMES_(T)>
819 class GTEST_3_TUPLE_(T) {
821 template <
int k>
friend class gtest_internal::Get;
823 tuple() : f0_(), f1_(), f2_() {}
825 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
826 GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
828 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
830 template <GTEST_3_TYPENAMES_(U)>
831 tuple(
const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
833 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
835 template <GTEST_3_TYPENAMES_(U)>
836 tuple& operator=(
const GTEST_3_TUPLE_(U)& t) {
840 GTEST_DECLARE_TUPLE_AS_FRIEND_
842 template <GTEST_3_TYPENAMES_(U)>
843 tuple& CopyFrom(
const GTEST_3_TUPLE_(U)& t) {
855 template <GTEST_4_TYPENAMES_(T)>
856 class GTEST_4_TUPLE_(T) {
858 template <
int k>
friend class gtest_internal::Get;
860 tuple() : f0_(), f1_(), f2_(), f3_() {}
862 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
863 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
866 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
868 template <GTEST_4_TYPENAMES_(U)>
869 tuple(
const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
872 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
874 template <GTEST_4_TYPENAMES_(U)>
875 tuple& operator=(
const GTEST_4_TUPLE_(U)& t) {
879 GTEST_DECLARE_TUPLE_AS_FRIEND_
881 template <GTEST_4_TYPENAMES_(U)>
882 tuple& CopyFrom(
const GTEST_4_TUPLE_(U)& t) {
896 template <GTEST_5_TYPENAMES_(T)>
897 class GTEST_5_TUPLE_(T) {
899 template <
int k>
friend class gtest_internal::Get;
901 tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
903 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
904 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
905 GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
907 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
910 template <GTEST_5_TYPENAMES_(U)>
911 tuple(
const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
912 f3_(t.f3_), f4_(t.f4_) {}
914 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
916 template <GTEST_5_TYPENAMES_(U)>
917 tuple& operator=(
const GTEST_5_TUPLE_(U)& t) {
921 GTEST_DECLARE_TUPLE_AS_FRIEND_
923 template <GTEST_5_TYPENAMES_(U)>
924 tuple& CopyFrom(
const GTEST_5_TUPLE_(U)& t) {
940 template <GTEST_6_TYPENAMES_(T)>
941 class GTEST_6_TUPLE_(T) {
943 template <
int k>
friend class gtest_internal::Get;
945 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
947 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
948 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
949 GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
952 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
953 f4_(t.f4_), f5_(t.f5_) {}
955 template <GTEST_6_TYPENAMES_(U)>
956 tuple(
const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
957 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
959 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
961 template <GTEST_6_TYPENAMES_(U)>
962 tuple& operator=(
const GTEST_6_TUPLE_(U)& t) {
966 GTEST_DECLARE_TUPLE_AS_FRIEND_
968 template <GTEST_6_TYPENAMES_(U)>
969 tuple& CopyFrom(
const GTEST_6_TUPLE_(U)& t) {
987 template <GTEST_7_TYPENAMES_(T)>
988 class GTEST_7_TUPLE_(T) {
990 template <
int k>
friend class gtest_internal::Get;
992 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
994 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
995 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
996 GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
997 f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
999 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1000 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
1002 template <GTEST_7_TYPENAMES_(U)>
1003 tuple(
const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
1004 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
1006 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
1008 template <GTEST_7_TYPENAMES_(U)>
1009 tuple& operator=(
const GTEST_7_TUPLE_(U)& t) {
1013 GTEST_DECLARE_TUPLE_AS_FRIEND_
1015 template <GTEST_7_TYPENAMES_(U)>
1016 tuple& CopyFrom(
const GTEST_7_TUPLE_(U)& t) {
1036 template <GTEST_8_TYPENAMES_(T)>
1037 class GTEST_8_TUPLE_(T) {
1039 template <
int k>
friend class gtest_internal::Get;
1041 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
1043 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
1044 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
1045 GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
1046 GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
1047 f5_(f5), f6_(f6), f7_(f7) {}
1049 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1050 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
1052 template <GTEST_8_TYPENAMES_(U)>
1053 tuple(
const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
1054 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
1056 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
1058 template <GTEST_8_TYPENAMES_(U)>
1059 tuple& operator=(
const GTEST_8_TUPLE_(U)& t) {
1063 GTEST_DECLARE_TUPLE_AS_FRIEND_
1065 template <GTEST_8_TYPENAMES_(U)>
1066 tuple& CopyFrom(
const GTEST_8_TUPLE_(U)& t) {
1088 template <GTEST_9_TYPENAMES_(T)>
1089 class GTEST_9_TUPLE_(T) {
1091 template <
int k>
friend class gtest_internal::Get;
1093 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
1095 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
1096 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
1097 GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
1098 GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
1099 f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
1101 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1102 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
1104 template <GTEST_9_TYPENAMES_(U)>
1105 tuple(
const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
1106 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
1108 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
1110 template <GTEST_9_TYPENAMES_(U)>
1111 tuple& operator=(
const GTEST_9_TUPLE_(U)& t) {
1115 GTEST_DECLARE_TUPLE_AS_FRIEND_
1117 template <GTEST_9_TYPENAMES_(U)>
1118 tuple& CopyFrom(
const GTEST_9_TUPLE_(U)& t) {
1142 template <GTEST_10_TYPENAMES_(T)>
1145 template <
int k>
friend class gtest_internal::Get;
1147 tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
1150 explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
1151 GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
1152 GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
1153 GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
1154 f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
1156 tuple(
const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
1157 f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
1159 template <GTEST_10_TYPENAMES_(U)>
1160 tuple(
const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
1161 f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
1164 tuple& operator=(
const tuple& t) {
return CopyFrom(t); }
1166 template <GTEST_10_TYPENAMES_(U)>
1167 tuple& operator=(
const GTEST_10_TUPLE_(U)& t) {
1171 GTEST_DECLARE_TUPLE_AS_FRIEND_
1173 template <GTEST_10_TYPENAMES_(U)>
1174 tuple& CopyFrom(
const GTEST_10_TUPLE_(U)& t) {
1206 inline tuple<> make_tuple() {
return tuple<>(); }
1208 template <GTEST_1_TYPENAMES_(T)>
1209 inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
1210 return GTEST_1_TUPLE_(T)(f0);
1213 template <GTEST_2_TYPENAMES_(T)>
1214 inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
1215 return GTEST_2_TUPLE_(T)(f0, f1);
1218 template <GTEST_3_TYPENAMES_(T)>
1219 inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
1220 return GTEST_3_TUPLE_(T)(f0, f1, f2);
1223 template <GTEST_4_TYPENAMES_(T)>
1224 inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1226 return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
1229 template <GTEST_5_TYPENAMES_(T)>
1230 inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1231 const T3& f3, const T4& f4) {
1232 return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
1235 template <GTEST_6_TYPENAMES_(T)>
1236 inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1237 const T3& f3, const T4& f4, const T5& f5) {
1238 return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
1241 template <GTEST_7_TYPENAMES_(T)>
1242 inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1243 const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
1244 return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
1247 template <GTEST_8_TYPENAMES_(T)>
1248 inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1249 const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
1250 return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
1253 template <GTEST_9_TYPENAMES_(T)>
1254 inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1255 const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
1257 return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
1260 template <GTEST_10_TYPENAMES_(T)>
1261 inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
1262 const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
1263 const T8& f8, const T9& f9) {
1264 return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
1271 template <GTEST_0_TYPENAMES_(T)>
1272 struct tuple_size<GTEST_0_TUPLE_(T)> {
static const int value = 0; };
1274 template <GTEST_1_TYPENAMES_(T)>
1275 struct tuple_size<GTEST_1_TUPLE_(T)> {
static const int value = 1; };
1277 template <GTEST_2_TYPENAMES_(T)>
1278 struct tuple_size<GTEST_2_TUPLE_(T)> {
static const int value = 2; };
1280 template <GTEST_3_TYPENAMES_(T)>
1281 struct tuple_size<GTEST_3_TUPLE_(T)> {
static const int value = 3; };
1283 template <GTEST_4_TYPENAMES_(T)>
1284 struct tuple_size<GTEST_4_TUPLE_(T)> {
static const int value = 4; };
1286 template <GTEST_5_TYPENAMES_(T)>
1287 struct tuple_size<GTEST_5_TUPLE_(T)> {
static const int value = 5; };
1289 template <GTEST_6_TYPENAMES_(T)>
1290 struct tuple_size<GTEST_6_TUPLE_(T)> {
static const int value = 6; };
1292 template <GTEST_7_TYPENAMES_(T)>
1293 struct tuple_size<GTEST_7_TUPLE_(T)> {
static const int value = 7; };
1295 template <GTEST_8_TYPENAMES_(T)>
1296 struct tuple_size<GTEST_8_TUPLE_(T)> {
static const int value = 8; };
1298 template <GTEST_9_TYPENAMES_(T)>
1299 struct tuple_size<GTEST_9_TUPLE_(T)> {
static const int value = 9; };
1301 template <GTEST_10_TYPENAMES_(T)>
1302 struct tuple_size<GTEST_10_TUPLE_(T)> {
static const int value = 10; };
1304 template <
int k,
class Tuple>
1307 k < (tuple_size<Tuple>::value), k, Tuple>::type type;
1310 #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
1314 namespace gtest_internal {
1319 template <
class Tuple>
1320 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
1321 Field(Tuple& t) {
return t.f0_; }
1323 template <
class Tuple>
1324 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
1325 ConstField(
const Tuple& t) {
return t.f0_; }
1331 template <
class Tuple>
1332 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
1333 Field(Tuple& t) {
return t.f1_; }
1335 template <
class Tuple>
1336 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
1337 ConstField(
const Tuple& t) {
return t.f1_; }
1343 template <
class Tuple>
1344 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
1345 Field(Tuple& t) {
return t.f2_; }
1347 template <
class Tuple>
1348 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
1349 ConstField(
const Tuple& t) {
return t.f2_; }
1355 template <
class Tuple>
1356 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
1357 Field(Tuple& t) {
return t.f3_; }
1359 template <
class Tuple>
1360 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
1361 ConstField(
const Tuple& t) {
return t.f3_; }
1367 template <
class Tuple>
1368 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
1369 Field(Tuple& t) {
return t.f4_; }
1371 template <
class Tuple>
1372 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
1373 ConstField(
const Tuple& t) {
return t.f4_; }
1379 template <
class Tuple>
1380 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
1381 Field(Tuple& t) {
return t.f5_; }
1383 template <
class Tuple>
1384 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
1385 ConstField(
const Tuple& t) {
return t.f5_; }
1391 template <
class Tuple>
1392 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
1393 Field(Tuple& t) {
return t.f6_; }
1395 template <
class Tuple>
1396 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
1397 ConstField(
const Tuple& t) {
return t.f6_; }
1403 template <
class Tuple>
1404 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
1405 Field(Tuple& t) {
return t.f7_; }
1407 template <
class Tuple>
1408 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
1409 ConstField(
const Tuple& t) {
return t.f7_; }
1415 template <
class Tuple>
1416 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
1417 Field(Tuple& t) {
return t.f8_; }
1419 template <
class Tuple>
1420 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
1421 ConstField(
const Tuple& t) {
return t.f8_; }
1427 template <
class Tuple>
1428 static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
1429 Field(Tuple& t) {
return t.f9_; }
1431 template <
class Tuple>
1432 static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
1433 ConstField(
const Tuple& t) {
return t.f9_; }
1438 template <
int k, GTEST_10_TYPENAMES_(T)>
1439 GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
1440 get(GTEST_10_TUPLE_(T)& t) {
1444 template <
int k, GTEST_10_TYPENAMES_(T)>
1445 GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
1446 get(const GTEST_10_TUPLE_(T)& t) {
1447 return gtest_internal::Get<k>::ConstField(t);
1454 namespace gtest_internal {
1460 template <
int kSize1,
int kSize2>
1465 template <
class Tuple1,
class Tuple2>
1466 static bool Eq(
const Tuple1& ,
const Tuple2& ) {
1473 template <
class Tuple1,
class Tuple2>
1474 static bool Eq(
const Tuple1& t1,
const Tuple2& t2) {
1476 ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
1482 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
1483 inline bool operator==(
const GTEST_10_TUPLE_(T)& t,
1484 const GTEST_10_TUPLE_(U)& u) {
1490 template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
1491 inline bool operator!=(
const GTEST_10_TUPLE_(T)& t,
1492 const GTEST_10_TUPLE_(U)& u) {
return !(t == u); }
1500 #undef GTEST_0_TUPLE_
1501 #undef GTEST_1_TUPLE_
1502 #undef GTEST_2_TUPLE_
1503 #undef GTEST_3_TUPLE_
1504 #undef GTEST_4_TUPLE_
1505 #undef GTEST_5_TUPLE_
1506 #undef GTEST_6_TUPLE_
1507 #undef GTEST_7_TUPLE_
1508 #undef GTEST_8_TUPLE_
1509 #undef GTEST_9_TUPLE_
1510 #undef GTEST_10_TUPLE_
1512 #undef GTEST_0_TYPENAMES_
1513 #undef GTEST_1_TYPENAMES_
1514 #undef GTEST_2_TYPENAMES_
1515 #undef GTEST_3_TYPENAMES_
1516 #undef GTEST_4_TYPENAMES_
1517 #undef GTEST_5_TYPENAMES_
1518 #undef GTEST_6_TYPENAMES_
1519 #undef GTEST_7_TYPENAMES_
1520 #undef GTEST_8_TYPENAMES_
1521 #undef GTEST_9_TYPENAMES_
1522 #undef GTEST_10_TYPENAMES_
1524 #undef GTEST_DECLARE_TUPLE_AS_FRIEND_
1525 #undef GTEST_BY_REF_
1526 #undef GTEST_ADD_REF_
1527 #undef GTEST_TUPLE_ELEMENT_
1529 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
1530 # elif GTEST_OS_SYMBIAN
1537 # ifdef BOOST_HAS_TR1_TUPLE
1538 # undef BOOST_HAS_TR1_TUPLE
1539 # endif // BOOST_HAS_TR1_TUPLE
1543 # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
1546 # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000)
1550 # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
1556 # define _TR1_FUNCTIONAL 1
1557 # include <tr1/tuple>
1558 # undef _TR1_FUNCTIONAL // Allows the user to #include
1561 # include <tr1/tuple>
1562 # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
1568 # endif // GTEST_USE_OWN_TR1_TUPLE
1570 #endif // GTEST_HAS_TR1_TUPLE
1576 #ifndef GTEST_HAS_CLONE
1579 # if GTEST_OS_LINUX && !defined(__ia64__)
1580 # define GTEST_HAS_CLONE 1
1582 # define GTEST_HAS_CLONE 0
1583 # endif // GTEST_OS_LINUX && !defined(__ia64__)
1585 #endif // GTEST_HAS_CLONE
1589 #ifndef GTEST_HAS_STREAM_REDIRECTION
1592 # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN
1593 # define GTEST_HAS_STREAM_REDIRECTION 0
1595 # define GTEST_HAS_STREAM_REDIRECTION 1
1596 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN
1597 #endif // GTEST_HAS_STREAM_REDIRECTION
1603 #if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
1604 (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \
1605 GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX)
1606 # define GTEST_HAS_DEATH_TEST 1
1613 #define GTEST_HAS_PARAM_TEST 1
1619 #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \
1620 defined(__IBMCPP__) || defined(__HP_aCC)
1621 # define GTEST_HAS_TYPED_TEST 1
1622 # define GTEST_HAS_TYPED_TEST_P 1
1629 #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC)
1630 # define GTEST_HAS_COMBINE 1
1634 #define GTEST_WIDE_STRING_USES_UTF16_ \
1635 (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX)
1639 # define GTEST_CAN_STREAM_RESULTS_ 1
1652 #ifdef __INTEL_COMPILER
1653 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_
1655 # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT
1669 #if defined(__GNUC__) && !defined(COMPILER_ICC)
1670 # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
1672 # define GTEST_ATTRIBUTE_UNUSED_
1677 #define GTEST_DISALLOW_ASSIGN_(type)\
1678 void operator=(type const &)
1682 #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\
1683 type(type const &);\
1684 GTEST_DISALLOW_ASSIGN_(type)
1691 #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC)
1692 # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))
1694 # define GTEST_MUST_USE_RESULT_
1695 #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC
1700 #ifndef GTEST_HAS_SEH
1703 # if defined(_MSC_VER) || defined(__BORLANDC__)
1705 # define GTEST_HAS_SEH 1
1708 # define GTEST_HAS_SEH 0
1711 #endif // GTEST_HAS_SEH
1715 # if GTEST_LINKED_AS_SHARED_LIBRARY
1716 # define GTEST_API_ __declspec(dllimport)
1717 # elif GTEST_CREATE_SHARED_LIBRARY
1718 # define GTEST_API_ __declspec(dllexport)
1729 # define GTEST_NO_INLINE_ __attribute__((noinline))
1731 # define GTEST_NO_INLINE_
1738 namespace internal {
1761 #define GTEST_COMPILE_ASSERT_(expr, msg) \
1762 typedef ::testing::internal::CompileAssert<(bool(expr))> \
1763 msg[bool(expr) ? 1 : -1]
1809 template <
typename T1,
typename T2>
1812 template <
typename T>
1815 #if GTEST_HAS_GLOBAL_STRING
1816 typedef ::string string;
1818 typedef ::std::string string;
1819 #endif // GTEST_HAS_GLOBAL_STRING
1821 #if GTEST_HAS_GLOBAL_WSTRING
1822 typedef ::wstring wstring;
1823 #elif GTEST_HAS_STD_WSTRING
1824 typedef ::std::wstring wstring;
1825 #endif // GTEST_HAS_GLOBAL_WSTRING
1829 GTEST_API_
bool IsTrue(
bool condition);
1835 template <
typename T>
1838 typedef T element_type;
1840 explicit scoped_ptr(T* p = NULL) : ptr_(p) {}
1843 T& operator*()
const {
return *ptr_; }
1844 T* operator->()
const {
return ptr_; }
1845 T*
get()
const {
return ptr_; }
1848 T*
const ptr = ptr_;
1853 void reset(T* p = NULL) {
1855 if (IsTrue(
sizeof(T) > 0)) {
1875 RE(
const RE& other) { Init(other.pattern()); }
1878 RE(const ::std::string& regex) { Init(regex.c_str()); }
1880 #if GTEST_HAS_GLOBAL_STRING
1882 RE(const ::string& regex) { Init(regex.c_str()); }
1884 #endif // GTEST_HAS_GLOBAL_STRING
1886 RE(
const char* regex) { Init(regex); }
1890 const char* pattern()
const {
return pattern_; }
1899 static bool FullMatch(const ::std::string& str,
const RE& re) {
1900 return FullMatch(str.c_str(), re);
1902 static bool PartialMatch(const ::std::string& str,
const RE& re) {
1903 return PartialMatch(str.c_str(), re);
1906 #if GTEST_HAS_GLOBAL_STRING
1908 static bool FullMatch(const ::string& str,
const RE& re) {
1909 return FullMatch(str.c_str(), re);
1911 static bool PartialMatch(const ::string& str,
const RE& re) {
1912 return PartialMatch(str.c_str(), re);
1915 #endif // GTEST_HAS_GLOBAL_STRING
1917 static bool FullMatch(
const char* str,
const RE& re);
1918 static bool PartialMatch(
const char* str,
const RE& re);
1921 void Init(
const char* regex);
1927 const char* pattern_;
1930 #if GTEST_USES_POSIX_RE
1932 regex_t full_regex_;
1933 regex_t partial_regex_;
1935 #else // GTEST_USES_SIMPLE_RE
1937 const char* full_pattern_;
1941 GTEST_DISALLOW_ASSIGN_(
RE);
1946 GTEST_API_ ::std::string FormatFileLocation(
const char* file,
int line);
1951 GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(
const char* file,
1960 enum GTestLogSeverity {
1972 GTestLog(GTestLogSeverity severity,
const char* file,
int line);
1977 ::std::ostream& GetStream() { return ::std::cerr; }
1980 const GTestLogSeverity severity_;
1982 GTEST_DISALLOW_COPY_AND_ASSIGN_(
GTestLog);
1985 #define GTEST_LOG_(severity) \
1986 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \
1987 __FILE__, __LINE__).GetStream()
1989 inline void LogToStderr() {}
1990 inline void FlushInfoLog() { fflush(NULL); }
2006 #define GTEST_CHECK_(condition) \
2007 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
2008 if (::testing::internal::IsTrue(condition)) \
2011 GTEST_LOG_(FATAL) << "Condition " #condition " failed. "
2018 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \
2019 if (const int gtest_error = (posix_call)) \
2020 GTEST_LOG_(FATAL) << #posix_call << "failed with error " \
2043 template<
typename To>
2044 inline To ImplicitCast_(To x) {
return x; }
2067 template<
typename To,
typename From>
2068 inline To DownCast_(From* f) {
2075 ::testing::internal::ImplicitCast_<From*>(to);
2080 GTEST_CHECK_(f == NULL || dynamic_cast<To>(f) != NULL);
2082 return static_cast<To
>(f);
2090 template <
class Derived,
class Base>
2091 Derived* CheckedDowncastToActualType(Base* base) {
2093 GTEST_CHECK_(
typeid(*base) ==
typeid(Derived));
2094 return dynamic_cast<Derived*
>(base);
2096 return static_cast<Derived*
>(base);
2100 #if GTEST_HAS_STREAM_REDIRECTION
2108 GTEST_API_
void CaptureStdout();
2109 GTEST_API_ String GetCapturedStdout();
2110 GTEST_API_
void CaptureStderr();
2111 GTEST_API_ String GetCapturedStderr();
2113 #endif // GTEST_HAS_STREAM_REDIRECTION
2116 #if GTEST_HAS_DEATH_TEST
2119 extern ::std::vector<String> g_argvs;
2122 const ::std::vector<String>& GetArgvs();
2124 #endif // GTEST_HAS_DEATH_TEST
2128 #if GTEST_HAS_PTHREAD
2133 inline void SleepMilliseconds(
int n) {
2134 const timespec time = {
2138 nanosleep(&time, NULL);
2147 class Notification {
2149 Notification() : notified_(false) {}
2153 void Notify() { notified_ =
true; }
2157 void WaitForNotification() {
2159 SleepMilliseconds(10);
2164 volatile bool notified_;
2166 GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
2174 class ThreadWithParamBase {
2176 virtual ~ThreadWithParamBase() {}
2177 virtual void Run() = 0;
2186 extern "C" inline void* ThreadFuncWithCLinkage(
void* thread) {
2187 static_cast<ThreadWithParamBase*
>(thread)->Run();
2203 template <
typename T>
2204 class ThreadWithParam :
public ThreadWithParamBase {
2206 typedef void (*UserThreadFunc)(T);
2209 UserThreadFunc func, T param, Notification* thread_can_start)
2212 thread_can_start_(thread_can_start),
2214 ThreadWithParamBase*
const base =
this;
2217 GTEST_CHECK_POSIX_SUCCESS_(
2218 pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base));
2220 ~ThreadWithParam() { Join(); }
2224 GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0));
2229 virtual void Run() {
2230 if (thread_can_start_ != NULL)
2231 thread_can_start_->WaitForNotification();
2236 const UserThreadFunc func_;
2240 Notification*
const thread_can_start_;
2244 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam);
2270 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));
2271 owner_ = pthread_self();
2280 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));
2285 void AssertHeld()
const {
2286 GTEST_CHECK_(owner_ == pthread_self())
2287 <<
"The current thread is not holding the mutex @" <<
this;
2296 pthread_mutex_t mutex_;
2301 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
2302 extern ::testing::internal::MutexBase mutex
2305 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
2306 ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 }
2310 class Mutex :
public MutexBase {
2313 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
2317 GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));
2321 GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
2327 class GTestMutexLock {
2329 explicit GTestMutexLock(MutexBase* mutex)
2330 : mutex_(mutex) { mutex_->Lock(); }
2332 ~GTestMutexLock() { mutex_->Unlock(); }
2335 MutexBase*
const mutex_;
2337 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock);
2340 typedef GTestMutexLock MutexLock;
2348 class ThreadLocalValueHolderBase {
2350 virtual ~ThreadLocalValueHolderBase() {}
2355 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
2356 delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
2388 template <
typename T>
2391 ThreadLocal() : key_(CreateKey()),
2393 explicit ThreadLocal(
const T& value) : key_(CreateKey()),
2398 DeleteThreadLocalValue(pthread_getspecific(key_));
2402 GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_));
2405 T* pointer() {
return GetOrCreateValue(); }
2406 const T* pointer()
const {
return GetOrCreateValue(); }
2407 const T&
get()
const {
return *pointer(); }
2408 void set(
const T& value) { *pointer() = value; }
2412 class ValueHolder :
public ThreadLocalValueHolderBase {
2414 explicit ValueHolder(
const T& value) : value_(value) {}
2416 T* pointer() {
return &value_; }
2420 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);
2423 static pthread_key_t CreateKey() {
2427 GTEST_CHECK_POSIX_SUCCESS_(
2428 pthread_key_create(&key, &DeleteThreadLocalValue));
2432 T* GetOrCreateValue()
const {
2433 ThreadLocalValueHolderBase*
const holder =
2434 static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(key_));
2435 if (holder != NULL) {
2436 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
2439 ValueHolder*
const new_holder =
new ValueHolder(default_);
2440 ThreadLocalValueHolderBase*
const holder_base = new_holder;
2441 GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base));
2442 return new_holder->pointer();
2446 const pthread_key_t key_;
2449 GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
2452 # define GTEST_IS_THREADSAFE 1
2454 #else // GTEST_HAS_PTHREAD
2464 void AssertHeld()
const {}
2467 # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
2468 extern ::testing::internal::Mutex mutex
2470 # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex
2479 template <
typename T>
2483 explicit ThreadLocal(
const T& value) : value_(value) {}
2484 T* pointer() {
return &value_; }
2485 const T* pointer()
const {
return &value_; }
2486 const T&
get()
const {
return value_; }
2487 void set(
const T& value) { value_ = value; }
2494 # define GTEST_IS_THREADSAFE 0
2496 #endif // GTEST_HAS_PTHREAD
2500 GTEST_API_
size_t GetThreadCount();
2508 #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
2511 # define GTEST_ELLIPSIS_NEEDS_POD_ 1
2513 # define GTEST_CAN_COMPARE_NULL 1
2520 #if defined(__SYMBIAN32__) || defined(__IBMCPP__)
2521 # define GTEST_NEEDS_IS_POINTER_ 1
2524 template <
bool bool_value>
2527 static const bool value = bool_value;
2534 template <
typename T>
2537 template <
typename T>
2540 template <
typename Iterator>
2542 typedef typename Iterator::value_type value_type;
2545 template <
typename T>
2547 typedef T value_type;
2550 template <
typename T>
2552 typedef T value_type;
2555 #if GTEST_OS_WINDOWS
2556 # define GTEST_PATH_SEP_ "\\"
2557 # define GTEST_HAS_ALT_PATH_SEP_ 1
2559 typedef __int64 BiggestInt;
2561 # define GTEST_PATH_SEP_ "/"
2562 # define GTEST_HAS_ALT_PATH_SEP_ 0
2563 typedef long long BiggestInt;
2564 #endif // GTEST_OS_WINDOWS
2573 inline bool IsAlpha(
char ch) {
2574 return isalpha(static_cast<unsigned char>(ch)) != 0;
2576 inline bool IsAlNum(
char ch) {
2577 return isalnum(static_cast<unsigned char>(ch)) != 0;
2579 inline bool IsDigit(
char ch) {
2580 return isdigit(static_cast<unsigned char>(ch)) != 0;
2582 inline bool IsLower(
char ch) {
2583 return islower(static_cast<unsigned char>(ch)) != 0;
2585 inline bool IsSpace(
char ch) {
2586 return isspace(static_cast<unsigned char>(ch)) != 0;
2588 inline bool IsUpper(
char ch) {
2589 return isupper(static_cast<unsigned char>(ch)) != 0;
2591 inline bool IsXDigit(
char ch) {
2592 return isxdigit(static_cast<unsigned char>(ch)) != 0;
2595 inline char ToLower(
char ch) {
2596 return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
2598 inline char ToUpper(
char ch) {
2599 return static_cast<char>(toupper(static_cast<unsigned char>(ch)));
2612 #if GTEST_OS_WINDOWS
2614 typedef struct _stat StatStruct;
2616 # ifdef __BORLANDC__
2617 inline int IsATTY(
int fd) {
return isatty(fd); }
2618 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2619 return stricmp(s1, s2);
2621 inline char* StrDup(
const char* src) {
return strdup(src); }
2622 # else // !__BORLANDC__
2623 # if GTEST_OS_WINDOWS_MOBILE
2624 inline int IsATTY(
int ) {
return 0; }
2626 inline int IsATTY(
int fd) {
return _isatty(fd); }
2627 # endif // GTEST_OS_WINDOWS_MOBILE
2628 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2629 return _stricmp(s1, s2);
2631 inline char* StrDup(
const char* src) {
return _strdup(src); }
2632 # endif // __BORLANDC__
2634 # if GTEST_OS_WINDOWS_MOBILE
2635 inline int FileNo(FILE* file) {
return reinterpret_cast<int>(_fileno(file)); }
2639 inline int FileNo(FILE* file) {
return _fileno(file); }
2640 inline int Stat(
const char* path, StatStruct* buf) {
return _stat(path, buf); }
2641 inline int RmDir(
const char* dir) {
return _rmdir(dir); }
2642 inline bool IsDir(
const StatStruct& st) {
2643 return (_S_IFDIR & st.st_mode) != 0;
2645 # endif // GTEST_OS_WINDOWS_MOBILE
2649 typedef struct stat StatStruct;
2651 inline int FileNo(FILE* file) {
return fileno(file); }
2652 inline int IsATTY(
int fd) {
return isatty(fd); }
2653 inline int Stat(
const char* path, StatStruct* buf) {
return stat(path, buf); }
2654 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2655 return strcasecmp(s1, s2);
2657 inline char* StrDup(
const char* src) {
return strdup(src); }
2658 inline int RmDir(
const char* dir) {
return rmdir(dir); }
2659 inline bool IsDir(
const StatStruct& st) {
return S_ISDIR(st.st_mode); }
2661 #endif // GTEST_OS_WINDOWS
2667 # pragma warning(push)
2668 # pragma warning(disable:4996)
2671 inline const char* StrNCpy(
char* dest,
const char* src,
size_t n) {
2672 return strncpy(dest, src, n);
2679 #if !GTEST_OS_WINDOWS_MOBILE
2680 inline int ChDir(
const char* dir) {
return chdir(dir); }
2682 inline FILE* FOpen(
const char* path,
const char* mode) {
2683 return fopen(path, mode);
2685 #if !GTEST_OS_WINDOWS_MOBILE
2686 inline FILE *FReopen(
const char* path,
const char* mode, FILE* stream) {
2687 return freopen(path, mode, stream);
2689 inline FILE* FDOpen(
int fd,
const char* mode) {
return fdopen(fd, mode); }
2691 inline int FClose(FILE* fp) {
return fclose(fp); }
2692 #if !GTEST_OS_WINDOWS_MOBILE
2693 inline int Read(
int fd,
void* buf,
unsigned int count) {
2694 return static_cast<int>(read(fd, buf, count));
2696 inline int Write(
int fd,
const void* buf,
unsigned int count) {
2697 return static_cast<int>(write(fd, buf, count));
2699 inline int Close(
int fd) {
return close(fd); }
2700 inline const char* StrError(
int errnum) {
return strerror(errnum); }
2702 inline const char* GetEnv(
const char* name) {
2703 #if GTEST_OS_WINDOWS_MOBILE
2706 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
2709 const char*
const env = getenv(name);
2710 return (env != NULL && env[0] !=
'\0') ? env : NULL;
2712 return getenv(name);
2717 # pragma warning(pop) // Restores the warning state.
2720 #if GTEST_OS_WINDOWS_MOBILE
2726 inline void Abort() { abort(); }
2727 #endif // GTEST_OS_WINDOWS_MOBILE
2738 const BiggestInt kMaxBiggestInt =
2739 ~(
static_cast<BiggestInt
>(1) << (8*
sizeof(BiggestInt) - 1));
2759 template <
size_t size>
2776 typedef unsigned int UInt;
2784 #if GTEST_OS_WINDOWS
2785 typedef __int64 Int;
2786 typedef unsigned __int64 UInt;
2788 typedef long long Int;
2789 typedef unsigned long long UInt;
2790 #endif // GTEST_OS_WINDOWS
2795 typedef TypeWithSize<4>::UInt UInt32;
2797 typedef TypeWithSize<8>::UInt UInt64;
2803 #define GTEST_FLAG(name) FLAGS_gtest_##name
2806 #define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
2807 #define GTEST_DECLARE_int32_(name) \
2808 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
2809 #define GTEST_DECLARE_string_(name) \
2810 GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name)
2813 #define GTEST_DEFINE_bool_(name, default_val, doc) \
2814 GTEST_API_ bool GTEST_FLAG(name) = (default_val)
2815 #define GTEST_DEFINE_int32_(name, default_val, doc) \
2816 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
2817 #define GTEST_DEFINE_string_(name, default_val, doc) \
2818 GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val)
2826 bool ParseInt32(
const Message& src_text,
const char* str, Int32* value);
2830 bool BoolFromGTestEnv(
const char* flag,
bool default_val);
2831 GTEST_API_ Int32 Int32FromGTestEnv(
const char* flag, Int32 default_val);
2832 const char* StringFromGTestEnv(
const char* flag,
const char* default_val);
2837 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
2840 # include <stdlib.h>
2841 # include <sys/types.h>
2842 # include <sys/wait.h>
2843 # include <unistd.h>
2844 #endif // GTEST_OS_LINUX
2892 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
2893 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
2905 namespace internal {
2942 static String ShowCStringQuoted(
const char* c_str);
2951 static const char* CloneCString(
const char* c_str);
2953 #if GTEST_OS_WINDOWS_MOBILE
2966 static LPCWSTR AnsiToUtf16(
const char* c_str);
2976 static const char* Utf16ToAnsi(LPCWSTR utf16_str);
2984 static bool CStringEquals(
const char* lhs,
const char* rhs);
2990 static String ShowWideCString(
const wchar_t* wide_c_str);
2994 static String ShowWideCStringQuoted(
const wchar_t* wide_c_str);
3002 static bool WideCStringEquals(
const wchar_t* lhs,
const wchar_t* rhs);
3010 static bool CaseInsensitiveCStringEquals(
const char* lhs,
3025 static bool CaseInsensitiveWideCStringEquals(
const wchar_t* lhs,
3026 const wchar_t* rhs);
3037 static String Format(
const char* format, ...);
3042 String() : c_str_(NULL), length_(0) {}
3045 String(
const char* a_c_str) {
3046 if (a_c_str == NULL) {
3050 ConstructNonNull(a_c_str, strlen(a_c_str));
3058 String(
const char* buffer,
size_t a_length) {
3059 ConstructNonNull(buffer, a_length);
3064 String(
const String& str) : c_str_(NULL), length_(0) { *
this = str; }
3068 ~
String() {
delete[] c_str_; }
3076 String(const ::std::string& str) {
3077 ConstructNonNull(str.c_str(), str.length());
3080 operator ::std::string()
const { return ::std::string(c_str(), length()); }
3082 #if GTEST_HAS_GLOBAL_STRING
3083 String(const ::string& str) {
3084 ConstructNonNull(str.c_str(), str.length());
3087 operator ::string()
const { return ::string(c_str(), length()); }
3088 #endif // GTEST_HAS_GLOBAL_STRING
3091 bool empty()
const {
return (c_str() != NULL) && (length() == 0); }
3096 int Compare(
const String& rhs)
const;
3100 bool operator==(
const char* a_c_str)
const {
return Compare(a_c_str) == 0; }
3104 bool operator<(
const String& rhs)
const {
return Compare(rhs) < 0; }
3108 bool operator!=(
const char* a_c_str)
const {
return !(*
this == a_c_str); }
3112 bool EndsWith(
const char* suffix)
const;
3116 bool EndsWithCaseInsensitive(
const char* suffix)
const;
3120 size_t length()
const {
return length_; }
3125 const char* c_str()
const {
return c_str_; }
3128 const String& operator=(
const char* a_c_str) {
3129 return *
this =
String(a_c_str);
3136 if (rhs.c_str() == NULL) {
3140 ConstructNonNull(rhs.c_str(), rhs.length());
3152 void ConstructNonNull(
const char* buffer,
size_t a_length) {
3153 char*
const str =
new char[a_length + 1];
3154 memcpy(str, buffer, a_length);
3155 str[a_length] =
'\0';
3166 inline ::std::ostream& operator<<(::std::ostream& os,
const String& str) {
3167 if (str.c_str() == NULL) {
3170 const char*
const c_str = str.c_str();
3171 for (
size_t i = 0; i != str.length(); i++) {
3172 if (c_str[i] ==
'\0') {
3184 GTEST_API_ String StringStreamToString(::std::stringstream* stream);
3194 template <
typename T>
3195 String StreamableToString(
const T& streamable);
3200 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
3240 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
3241 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
3245 namespace internal {
3263 explicit FilePath(
const char* pathname) : pathname_(pathname) {
3267 explicit FilePath(
const String& pathname) : pathname_(pathname) {
3277 pathname_ = rhs.pathname_;
3280 String ToString()
const {
return pathname_; }
3281 const char* c_str()
const {
return pathname_.c_str(); }
3293 const char* extension);
3311 const char* extension);
3314 bool IsEmpty()
const {
return c_str() == NULL || *c_str() ==
'\0'; }
3319 FilePath RemoveTrailingPathSeparator()
const;
3327 FilePath RemoveDirectoryName()
const;
3341 FilePath RemoveExtension(
const char* extension)
const;
3347 bool CreateDirectoriesRecursively()
const;
3353 bool CreateFolder()
const;
3357 bool FileOrDirectoryExists()
const;
3361 bool DirectoryExists()
const;
3366 bool IsDirectory()
const;
3370 bool IsRootDirectory()
const;
3373 bool IsAbsolutePath()
const;
3401 const char* FindLastPathSeparator()
const;
3409 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
3453 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3454 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
3460 # include <cxxabi.h>
3461 # elif defined(__HP_aCC)
3462 # include <acxx_demangle.h>
3463 # endif // __GLIBCXX__
3466 namespace internal {
3471 template <
typename T>
3472 String GetTypeName() {
3475 const char*
const name =
typeid(T).name();
3476 # if defined(__GLIBCXX__) || defined(__HP_aCC)
3481 using abi::__cxa_demangle;
3482 # endif // __GLIBCXX__
3483 char*
const readable_name = __cxa_demangle(name, 0, 0, &status);
3484 const String name_str(status == 0 ? readable_name : name);
3485 free(readable_name);
3489 # endif // __GLIBCXX__ || __HP_aCC
3495 # endif // GTEST_HAS_RTTI
3498 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3504 template <
typename T1,
typename T2>
3505 struct AssertTypeEq;
3507 template <
typename T>
3508 struct AssertTypeEq<T, T> {
3530 template <
typename T1>
3533 typedef Types0 Tail;
3535 template <
typename T1,
typename T2>
3538 typedef Types1<T2> Tail;
3541 template <
typename T1,
typename T2,
typename T3>
3544 typedef Types2<T2, T3> Tail;
3547 template <
typename T1,
typename T2,
typename T3,
typename T4>
3550 typedef Types3<T2, T3, T4> Tail;
3553 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
3556 typedef Types4<T2, T3, T4, T5> Tail;
3559 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3563 typedef Types5<T2, T3, T4, T5, T6> Tail;
3566 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3567 typename T6,
typename T7>
3570 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
3573 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3574 typename T6,
typename T7,
typename T8>
3577 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
3580 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3581 typename T6,
typename T7,
typename T8,
typename T9>
3584 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
3587 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3588 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
3591 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
3594 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3595 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3599 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
3602 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3603 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3604 typename T11,
typename T12>
3607 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
3610 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3611 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3612 typename T11,
typename T12,
typename T13>
3615 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
3618 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3619 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3620 typename T11,
typename T12,
typename T13,
typename T14>
3623 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
3626 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3627 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3628 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
3631 typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3635 template <
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,
3641 typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3645 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3646 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3647 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3648 typename T16,
typename T17>
3651 typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3655 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3656 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3657 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3658 typename T16,
typename T17,
typename T18>
3661 typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3662 T16, T17, T18> Tail;
3665 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3666 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3667 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3668 typename T16,
typename T17,
typename T18,
typename T19>
3671 typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3672 T16, T17, T18, T19> Tail;
3675 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3676 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3677 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3678 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
3681 typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3682 T16, T17, T18, T19, T20> Tail;
3685 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3686 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3687 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3688 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3692 typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3693 T16, T17, T18, T19, T20, T21> Tail;
3696 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3697 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3698 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3699 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3700 typename T21,
typename T22>
3703 typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3704 T16, T17, T18, T19, T20, T21, T22> Tail;
3707 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3708 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3709 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3710 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3711 typename T21,
typename T22,
typename T23>
3714 typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3715 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
3718 template <
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>
3725 typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3726 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
3729 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3730 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3731 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3732 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3733 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
3736 typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3737 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
3740 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3741 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3742 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3743 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3744 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3748 typedef Types25<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> Tail;
3752 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3753 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3754 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3755 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3756 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3757 typename T26,
typename T27>
3760 typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3761 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
3764 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3765 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3766 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3767 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3768 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3769 typename T26,
typename T27,
typename T28>
3772 typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3773 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
3776 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3777 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3778 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3779 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3780 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3781 typename T26,
typename T27,
typename T28,
typename T29>
3784 typedef Types28<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,
3789 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3790 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3791 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3792 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3793 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3794 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
3797 typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3798 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3802 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3803 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3804 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3805 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3806 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3807 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3811 typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3812 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3816 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3817 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3818 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3819 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3820 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3821 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3822 typename T31,
typename T32>
3825 typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3826 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3827 T30, T31, T32> Tail;
3830 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3831 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3832 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3833 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3834 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3835 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3836 typename T31,
typename T32,
typename T33>
3839 typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3840 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3841 T30, T31, T32, T33> Tail;
3844 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3845 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3846 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3847 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3848 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3849 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3850 typename T31,
typename T32,
typename T33,
typename T34>
3853 typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3854 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3855 T30, T31, T32, T33, T34> Tail;
3858 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3859 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3860 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3861 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3862 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3863 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3864 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
3867 typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3868 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3869 T30, T31, T32, T33, T34, T35> Tail;
3872 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3873 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3874 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3875 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3876 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3877 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3878 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3882 typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3883 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3884 T30, T31, T32, T33, T34, T35, T36> Tail;
3887 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3888 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3889 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3890 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3891 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3892 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3893 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3894 typename T36,
typename T37>
3897 typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3898 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3899 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
3902 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3903 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3904 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3905 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3906 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3907 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3908 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3909 typename T36,
typename T37,
typename T38>
3912 typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3913 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3914 T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
3917 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3918 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3919 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3920 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3921 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3922 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3923 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3924 typename T36,
typename T37,
typename T38,
typename T39>
3927 typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3928 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3929 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
3932 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3933 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3934 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3935 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3936 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3937 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3938 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3939 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
3942 typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3943 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3944 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
3947 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3948 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3949 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3950 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3951 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3952 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3953 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3954 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3958 typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3959 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3960 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
3963 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3964 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3965 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3966 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3967 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3968 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3969 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3970 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3971 typename T41,
typename T42>
3974 typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3975 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3976 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
3979 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3980 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3981 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3982 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
3983 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
3984 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
3985 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
3986 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
3987 typename T41,
typename T42,
typename T43>
3990 typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
3991 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3992 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
3996 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
3997 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
3998 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
3999 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4000 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4001 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4002 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4003 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4004 typename T41,
typename T42,
typename T43,
typename T44>
4007 typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4008 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4009 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4013 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4014 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4015 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4016 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4017 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4018 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4019 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4020 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4021 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
4024 typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4025 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4026 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4030 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4031 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4032 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4033 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4034 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4035 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4036 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4037 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4038 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4042 typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4043 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4044 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4045 T44, T45, T46> Tail;
4048 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4049 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4050 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4051 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4052 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4053 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4054 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4055 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4056 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4057 typename T46,
typename T47>
4060 typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4061 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4062 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4063 T44, T45, T46, T47> Tail;
4066 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4067 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4068 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4069 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4070 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4071 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4072 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4073 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4074 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4075 typename T46,
typename T47,
typename T48>
4078 typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4079 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4080 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4081 T44, T45, T46, T47, T48> Tail;
4084 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4085 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4086 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4087 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4088 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4089 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4090 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4091 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4092 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4093 typename T46,
typename T47,
typename T48,
typename T49>
4096 typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4097 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4098 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4099 T44, T45, T46, T47, T48, T49> Tail;
4102 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4103 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4104 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4105 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4106 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4107 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4108 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4109 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4110 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4111 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
4114 typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4115 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4116 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4117 T44, T45, T46, T47, T48, T49, T50> Tail;
4136 template <
typename T1 = internal::None,
typename T2 = internal::None,
4137 typename T3 = internal::None,
typename T4 = internal::None,
4138 typename T5 = internal::None,
typename T6 = internal::None,
4139 typename T7 = internal::None,
typename T8 = internal::None,
4140 typename T9 = internal::None,
typename T10 = internal::None,
4141 typename T11 = internal::None,
typename T12 = internal::None,
4142 typename T13 = internal::None,
typename T14 = internal::None,
4143 typename T15 = internal::None,
typename T16 = internal::None,
4144 typename T17 = internal::None,
typename T18 = internal::None,
4145 typename T19 = internal::None,
typename T20 = internal::None,
4146 typename T21 = internal::None,
typename T22 = internal::None,
4147 typename T23 = internal::None,
typename T24 = internal::None,
4148 typename T25 = internal::None,
typename T26 = internal::None,
4149 typename T27 = internal::None,
typename T28 = internal::None,
4150 typename T29 = internal::None,
typename T30 = internal::None,
4151 typename T31 = internal::None,
typename T32 = internal::None,
4152 typename T33 = internal::None,
typename T34 = internal::None,
4153 typename T35 = internal::None,
typename T36 = internal::None,
4154 typename T37 = internal::None,
typename T38 = internal::None,
4155 typename T39 = internal::None,
typename T40 = internal::None,
4156 typename T41 = internal::None,
typename T42 = internal::None,
4157 typename T43 = internal::None,
typename T44 = internal::None,
4158 typename T45 = internal::None,
typename T46 = internal::None,
4159 typename T47 = internal::None,
typename T48 = internal::None,
4160 typename T49 = internal::None,
typename T50 = internal::None>
4162 typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4163 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4164 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4165 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
4169 struct Types<internal::None, internal::None, internal::None, internal::None,
4170 internal::None, internal::None, internal::None, internal::None,
4171 internal::None, internal::None, internal::None, internal::None,
4172 internal::None, internal::None, internal::None, internal::None,
4173 internal::None, internal::None, internal::None, internal::None,
4174 internal::None, internal::None, internal::None, internal::None,
4175 internal::None, internal::None, internal::None, internal::None,
4176 internal::None, internal::None, internal::None, internal::None,
4177 internal::None, internal::None, internal::None, internal::None,
4178 internal::None, internal::None, internal::None, internal::None,
4179 internal::None, internal::None, internal::None, internal::None,
4180 internal::None, internal::None, internal::None, internal::None,
4181 internal::None, internal::None> {
4182 typedef internal::Types0 type;
4184 template <
typename T1>
4185 struct Types<T1, internal::None, internal::None, internal::None,
4186 internal::None, internal::None, internal::None, internal::None,
4187 internal::None, internal::None, internal::None, internal::None,
4188 internal::None, internal::None, internal::None, internal::None,
4189 internal::None, internal::None, internal::None, internal::None,
4190 internal::None, internal::None, internal::None, internal::None,
4191 internal::None, internal::None, internal::None, internal::None,
4192 internal::None, internal::None, internal::None, internal::None,
4193 internal::None, internal::None, internal::None, internal::None,
4194 internal::None, internal::None, internal::None, internal::None,
4195 internal::None, internal::None, internal::None, internal::None,
4196 internal::None, internal::None, internal::None, internal::None,
4197 internal::None, internal::None> {
4198 typedef internal::Types1<T1> type;
4200 template <
typename T1,
typename T2>
4201 struct Types<T1, T2, 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, internal::None,
4205 internal::None, internal::None, internal::None, internal::None,
4206 internal::None, internal::None, internal::None, internal::None,
4207 internal::None, internal::None, internal::None, internal::None,
4208 internal::None, internal::None, internal::None, internal::None,
4209 internal::None, internal::None, internal::None, internal::None,
4210 internal::None, internal::None, internal::None, internal::None,
4211 internal::None, internal::None, internal::None, internal::None,
4212 internal::None, internal::None, internal::None, internal::None,
4214 typedef internal::Types2<T1, T2> type;
4216 template <
typename T1,
typename T2,
typename T3>
4217 struct Types<T1, T2, T3, 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, internal::None, internal::None,
4222 internal::None, internal::None, internal::None, internal::None,
4223 internal::None, internal::None, internal::None, internal::None,
4224 internal::None, internal::None, internal::None, internal::None,
4225 internal::None, internal::None, internal::None, internal::None,
4226 internal::None, internal::None, internal::None, internal::None,
4227 internal::None, internal::None, internal::None, internal::None,
4228 internal::None, internal::None, internal::None, internal::None> {
4229 typedef internal::Types3<T1, T2, T3> type;
4231 template <
typename T1,
typename T2,
typename T3,
typename T4>
4232 struct Types<T1, T2, T3, T4, 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,
4238 internal::None, internal::None, internal::None, internal::None,
4239 internal::None, internal::None, internal::None, internal::None,
4240 internal::None, internal::None, internal::None, internal::None,
4241 internal::None, internal::None, internal::None, internal::None,
4242 internal::None, internal::None, internal::None, internal::None,
4243 internal::None, internal::None, internal::None> {
4244 typedef internal::Types4<T1, T2, T3, T4> type;
4246 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
4247 struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
4248 internal::None, internal::None, internal::None, 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,
4255 internal::None, internal::None, internal::None, internal::None,
4256 internal::None, internal::None, internal::None, internal::None,
4257 internal::None, internal::None, internal::None, internal::None,
4258 internal::None, internal::None, internal::None> {
4259 typedef internal::Types5<T1, T2, T3, T4, T5> type;
4261 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4263 struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
4264 internal::None, internal::None, internal::None, internal::None,
4265 internal::None, internal::None, internal::None, 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 internal::None, internal::None, internal::None, internal::None,
4273 internal::None, internal::None, internal::None, internal::None,
4274 internal::None, internal::None> {
4275 typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
4277 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4278 typename T6,
typename T7>
4279 struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
4280 internal::None, internal::None, internal::None, internal::None,
4281 internal::None, internal::None, internal::None, internal::None,
4282 internal::None, internal::None, internal::None, 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, internal::None,
4289 internal::None, internal::None, internal::None, internal::None,
4291 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
4293 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4294 typename T6,
typename T7,
typename T8>
4295 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
4296 internal::None, internal::None, internal::None, internal::None,
4297 internal::None, internal::None, internal::None, internal::None,
4298 internal::None, internal::None, internal::None, internal::None,
4299 internal::None, internal::None, internal::None, internal::None,
4300 internal::None, internal::None, internal::None, 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 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
4308 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4309 typename T6,
typename T7,
typename T8,
typename T9>
4310 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
4311 internal::None, internal::None, internal::None, internal::None,
4312 internal::None, internal::None, internal::None, internal::None,
4313 internal::None, internal::None, internal::None, internal::None,
4314 internal::None, internal::None, internal::None, internal::None,
4315 internal::None, internal::None, internal::None, internal::None,
4316 internal::None, internal::None, internal::None, internal::None,
4317 internal::None, internal::None, internal::None, internal::None,
4318 internal::None, internal::None, internal::None, internal::None,
4319 internal::None, internal::None, internal::None, internal::None,
4320 internal::None, internal::None, internal::None, internal::None> {
4321 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
4323 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4324 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
4325 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
4326 internal::None, internal::None, internal::None, internal::None,
4327 internal::None, internal::None, internal::None, internal::None,
4328 internal::None, internal::None, internal::None, internal::None,
4329 internal::None, internal::None, internal::None, internal::None,
4330 internal::None, internal::None, internal::None, internal::None,
4331 internal::None, internal::None, internal::None, internal::None,
4332 internal::None, internal::None, internal::None, internal::None,
4333 internal::None, internal::None, internal::None, internal::None,
4334 internal::None, internal::None, internal::None, internal::None,
4335 internal::None, internal::None, internal::None> {
4336 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
4338 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4339 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4341 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
4342 internal::None, internal::None, internal::None, internal::None,
4343 internal::None, internal::None, internal::None, internal::None,
4344 internal::None, internal::None, internal::None, internal::None,
4345 internal::None, internal::None, internal::None, internal::None,
4346 internal::None, internal::None, internal::None, internal::None,
4347 internal::None, internal::None, internal::None, internal::None,
4348 internal::None, internal::None, internal::None, internal::None,
4349 internal::None, internal::None, internal::None, internal::None,
4350 internal::None, internal::None, internal::None, internal::None,
4351 internal::None, internal::None> {
4352 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
4354 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4355 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4356 typename T11,
typename T12>
4357 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
4358 internal::None, internal::None, internal::None, internal::None,
4359 internal::None, internal::None, internal::None, internal::None,
4360 internal::None, internal::None, internal::None, internal::None,
4361 internal::None, internal::None, internal::None, internal::None,
4362 internal::None, internal::None, internal::None, internal::None,
4363 internal::None, internal::None, internal::None, internal::None,
4364 internal::None, internal::None, internal::None, internal::None,
4365 internal::None, internal::None, internal::None, internal::None,
4366 internal::None, internal::None, internal::None, internal::None,
4368 typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
4371 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4372 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4373 typename T11,
typename T12,
typename T13>
4374 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
4375 internal::None, internal::None, internal::None, internal::None,
4376 internal::None, internal::None, internal::None, internal::None,
4377 internal::None, internal::None, internal::None, internal::None,
4378 internal::None, internal::None, internal::None, internal::None,
4379 internal::None, internal::None, internal::None, internal::None,
4380 internal::None, internal::None, internal::None, internal::None,
4381 internal::None, internal::None, internal::None, internal::None,
4382 internal::None, internal::None, internal::None, internal::None,
4383 internal::None, internal::None, internal::None, internal::None,
4385 typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4388 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4389 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4390 typename T11,
typename T12,
typename T13,
typename T14>
4391 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
4392 internal::None, internal::None, internal::None, internal::None,
4393 internal::None, internal::None, internal::None, internal::None,
4394 internal::None, internal::None, internal::None, internal::None,
4395 internal::None, internal::None, internal::None, internal::None,
4396 internal::None, internal::None, internal::None, internal::None,
4397 internal::None, internal::None, internal::None, internal::None,
4398 internal::None, internal::None, internal::None, internal::None,
4399 internal::None, internal::None, internal::None, internal::None,
4400 internal::None, internal::None, internal::None, internal::None> {
4401 typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4404 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4405 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4406 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
4407 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4408 internal::None, internal::None, internal::None, internal::None,
4409 internal::None, 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, internal::None, internal::None,
4414 internal::None, internal::None, internal::None, internal::None,
4415 internal::None, internal::None, internal::None, internal::None,
4416 internal::None, internal::None, internal::None> {
4417 typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4418 T13, T14, T15> type;
4420 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4421 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4422 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4424 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4425 T16, internal::None, internal::None, internal::None, internal::None,
4426 internal::None, internal::None, internal::None, internal::None,
4427 internal::None, 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,
4431 internal::None, internal::None, internal::None, internal::None,
4432 internal::None, internal::None, internal::None, internal::None,
4433 internal::None, internal::None> {
4434 typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4435 T13, T14, T15, T16> type;
4437 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4438 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4439 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4440 typename T16,
typename T17>
4441 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4442 T16, T17, internal::None, internal::None, internal::None, internal::None,
4443 internal::None, internal::None, internal::None, internal::None,
4444 internal::None, internal::None, internal::None, internal::None,
4445 internal::None, 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 internal::None, internal::None, internal::None, internal::None,
4451 typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4452 T13, T14, T15, T16, T17> type;
4454 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4455 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4456 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4457 typename T16,
typename T17,
typename T18>
4458 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4459 T16, T17, T18, internal::None, internal::None, internal::None,
4460 internal::None, internal::None, internal::None, internal::None,
4461 internal::None, internal::None, internal::None, internal::None,
4462 internal::None, internal::None, internal::None, internal::None,
4463 internal::None, internal::None, internal::None, internal::None,
4464 internal::None, internal::None, internal::None, internal::None,
4465 internal::None, internal::None, internal::None, internal::None,
4466 internal::None, internal::None, internal::None, internal::None,
4468 typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4469 T13, T14, T15, T16, T17, T18> type;
4471 template <
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>
4475 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4476 T16, T17, T18, T19, internal::None, internal::None, internal::None,
4477 internal::None, internal::None, internal::None, internal::None,
4478 internal::None, internal::None, internal::None, internal::None,
4479 internal::None, internal::None, internal::None, internal::None,
4480 internal::None, internal::None, internal::None, internal::None,
4481 internal::None, internal::None, internal::None, internal::None,
4482 internal::None, internal::None, internal::None, internal::None,
4483 internal::None, internal::None, internal::None, internal::None> {
4484 typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4485 T13, T14, T15, T16, T17, T18, T19> type;
4487 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4488 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4489 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4490 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
4491 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4492 T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
4493 internal::None, internal::None, internal::None, internal::None,
4494 internal::None, internal::None, internal::None, internal::None,
4495 internal::None, internal::None, internal::None, internal::None,
4496 internal::None, internal::None, internal::None, internal::None,
4497 internal::None, internal::None, internal::None, internal::None,
4498 internal::None, internal::None, internal::None, internal::None,
4499 internal::None, internal::None, internal::None> {
4500 typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4501 T13, T14, T15, T16, T17, T18, T19, T20> type;
4503 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4504 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4505 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4506 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4508 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4509 T16, T17, T18, T19, T20, T21, internal::None, internal::None,
4510 internal::None, internal::None, internal::None, internal::None,
4511 internal::None, internal::None, internal::None, internal::None,
4512 internal::None, internal::None, internal::None, internal::None,
4513 internal::None, internal::None, internal::None, internal::None,
4514 internal::None, internal::None, internal::None, internal::None,
4515 internal::None, internal::None, internal::None, internal::None,
4516 internal::None, internal::None, internal::None> {
4517 typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4518 T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
4520 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4521 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4522 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4523 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4524 typename T21,
typename T22>
4525 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4526 T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
4527 internal::None, internal::None, internal::None, internal::None,
4528 internal::None, internal::None, internal::None, internal::None,
4529 internal::None, internal::None, internal::None, internal::None,
4530 internal::None, internal::None, internal::None, internal::None,
4531 internal::None, internal::None, internal::None, internal::None,
4532 internal::None, internal::None, internal::None, internal::None,
4533 internal::None, internal::None> {
4534 typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4535 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
4537 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4538 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4539 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4540 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4541 typename T21,
typename T22,
typename T23>
4542 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4543 T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
4544 internal::None, internal::None, internal::None, internal::None,
4545 internal::None, internal::None, internal::None, internal::None,
4546 internal::None, internal::None, internal::None, internal::None,
4547 internal::None, internal::None, internal::None, internal::None,
4548 internal::None, internal::None, internal::None, internal::None,
4549 internal::None, internal::None, internal::None, internal::None,
4551 typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4552 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
4554 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4555 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4556 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4557 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4558 typename T21,
typename T22,
typename T23,
typename T24>
4559 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4560 T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
4561 internal::None, internal::None, internal::None, internal::None,
4562 internal::None, internal::None, internal::None, internal::None,
4563 internal::None, internal::None, internal::None, internal::None,
4564 internal::None, internal::None, internal::None, internal::None,
4565 internal::None, internal::None, internal::None, internal::None,
4566 internal::None, internal::None, internal::None, internal::None,
4568 typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4569 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
4571 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4572 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4573 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4574 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4575 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
4576 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4577 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
4578 internal::None, internal::None, internal::None, internal::None,
4579 internal::None, internal::None, internal::None, internal::None,
4580 internal::None, internal::None, internal::None, internal::None,
4581 internal::None, internal::None, internal::None, internal::None,
4582 internal::None, internal::None, internal::None, internal::None,
4583 internal::None, internal::None, internal::None, internal::None> {
4584 typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4585 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
4587 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4588 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4589 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4590 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4591 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4593 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4594 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
4595 internal::None, internal::None, internal::None, internal::None,
4596 internal::None, internal::None, internal::None, internal::None,
4597 internal::None, internal::None, internal::None, internal::None,
4598 internal::None, internal::None, internal::None, internal::None,
4599 internal::None, internal::None, internal::None, internal::None,
4600 internal::None, internal::None, internal::None> {
4601 typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4602 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
4605 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4606 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4607 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4608 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4609 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4610 typename T26,
typename T27>
4611 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4612 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
4613 internal::None, internal::None, internal::None, internal::None,
4614 internal::None, internal::None, internal::None, internal::None,
4615 internal::None, internal::None, internal::None, internal::None,
4616 internal::None, internal::None, internal::None, internal::None,
4617 internal::None, internal::None, internal::None, internal::None,
4618 internal::None, internal::None> {
4619 typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4620 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4623 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4624 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4625 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4626 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4627 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4628 typename T26,
typename T27,
typename T28>
4629 struct 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,
4631 internal::None, internal::None, internal::None, internal::None,
4632 internal::None, internal::None, internal::None, internal::None,
4633 internal::None, internal::None, internal::None, internal::None,
4634 internal::None, internal::None, internal::None, internal::None,
4635 internal::None, internal::None, internal::None, internal::None,
4636 internal::None, internal::None> {
4637 typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4638 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4641 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4642 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4643 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4644 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4645 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4646 typename T26,
typename T27,
typename T28,
typename T29>
4647 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4648 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
4649 internal::None, internal::None, internal::None, internal::None,
4650 internal::None, internal::None, internal::None, internal::None,
4651 internal::None, internal::None, internal::None, internal::None,
4652 internal::None, internal::None, internal::None, internal::None,
4653 internal::None, internal::None, internal::None, internal::None,
4655 typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4656 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4657 T27, T28, T29> type;
4659 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4660 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4661 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4662 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4663 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4664 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
4665 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4666 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4667 internal::None, internal::None, internal::None, internal::None,
4668 internal::None, internal::None, internal::None, internal::None,
4669 internal::None, internal::None, internal::None, internal::None,
4670 internal::None, internal::None, internal::None, internal::None,
4671 internal::None, internal::None, internal::None, internal::None> {
4672 typedef internal::Types30<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> type;
4676 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4677 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4678 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4679 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4680 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4681 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4683 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4684 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4685 T31, internal::None, internal::None, internal::None, internal::None,
4686 internal::None, internal::None, internal::None, internal::None,
4687 internal::None, internal::None, internal::None, internal::None,
4688 internal::None, internal::None, internal::None, internal::None,
4689 internal::None, internal::None, internal::None> {
4690 typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4691 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4692 T27, T28, T29, T30, T31> type;
4694 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4695 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4696 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4697 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4698 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4699 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4700 typename T31,
typename T32>
4701 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4702 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4703 T31, T32, internal::None, internal::None, internal::None, internal::None,
4704 internal::None, internal::None, internal::None, internal::None,
4705 internal::None, internal::None, internal::None, internal::None,
4706 internal::None, internal::None, internal::None, internal::None,
4707 internal::None, internal::None> {
4708 typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4709 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4710 T27, T28, T29, T30, T31, T32> type;
4712 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4713 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4714 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4715 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4716 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4717 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4718 typename T31,
typename T32,
typename T33>
4719 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4720 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4721 T31, T32, T33, internal::None, internal::None, internal::None,
4722 internal::None, internal::None, internal::None, internal::None,
4723 internal::None, internal::None, internal::None, internal::None,
4724 internal::None, internal::None, internal::None, internal::None,
4725 internal::None, internal::None> {
4726 typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4727 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4728 T27, T28, T29, T30, T31, T32, T33> type;
4730 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4731 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4732 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4733 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4734 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4735 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4736 typename T31,
typename T32,
typename T33,
typename T34>
4737 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4738 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4739 T31, T32, T33, T34, internal::None, internal::None, internal::None,
4740 internal::None, internal::None, internal::None, internal::None,
4741 internal::None, internal::None, internal::None, internal::None,
4742 internal::None, internal::None, internal::None, internal::None,
4744 typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4745 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4746 T27, T28, T29, T30, T31, T32, T33, T34> type;
4748 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4749 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4750 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4751 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4752 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4753 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4754 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
4755 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4756 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4757 T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
4758 internal::None, internal::None, internal::None, internal::None,
4759 internal::None, internal::None, internal::None, internal::None,
4760 internal::None, internal::None, internal::None, internal::None> {
4761 typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4762 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4763 T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
4765 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4766 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4767 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4768 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4769 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4770 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4771 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4773 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4774 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4775 T31, T32, T33, T34, T35, T36, internal::None, internal::None,
4776 internal::None, internal::None, internal::None, internal::None,
4777 internal::None, internal::None, internal::None, internal::None,
4778 internal::None, internal::None, internal::None, internal::None> {
4779 typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4780 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4781 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
4783 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4784 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4785 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4786 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4787 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4788 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4789 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4790 typename T36,
typename T37>
4791 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4792 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4793 T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
4794 internal::None, internal::None, internal::None, internal::None,
4795 internal::None, internal::None, internal::None, internal::None,
4796 internal::None, internal::None, internal::None> {
4797 typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4798 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4799 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
4801 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4802 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4803 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4804 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4805 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4806 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4807 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4808 typename T36,
typename T37,
typename T38>
4809 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4810 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4811 T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
4812 internal::None, internal::None, internal::None, internal::None,
4813 internal::None, internal::None, internal::None, internal::None,
4814 internal::None, internal::None> {
4815 typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4816 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4817 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
4819 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4820 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4821 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4822 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4823 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4824 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4825 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4826 typename T36,
typename T37,
typename T38,
typename T39>
4827 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4828 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4829 T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
4830 internal::None, internal::None, internal::None, internal::None,
4831 internal::None, internal::None, internal::None, internal::None,
4832 internal::None, internal::None> {
4833 typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4834 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4835 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
4837 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4838 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4839 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4840 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4841 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4842 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4843 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4844 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
4845 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4846 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4847 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
4848 internal::None, internal::None, internal::None, internal::None,
4849 internal::None, internal::None, internal::None, internal::None,
4851 typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4852 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4853 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
4856 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4857 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4858 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4859 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4860 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4861 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4862 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4863 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4865 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4866 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4867 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
4868 internal::None, internal::None, internal::None, internal::None,
4869 internal::None, internal::None, internal::None, internal::None> {
4870 typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4871 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4872 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4875 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4876 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4877 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4878 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4879 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4880 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4881 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4882 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4883 typename T41,
typename T42>
4884 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4885 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4886 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
4887 internal::None, internal::None, internal::None, internal::None,
4888 internal::None, internal::None, internal::None> {
4889 typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4890 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4891 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4894 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4895 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4896 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4897 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4898 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4899 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4900 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4901 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4902 typename T41,
typename T42,
typename T43>
4903 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4904 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4905 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
4906 internal::None, internal::None, internal::None, internal::None,
4907 internal::None, internal::None, internal::None> {
4908 typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4909 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4910 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4911 T41, T42, T43> type;
4913 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4914 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4915 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4916 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4917 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4918 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4919 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4920 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4921 typename T41,
typename T42,
typename T43,
typename T44>
4922 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4923 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4924 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
4925 internal::None, internal::None, internal::None, internal::None,
4926 internal::None, internal::None> {
4927 typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4928 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4929 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4930 T41, T42, T43, T44> type;
4932 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4933 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4934 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4935 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4936 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4937 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4938 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4939 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4940 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
4941 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4942 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4943 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4944 internal::None, internal::None, internal::None, internal::None,
4946 typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4947 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4948 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4949 T41, T42, T43, T44, T45> type;
4951 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4952 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4953 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4954 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4955 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4956 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4957 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4958 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4959 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4961 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4962 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4963 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4964 T46, internal::None, internal::None, internal::None, internal::None> {
4965 typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4966 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4967 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4968 T41, T42, T43, T44, T45, T46> type;
4970 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4971 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4972 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4973 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4974 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4975 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4976 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4977 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4978 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4979 typename T46,
typename T47>
4980 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
4981 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
4982 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
4983 T46, T47, internal::None, internal::None, internal::None> {
4984 typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
4985 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
4986 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
4987 T41, T42, T43, T44, T45, T46, T47> type;
4989 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
4990 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
4991 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
4992 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
4993 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
4994 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
4995 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
4996 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
4997 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
4998 typename T46,
typename T47,
typename T48>
4999 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5000 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5001 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
5002 T46, T47, T48, internal::None, internal::None> {
5003 typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
5004 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5005 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5006 T41, T42, T43, T44, T45, T46, T47, T48> type;
5008 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
5009 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
5010 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
5011 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
5012 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
5013 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
5014 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
5015 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
5016 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
5017 typename T46,
typename T47,
typename T48,
typename T49>
5018 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
5019 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
5020 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
5021 T46, T47, T48, T49, internal::None> {
5022 typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
5023 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
5024 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
5025 T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
5028 namespace internal {
5030 # define GTEST_TEMPLATE_ template <typename T> class
5040 template <GTEST_TEMPLATE_ Tmpl>
5041 struct TemplateSel {
5042 template <
typename T>
5044 typedef Tmpl<T> type;
5048 # define GTEST_BIND_(TmplSel, T) \
5049 TmplSel::template Bind<T>::type
5055 template <
typename T>
5066 struct Templates0 {};
5070 template <GTEST_TEMPLATE_ T1>
5072 typedef TemplateSel<T1> Head;
5073 typedef Templates0 Tail;
5075 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
5077 typedef TemplateSel<T1> Head;
5078 typedef Templates1<T2> Tail;
5081 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
5083 typedef TemplateSel<T1> Head;
5084 typedef Templates2<T2, T3> Tail;
5087 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5090 typedef TemplateSel<T1> Head;
5091 typedef Templates3<T2, T3, T4> Tail;
5094 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5095 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
5097 typedef TemplateSel<T1> Head;
5098 typedef Templates4<T2, T3, T4, T5> Tail;
5101 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5102 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
5104 typedef TemplateSel<T1> Head;
5105 typedef Templates5<T2, T3, T4, T5, T6> Tail;
5108 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5109 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5112 typedef TemplateSel<T1> Head;
5113 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
5116 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5117 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5118 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
5120 typedef TemplateSel<T1> Head;
5121 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
5124 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5125 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5126 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
5128 typedef TemplateSel<T1> Head;
5129 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
5132 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5133 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5134 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5135 GTEST_TEMPLATE_ T10>
5136 struct Templates10 {
5137 typedef TemplateSel<T1> Head;
5138 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
5141 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5142 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5143 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5144 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
5145 struct Templates11 {
5146 typedef TemplateSel<T1> Head;
5147 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
5150 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5151 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5152 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5153 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
5154 struct Templates12 {
5155 typedef TemplateSel<T1> Head;
5156 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
5159 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5160 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5161 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5162 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5163 GTEST_TEMPLATE_ T13>
5164 struct Templates13 {
5165 typedef TemplateSel<T1> Head;
5166 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
5169 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5170 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5171 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5172 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5173 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
5174 struct Templates14 {
5175 typedef TemplateSel<T1> Head;
5176 typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5180 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5181 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5182 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5183 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5184 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
5185 struct Templates15 {
5186 typedef TemplateSel<T1> Head;
5187 typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5191 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5192 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5193 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5194 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5195 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5196 GTEST_TEMPLATE_ T16>
5197 struct Templates16 {
5198 typedef TemplateSel<T1> Head;
5199 typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5203 template <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>
5209 struct Templates17 {
5210 typedef TemplateSel<T1> Head;
5211 typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5212 T15, T16, T17> Tail;
5215 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5216 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5217 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5218 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5219 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5220 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
5221 struct Templates18 {
5222 typedef TemplateSel<T1> Head;
5223 typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5224 T15, T16, T17, T18> Tail;
5227 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5228 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5229 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5230 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5231 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5232 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5233 GTEST_TEMPLATE_ T19>
5234 struct Templates19 {
5235 typedef TemplateSel<T1> Head;
5236 typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5237 T15, T16, T17, T18, T19> Tail;
5240 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5241 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5242 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5243 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5244 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5245 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5246 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
5247 struct Templates20 {
5248 typedef TemplateSel<T1> Head;
5249 typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5250 T15, T16, T17, T18, T19, T20> Tail;
5253 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5254 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5255 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5256 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5257 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5258 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5259 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
5260 struct Templates21 {
5261 typedef TemplateSel<T1> Head;
5262 typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5263 T15, T16, T17, T18, T19, T20, T21> Tail;
5266 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5267 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5268 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5269 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5270 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5271 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5272 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5273 GTEST_TEMPLATE_ T22>
5274 struct Templates22 {
5275 typedef TemplateSel<T1> Head;
5276 typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5277 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
5280 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5281 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5282 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5283 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5284 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5285 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5286 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5287 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
5288 struct Templates23 {
5289 typedef TemplateSel<T1> Head;
5290 typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5291 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
5294 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5295 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5296 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5297 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5298 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5299 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5300 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5301 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
5302 struct Templates24 {
5303 typedef TemplateSel<T1> Head;
5304 typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5305 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
5308 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5309 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5310 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5311 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5312 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5313 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5314 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5315 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5316 GTEST_TEMPLATE_ T25>
5317 struct Templates25 {
5318 typedef TemplateSel<T1> Head;
5319 typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5320 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
5323 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5324 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5325 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5326 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5327 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5328 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5329 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5330 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5331 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
5332 struct Templates26 {
5333 typedef TemplateSel<T1> Head;
5334 typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5335 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
5338 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5339 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5340 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5341 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5342 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5343 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5344 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5345 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5346 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
5347 struct Templates27 {
5348 typedef TemplateSel<T1> Head;
5349 typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5350 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
5353 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5354 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5355 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5356 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5357 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5358 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5359 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5360 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5361 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5362 GTEST_TEMPLATE_ T28>
5363 struct Templates28 {
5364 typedef TemplateSel<T1> Head;
5365 typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5366 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5370 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5371 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5372 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5373 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5374 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5375 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5376 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5377 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5378 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5379 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
5380 struct Templates29 {
5381 typedef TemplateSel<T1> Head;
5382 typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5383 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5387 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5388 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5389 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5390 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5391 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5392 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5393 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5394 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5395 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5396 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
5397 struct Templates30 {
5398 typedef TemplateSel<T1> Head;
5399 typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5400 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5404 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5405 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5406 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5407 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5408 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5409 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5410 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5411 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5412 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5413 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5414 GTEST_TEMPLATE_ T31>
5415 struct Templates31 {
5416 typedef TemplateSel<T1> Head;
5417 typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5418 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5419 T29, T30, T31> Tail;
5422 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5423 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5424 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5425 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5426 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5427 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5428 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5429 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5430 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5431 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5432 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
5433 struct Templates32 {
5434 typedef TemplateSel<T1> Head;
5435 typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5436 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5437 T29, T30, T31, T32> Tail;
5440 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5441 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5442 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5443 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5444 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5445 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5446 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5447 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5448 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5449 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5450 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
5451 struct Templates33 {
5452 typedef TemplateSel<T1> Head;
5453 typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5454 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5455 T29, T30, T31, T32, T33> Tail;
5458 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5459 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5460 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5461 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5462 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5463 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5464 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5465 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5466 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5467 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5468 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5469 GTEST_TEMPLATE_ T34>
5470 struct Templates34 {
5471 typedef TemplateSel<T1> Head;
5472 typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5473 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5474 T29, T30, T31, T32, T33, T34> Tail;
5477 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5478 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5479 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5480 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5481 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5482 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5483 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5484 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5485 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5486 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5487 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5488 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
5489 struct Templates35 {
5490 typedef TemplateSel<T1> Head;
5491 typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5492 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5493 T29, T30, T31, T32, T33, T34, T35> Tail;
5496 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5497 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5498 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5499 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5500 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5501 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5502 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5503 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5504 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5505 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5506 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5507 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
5508 struct Templates36 {
5509 typedef TemplateSel<T1> Head;
5510 typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5511 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5512 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
5515 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5516 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5517 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5518 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5519 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5520 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5521 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5522 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5523 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5524 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5525 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5526 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5527 GTEST_TEMPLATE_ T37>
5528 struct Templates37 {
5529 typedef TemplateSel<T1> Head;
5530 typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5531 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5532 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
5535 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5536 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5537 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5538 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5539 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5540 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5541 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5542 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5543 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5544 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5545 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5546 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5547 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
5548 struct Templates38 {
5549 typedef TemplateSel<T1> Head;
5550 typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5551 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5552 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
5555 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5556 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5557 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5558 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5559 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5560 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5561 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5562 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5563 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5564 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5565 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5566 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5567 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
5568 struct Templates39 {
5569 typedef TemplateSel<T1> Head;
5570 typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5571 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5572 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
5575 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5576 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5577 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5578 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5579 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5580 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5581 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5582 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5583 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5584 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5585 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5586 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5587 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5588 GTEST_TEMPLATE_ T40>
5589 struct Templates40 {
5590 typedef TemplateSel<T1> Head;
5591 typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5592 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5593 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
5596 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5597 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5598 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5599 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5600 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5601 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5602 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5603 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5604 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5605 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5606 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5607 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5608 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5609 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
5610 struct Templates41 {
5611 typedef TemplateSel<T1> Head;
5612 typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5613 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5614 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
5617 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5618 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5619 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5620 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5621 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5622 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5623 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5624 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5625 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5626 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5627 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5628 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5629 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5630 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
5631 struct Templates42 {
5632 typedef TemplateSel<T1> Head;
5633 typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5634 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5635 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5639 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5640 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5641 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5642 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5643 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5644 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5645 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5646 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5647 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5648 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5649 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5650 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5651 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5652 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5653 GTEST_TEMPLATE_ T43>
5654 struct Templates43 {
5655 typedef TemplateSel<T1> Head;
5656 typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5657 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5658 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5662 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5663 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5664 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5665 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5666 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5667 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5668 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5669 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5670 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5671 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5672 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5673 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5674 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5675 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5676 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
5677 struct Templates44 {
5678 typedef TemplateSel<T1> Head;
5679 typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5680 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5681 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5685 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5686 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5687 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5688 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5689 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5690 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5691 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5692 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5693 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5694 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5695 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5696 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5697 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5698 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5699 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
5700 struct Templates45 {
5701 typedef TemplateSel<T1> Head;
5702 typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5703 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5704 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5705 T43, T44, T45> Tail;
5708 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5709 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5710 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5711 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5712 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5713 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5714 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5715 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5716 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5717 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5718 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5719 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5720 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5721 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5722 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5723 GTEST_TEMPLATE_ T46>
5724 struct Templates46 {
5725 typedef TemplateSel<T1> Head;
5726 typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5727 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5728 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5729 T43, T44, T45, T46> Tail;
5732 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5733 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5734 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5735 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5736 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5737 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5738 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5739 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5740 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5741 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5742 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5743 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5744 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5745 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5746 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5747 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
5748 struct Templates47 {
5749 typedef TemplateSel<T1> Head;
5750 typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5751 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5752 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5753 T43, T44, T45, T46, T47> Tail;
5756 template <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,
5762 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5763 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5764 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5765 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5766 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5767 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5768 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5769 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5770 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5771 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
5772 struct Templates48 {
5773 typedef TemplateSel<T1> Head;
5774 typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5775 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5776 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5777 T43, T44, T45, T46, T47, T48> Tail;
5780 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5781 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5782 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5783 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5784 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5785 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5786 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5787 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5788 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5789 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5790 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5791 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5792 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5793 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5794 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5795 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
5796 GTEST_TEMPLATE_ T49>
5797 struct Templates49 {
5798 typedef TemplateSel<T1> Head;
5799 typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5800 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5801 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5802 T43, T44, T45, T46, T47, T48, T49> Tail;
5805 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5806 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5807 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5808 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
5809 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
5810 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
5811 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
5812 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
5813 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
5814 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
5815 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
5816 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
5817 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
5818 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
5819 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
5820 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
5821 GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
5822 struct Templates50 {
5823 typedef TemplateSel<T1> Head;
5824 typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
5825 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
5826 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
5827 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
5844 template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
5845 GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
5846 GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
5847 GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
5848 GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
5849 GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
5850 GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
5851 GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
5852 GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
5853 GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
5854 GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
5855 GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
5856 GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
5857 GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
5858 GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
5859 GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
5860 GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
5861 GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
5862 GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
5863 GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
5864 GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
5865 GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
5866 GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
5867 GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
5868 GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
5870 typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
5871 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
5872 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
5873 T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
5877 struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5878 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5879 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5880 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5881 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5883 typedef Templates0 type;
5885 template <GTEST_TEMPLATE_ T1>
5886 struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5887 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5888 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5889 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5890 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5892 typedef Templates1<T1> type;
5894 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
5895 struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5896 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5897 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5898 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5899 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5901 typedef Templates2<T1, T2> type;
5903 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
5904 struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5905 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5906 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5907 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5908 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5909 typedef Templates3<T1, T2, T3> type;
5911 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5913 struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5914 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5915 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5916 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5917 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5918 typedef Templates4<T1, T2, T3, T4> type;
5920 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5921 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
5922 struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5923 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5924 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5925 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5926 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5927 typedef Templates5<T1, T2, T3, T4, T5> type;
5929 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5930 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
5931 struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
5932 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5933 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5934 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5935 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5936 typedef Templates6<T1, T2, T3, T4, T5, T6> type;
5938 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5939 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5941 struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
5942 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5943 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5944 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5945 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5946 typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
5948 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5949 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5950 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
5951 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
5952 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5953 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5954 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5955 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5956 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
5958 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5959 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5960 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
5961 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
5962 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5963 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5964 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5965 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5966 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
5968 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5969 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5970 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5971 GTEST_TEMPLATE_ T10>
5972 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
5973 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5974 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5975 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5976 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5977 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
5979 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
5980 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
5981 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
5982 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
5983 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
5984 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5985 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5986 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5987 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5988 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
5990 template <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 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
5995 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5996 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5997 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
5998 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
5999 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
6001 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6002 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6003 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6004 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6005 GTEST_TEMPLATE_ T13>
6006 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
6007 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6008 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6009 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6010 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6011 typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
6014 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6015 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6016 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6017 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6018 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
6019 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6020 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6021 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6022 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6023 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6024 typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6027 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6028 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6029 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6030 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6031 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
6032 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6033 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6034 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6035 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6036 NoneT, NoneT, NoneT, NoneT, NoneT> {
6037 typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6040 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6041 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6042 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6043 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6044 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6045 GTEST_TEMPLATE_ T16>
6046 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6047 T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6048 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6049 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6050 NoneT, NoneT, NoneT, NoneT, NoneT> {
6051 typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6052 T14, T15, T16> type;
6054 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6055 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6056 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6057 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6058 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6059 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
6060 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6061 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6062 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6063 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6064 NoneT, NoneT, NoneT, NoneT, NoneT> {
6065 typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6066 T14, T15, T16, T17> type;
6068 template <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 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6075 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6076 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6077 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6078 NoneT, NoneT, NoneT, NoneT> {
6079 typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6080 T14, T15, T16, T17, T18> type;
6082 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6083 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6084 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6085 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6086 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6087 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6088 GTEST_TEMPLATE_ T19>
6089 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6090 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6091 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6092 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6093 NoneT, NoneT, NoneT, NoneT> {
6094 typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6095 T14, T15, T16, T17, T18, T19> type;
6097 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6098 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6099 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6100 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6101 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6102 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6103 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
6104 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6105 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6106 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6107 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6108 NoneT, NoneT, NoneT, NoneT> {
6109 typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6110 T14, T15, T16, T17, T18, T19, T20> type;
6112 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6113 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6114 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6115 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6116 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6117 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6118 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
6119 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6120 T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
6121 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6122 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6123 NoneT, NoneT, NoneT, NoneT> {
6124 typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6125 T14, T15, T16, T17, T18, T19, T20, T21> type;
6127 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6128 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6129 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6130 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6131 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6132 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6133 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6134 GTEST_TEMPLATE_ T22>
6135 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6136 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
6137 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6138 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6139 NoneT, NoneT, NoneT> {
6140 typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6141 T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
6143 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6144 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6145 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6146 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6147 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6148 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6149 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6150 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
6151 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6152 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
6153 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6154 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6155 NoneT, NoneT, NoneT> {
6156 typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6157 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
6159 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6160 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6161 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6162 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6163 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6164 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6165 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6166 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
6167 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6168 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
6169 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6170 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6171 NoneT, NoneT, NoneT> {
6172 typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6173 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
6175 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6176 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6177 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6178 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6179 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6180 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6181 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6182 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6183 GTEST_TEMPLATE_ T25>
6184 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6185 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
6186 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6187 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6189 typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6190 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
6192 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6193 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6194 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6195 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6196 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6197 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6198 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6199 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6200 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
6201 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6202 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
6203 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6204 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6206 typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6207 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
6209 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6210 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6211 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6212 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6213 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6214 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6215 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6216 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6217 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
6218 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6219 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
6220 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6221 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6223 typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6224 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6227 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6228 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6229 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6230 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6231 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6232 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6233 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6234 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6235 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6236 GTEST_TEMPLATE_ T28>
6237 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6238 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6239 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6240 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6242 typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6243 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6246 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6247 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6248 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6249 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6250 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6251 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6252 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6253 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6254 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6255 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
6256 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6257 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6258 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6259 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6261 typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6262 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6265 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6266 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6267 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6268 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6269 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6270 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6271 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6272 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6273 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6274 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
6275 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6276 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6277 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6278 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6279 typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6280 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6281 T28, T29, T30> type;
6283 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6284 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6285 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6286 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6287 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6288 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6289 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6290 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6291 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6292 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6293 GTEST_TEMPLATE_ T31>
6294 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6295 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6296 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6297 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6298 typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6299 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6300 T28, T29, T30, T31> type;
6302 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6303 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6304 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6305 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6306 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6307 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6308 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6309 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6310 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6311 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6312 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
6313 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6314 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6315 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6316 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6317 typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6318 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6319 T28, T29, T30, T31, T32> type;
6321 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6322 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6323 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6324 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6325 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6326 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6327 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6328 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6329 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6330 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6331 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
6332 struct 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, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6335 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6336 typedef Templates33<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> type;
6340 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6341 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6342 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6343 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6344 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6345 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6346 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6347 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6348 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6349 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6350 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6351 GTEST_TEMPLATE_ T34>
6352 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6353 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6354 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6355 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6356 typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6357 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6358 T28, T29, T30, T31, T32, T33, T34> type;
6360 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6361 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6362 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6363 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6364 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6365 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6366 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6367 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6368 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6369 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6370 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6371 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
6372 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6373 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6374 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
6375 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6376 typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6377 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6378 T28, T29, T30, T31, T32, T33, T34, T35> type;
6380 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6381 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6382 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6383 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6384 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6385 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6386 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6387 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6388 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6389 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6390 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6391 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
6392 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6393 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6394 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
6395 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6396 typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6397 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6398 T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
6400 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6401 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6402 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6403 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6404 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6405 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6406 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6407 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6408 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6409 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6410 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6411 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6412 GTEST_TEMPLATE_ T37>
6413 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6414 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6415 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
6416 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6417 typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6418 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6419 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
6421 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6422 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6423 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6424 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6425 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6426 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6427 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6428 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6429 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6430 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6431 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6432 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6433 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
6434 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6435 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6436 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
6437 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6438 typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6439 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6440 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
6442 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6443 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6444 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6445 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6446 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6447 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6448 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6449 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6450 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6451 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6452 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6453 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6454 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
6455 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6456 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6457 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
6458 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6459 typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6460 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6461 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
6463 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6464 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6465 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6466 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6467 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6468 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6469 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6470 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6471 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6472 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6473 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6474 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6475 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6476 GTEST_TEMPLATE_ T40>
6477 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6478 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6479 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
6480 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6481 typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6482 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6483 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
6485 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6486 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6487 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6488 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6489 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6490 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6491 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6492 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6493 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6494 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6495 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6496 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6497 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6498 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
6499 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6500 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6501 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
6502 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6503 typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6504 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6505 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6508 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6509 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6510 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6511 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6512 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6513 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6514 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6515 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6516 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6517 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6518 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6519 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6520 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6521 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
6522 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6523 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6524 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
6525 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6526 typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6527 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6528 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6531 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6532 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6533 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6534 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6535 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6536 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6537 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6538 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6539 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6540 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6541 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6542 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6543 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6544 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6545 GTEST_TEMPLATE_ T43>
6546 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6547 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6548 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6549 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6550 typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6551 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6552 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6555 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6556 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6557 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6558 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6559 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6560 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6561 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6562 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6563 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6564 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6565 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6566 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6567 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6568 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6569 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
6570 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6571 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6572 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6573 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
6574 typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6575 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6576 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6577 T42, T43, T44> type;
6579 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6580 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6581 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6582 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6583 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6584 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6585 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6586 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6587 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6588 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6589 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6590 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6591 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6592 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6593 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
6594 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6595 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6596 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6597 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
6598 typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6599 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6600 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6601 T42, T43, T44, T45> type;
6603 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6604 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6605 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6606 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6607 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6608 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6609 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6610 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6611 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6612 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6613 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6614 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6615 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6616 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6617 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6618 GTEST_TEMPLATE_ T46>
6619 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6620 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6621 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6622 T45, T46, NoneT, NoneT, NoneT, NoneT> {
6623 typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6624 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6625 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6626 T42, T43, T44, T45, T46> type;
6628 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6629 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6630 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6631 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6632 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6633 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6634 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6635 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6636 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6637 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6638 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6639 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6640 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6641 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6642 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6643 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
6644 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6645 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6646 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6647 T45, T46, T47, NoneT, NoneT, NoneT> {
6648 typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6649 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6650 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6651 T42, T43, T44, T45, T46, T47> type;
6653 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6654 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6655 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6656 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6657 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6658 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6659 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6660 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6661 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6662 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6663 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6664 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6665 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6666 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6667 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6668 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
6669 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6670 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6671 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6672 T45, T46, T47, T48, NoneT, NoneT> {
6673 typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6674 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6675 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6676 T42, T43, T44, T45, T46, T47, T48> type;
6678 template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
6679 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
6680 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
6681 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
6682 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
6683 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
6684 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
6685 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
6686 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
6687 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
6688 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
6689 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
6690 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
6691 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
6692 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
6693 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
6694 GTEST_TEMPLATE_ T49>
6695 struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
6696 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
6697 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
6698 T45, T46, T47, T48, T49, NoneT> {
6699 typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6700 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
6701 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
6702 T42, T43, T44, T45, T46, T47, T48, T49> type;
6709 template <
typename T>
6710 struct TypeList {
typedef Types1<T> type; };
6712 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
6713 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
6714 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
6715 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
6716 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
6717 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
6718 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
6719 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
6720 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
6721 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
6722 struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
6723 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
6724 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
6725 T44, T45, T46, T47, T48, T49, T50> > {
6726 typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
6727 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
6728 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
6729 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
6732 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
6737 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
6747 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
6748 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
6775 template <
typename T>
6776 inline void GTestStreamToHelper(std::ostream* os,
const T& val) {
6780 class ProtocolMessage;
6781 namespace proto2 {
class Message; }
6787 class AssertionResult;
6791 class TestPartResult;
6794 template <
typename T>
6795 ::std::string PrintToString(
const T& value);
6797 namespace internal {
6805 extern int g_init_gtest_count;
6809 GTEST_API_
extern const char kStackTraceMarker[];
6830 char IsNullLiteralHelper(Secret* p);
6831 char (&IsNullLiteralHelper(...))[2];
6836 #ifdef GTEST_ELLIPSIS_NEEDS_POD_
6839 # define GTEST_IS_NULL_LITERAL_(x) false
6841 # define GTEST_IS_NULL_LITERAL_(x) \
6842 (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)
6843 #endif // GTEST_ELLIPSIS_NEEDS_POD_
6846 GTEST_API_ String AppendUserMessage(
const String& gtest_msg,
6847 const Message& user_msg);
6864 } GTEST_ATTRIBUTE_UNUSED_;
6875 template <
typename T>
6876 String StreamableToString(
const T& streamable);
6883 #if defined(__SYMBIAN32__)
6884 # define GTEST_CREF_WORKAROUND_ const&
6886 # define GTEST_CREF_WORKAROUND_
6895 #define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
6896 inline String FormatForComparisonFailureMessage(\
6897 operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
6898 const operand2_type& ) {\
6899 return operand1_printer(str);\
6901 inline String FormatForComparisonFailureMessage(\
6902 const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
6903 const operand2_type& ) {\
6904 return operand1_printer(str);\
6907 GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted)
6908 #if GTEST_HAS_STD_WSTRING
6909 GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted)
6910 #endif // GTEST_HAS_STD_WSTRING
6912 #if GTEST_HAS_GLOBAL_STRING
6913 GTEST_FORMAT_IMPL_(::
string, String::ShowCStringQuoted)
6914 #endif // GTEST_HAS_GLOBAL_STRING
6915 #if GTEST_HAS_GLOBAL_WSTRING
6916 GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
6917 #endif // GTEST_HAS_GLOBAL_WSTRING
6919 #undef GTEST_FORMAT_IMPL_
6925 #define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType) \
6926 template <typename T> \
6927 String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
6929 return PrintToString(static_cast<const void*>(p)); \
6932 GTEST_FORMAT_CHAR_PTR_IMPL_(
char)
6933 GTEST_FORMAT_CHAR_PTR_IMPL_(const
char)
6934 GTEST_FORMAT_CHAR_PTR_IMPL_(
wchar_t)
6935 GTEST_FORMAT_CHAR_PTR_IMPL_(const
wchar_t)
6937 #undef GTEST_FORMAT_CHAR_PTR_IMPL_
6955 const char* actual_expression,
6956 const String& expected_value,
6957 const String& actual_value,
6958 bool ignoring_case);
6961 GTEST_API_
String GetBoolAssertionFailureMessage(
6963 const char* expression_text,
6964 const char* actual_predicate_value,
6965 const char* expected_predicate_value);
6996 template <
typename RawType>
7006 static const size_t kBitCount = 8*
sizeof(RawType);
7009 static const size_t kFractionBitCount =
7010 std::numeric_limits<RawType>::digits - 1;
7013 static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
7016 static const Bits kSignBitMask =
static_cast<Bits
>(1) << (kBitCount - 1);
7019 static const Bits kFractionBitMask =
7020 ~static_cast<Bits>(0) >> (kExponentBitCount + 1);
7023 static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
7037 static const size_t kMaxUlps = 4;
7052 static RawType ReinterpretBits(
const Bits bits) {
7055 return fp.u_.value_;
7059 static RawType Infinity() {
7060 return ReinterpretBits(kExponentBitMask);
7066 const Bits &bits()
const {
return u_.bits_; }
7069 Bits exponent_bits()
const {
return kExponentBitMask & u_.bits_; }
7072 Bits fraction_bits()
const {
return kFractionBitMask & u_.bits_; }
7075 Bits sign_bit()
const {
return kSignBitMask & u_.bits_; }
7078 bool is_nan()
const {
7081 return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
7093 if (is_nan() || rhs.is_nan())
return false;
7095 return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
7101 union FloatingPointUnion {
7121 static Bits SignAndMagnitudeToBiased(
const Bits &sam) {
7122 if (kSignBitMask & sam) {
7127 return kSignBitMask | sam;
7133 static Bits DistanceBetweenSignAndMagnitudeNumbers(
const Bits &sam1,
7135 const Bits biased1 = SignAndMagnitudeToBiased(sam1);
7136 const Bits biased2 = SignAndMagnitudeToBiased(sam2);
7137 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
7140 FloatingPointUnion u_;
7154 typedef const void* TypeId;
7156 template <
typename T>
7165 template <
typename T>
7171 template <
typename T>
7172 TypeId GetTypeId() {
7185 GTEST_API_ TypeId GetTestTypeId();
7195 virtual Test* CreateTest() = 0;
7206 template <
class TestClass>
7209 virtual Test* CreateTest() {
return new TestClass; }
7212 #if GTEST_OS_WINDOWS
7223 #endif // GTEST_OS_WINDOWS
7226 typedef void (*SetUpTestCaseFunc)();
7227 typedef void (*TearDownTestCaseFunc)();
7246 GTEST_API_
TestInfo* MakeAndRegisterTestInfo(
7247 const char* test_case_name,
const char* name,
7248 const char* type_param,
7249 const char* value_param,
7250 TypeId fixture_class_id,
7251 SetUpTestCaseFunc set_up_tc,
7252 TearDownTestCaseFunc tear_down_tc,
7258 GTEST_API_
bool SkipPrefix(
const char* prefix,
const char** pstr);
7260 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
7263 class GTEST_API_ TypedTestCasePState {
7265 TypedTestCasePState() : registered_(false) {}
7270 bool AddTestName(
const char* file,
int line,
const char* case_name,
7271 const char* test_name) {
7273 fprintf(stderr,
"%s Test %s must be defined before "
7274 "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n",
7275 FormatFileLocation(file, line).c_str(), test_name, case_name);
7279 defined_test_names_.insert(test_name);
7286 const char* VerifyRegisteredTestNames(
7287 const char* file,
int line,
const char* registered_tests);
7291 ::std::set<const char*> defined_test_names_;
7296 inline const char* SkipComma(
const char* str) {
7297 const char* comma = strchr(str,
',');
7298 if (comma == NULL) {
7301 while (IsSpace(*(++comma))) {}
7307 inline String GetPrefixUntilComma(
const char* str) {
7308 const char* comma = strchr(str,
',');
7309 return comma == NULL ? String(str) : String(str, comma - str);
7319 template <GTEST_TEMPLATE_ Fixture,
class TestSel,
typename Types>
7320 class TypeParameterizedTest {
7326 static bool Register(
const char* prefix,
const char* case_name,
7327 const char* test_names,
int index) {
7328 typedef typename Types::Head Type;
7329 typedef Fixture<Type> FixtureClass;
7330 typedef typename GTEST_BIND_(TestSel, Type) TestClass;
7334 MakeAndRegisterTestInfo(
7335 String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/",
7336 case_name, index).c_str(),
7337 GetPrefixUntilComma(test_names).c_str(),
7338 GetTypeName<Type>().c_str(),
7340 GetTypeId<FixtureClass>(),
7341 TestClass::SetUpTestCase,
7342 TestClass::TearDownTestCase,
7343 new TestFactoryImpl<TestClass>);
7346 return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail>
7347 ::Register(prefix, case_name, test_names, index + 1);
7352 template <GTEST_TEMPLATE_ Fixture, class TestSel>
7353 class TypeParameterizedTest<Fixture, TestSel, Types0> {
7355 static bool Register(
const char* ,
const char* ,
7356 const char* ,
int ) {
7365 template <GTEST_TEMPLATE_ Fixture,
typename Tests,
typename Types>
7366 class TypeParameterizedTestCase {
7368 static bool Register(
const char* prefix,
const char* case_name,
7369 const char* test_names) {
7370 typedef typename Tests::Head Head;
7373 TypeParameterizedTest<Fixture, Head, Types>::Register(
7374 prefix, case_name, test_names, 0);
7377 return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types>
7378 ::Register(prefix, case_name, SkipComma(test_names));
7383 template <GTEST_TEMPLATE_ Fixture,
typename Types>
7384 class TypeParameterizedTestCase<Fixture, Templates0, Types> {
7386 static bool Register(
const char* ,
const char* ,
7392 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
7404 GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test,
7411 GTEST_API_
bool AlwaysTrue();
7414 inline bool AlwaysFalse() {
return !AlwaysTrue(); }
7421 operator bool()
const {
return true; }
7432 static const UInt32 kMaxRange = 1u << 31;
7434 explicit Random(UInt32 seed) : state_(seed) {}
7436 void Reseed(UInt32 seed) { state_ = seed; }
7440 UInt32 Generate(UInt32 range);
7444 GTEST_DISALLOW_COPY_AND_ASSIGN_(
Random);
7449 template <
typename T1,
typename T2>
7452 template <
typename T>
7459 template <
typename T>
7461 template <
typename T>
7466 #define GTEST_REMOVE_REFERENCE_(T) \
7467 typename ::testing::internal::RemoveReference<T>::type
7472 template <
typename T>
7474 template <
typename T>
7482 #if defined(_MSC_VER) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
7483 template <
typename T,
size_t N>
7485 typedef typename RemoveConst<T>::type type[N];
7491 #define GTEST_REMOVE_CONST_(T) \
7492 typename ::testing::internal::RemoveConst<T>::type
7495 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
7496 GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))
7501 template <
typename T>
7503 template <
typename T>
7508 #define GTEST_ADD_REFERENCE_(T) \
7509 typename ::testing::internal::AddReference<T>::type
7520 #define GTEST_REFERENCE_TO_CONST_(T) \
7521 GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))
7526 template <
typename From,
typename To>
7535 static From MakeFrom();
7547 static char Helper(To);
7548 static char (&Helper(...))[2];
7557 # pragma warning(push) // Saves the current warning state.
7558 # pragma warning(disable:4244) // Temporarily disables warning 4244.
7560 static const bool value =
7561 sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
7562 # pragma warning(pop) // Restores the warning state.
7563 #elif defined(__BORLANDC__)
7567 static const bool value = __is_convertible(From, To);
7569 static const bool value =
7570 sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
7573 template <
typename From,
typename To>
7579 template <
typename T>
7582 ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||
7583 ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {
7607 typedef int IsContainer;
7609 IsContainer IsContainerTest(
int ,
7610 typename C::iterator* = NULL,
7611 typename C::const_iterator* = NULL) {
7615 typedef char IsNotContainer;
7617 IsNotContainer IsContainerTest(
long ) {
return '\0'; }
7624 template<>
struct EnableIf<true> {
typedef void type; };
7632 template <
typename T,
typename U>
7633 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs);
7636 template <
typename T,
typename U>
7637 inline bool ArrayEq(
const T& lhs,
const U& rhs) {
return lhs == rhs; }
7640 template <
typename T,
typename U,
size_t N>
7641 inline bool ArrayEq(
const T(&lhs)[N],
const U(&rhs)[N]) {
7642 return internal::ArrayEq(lhs, N, rhs);
7648 template <
typename T,
typename U>
7649 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs) {
7650 for (
size_t i = 0; i != size; i++) {
7651 if (!internal::ArrayEq(lhs[i], rhs[i]))
7659 template <
typename Iter,
typename Element>
7660 Iter ArrayAwareFind(Iter begin, Iter end,
const Element& elem) {
7661 for (Iter it = begin; it != end; ++it) {
7662 if (internal::ArrayEq(*it, elem))
7672 template <
typename T,
typename U>
7673 void CopyArray(
const T* from,
size_t size, U* to);
7676 template <
typename T,
typename U>
7677 inline void CopyArray(
const T& from, U* to) { *to = from; }
7680 template <
typename T,
typename U,
size_t N>
7681 inline void CopyArray(
const T(&from)[N], U(*to)[N]) {
7682 internal::CopyArray(from, N, *to);
7688 template <
typename T,
typename U>
7689 void CopyArray(
const T* from,
size_t size, U* to) {
7690 for (
size_t i = 0; i != size; i++) {
7691 internal::CopyArray(from[i], to + i);
7697 enum RelationToSource {
7711 template <
typename Element>
7715 typedef Element value_type;
7716 typedef Element* iterator;
7717 typedef const Element* const_iterator;
7720 NativeArray(
const Element* array,
size_t count, RelationToSource relation) {
7721 Init(array, count, relation);
7726 Init(rhs.array_, rhs.size_, rhs.relation_to_source_);
7733 GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>());
7734 if (relation_to_source_ == kCopy)
7739 size_t size()
const {
return size_; }
7740 const_iterator begin()
const {
return array_; }
7741 const_iterator end()
const {
return array_ + size_; }
7743 return size() == rhs.size() &&
7744 ArrayEq(begin(), size(), rhs.begin());
7750 void Init(
const Element* array,
size_t a_size, RelationToSource relation) {
7751 if (relation == kReference) {
7754 Element*
const copy =
new Element[a_size];
7755 CopyArray(array, a_size, copy);
7759 relation_to_source_ = relation;
7762 const Element* array_;
7764 RelationToSource relation_to_source_;
7772 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \
7773 ::testing::internal::AssertHelper(result_type, file, line, message) \
7774 = ::testing::Message()
7776 #define GTEST_MESSAGE_(message, result_type) \
7777 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
7779 #define GTEST_FATAL_FAILURE_(message) \
7780 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
7782 #define GTEST_NONFATAL_FAILURE_(message) \
7783 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
7785 #define GTEST_SUCCESS_(message) \
7786 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
7791 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
7792 if (::testing::internal::AlwaysTrue()) { statement; }
7794 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \
7795 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7796 if (::testing::internal::ConstCharPtr gtest_msg = "") { \
7797 bool gtest_caught_expected = false; \
7799 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7801 catch (expected_exception const&) { \
7802 gtest_caught_expected = true; \
7806 "Expected: " #statement " throws an exception of type " \
7807 #expected_exception ".\n Actual: it throws a different type."; \
7808 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
7810 if (!gtest_caught_expected) { \
7812 "Expected: " #statement " throws an exception of type " \
7813 #expected_exception ".\n Actual: it throws nothing."; \
7814 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
7817 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
7818 fail(gtest_msg.value)
7820 #define GTEST_TEST_NO_THROW_(statement, fail) \
7821 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7822 if (::testing::internal::AlwaysTrue()) { \
7824 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7827 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
7830 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
7831 fail("Expected: " #statement " doesn't throw an exception.\n" \
7832 " Actual: it throws.")
7834 #define GTEST_TEST_ANY_THROW_(statement, fail) \
7835 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7836 if (::testing::internal::AlwaysTrue()) { \
7837 bool gtest_caught_any = false; \
7839 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7842 gtest_caught_any = true; \
7844 if (!gtest_caught_any) { \
7845 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
7848 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \
7849 fail("Expected: " #statement " throws an exception.\n" \
7850 " Actual: it doesn't.")
7856 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
7857 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7858 if (const ::testing::AssertionResult gtest_ar_ = \
7859 ::testing::AssertionResult(expression)) \
7862 fail(::testing::internal::GetBoolAssertionFailureMessage(\
7863 gtest_ar_, text, #actual, #expected).c_str())
7865 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
7866 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
7867 if (::testing::internal::AlwaysTrue()) { \
7868 ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
7869 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
7870 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
7871 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
7874 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \
7875 fail("Expected: " #statement " doesn't generate new fatal " \
7876 "failures in the current thread.\n" \
7877 " Actual: it does.")
7880 #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
7881 test_case_name##_##test_name##_Test
7884 #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
7885 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
7887 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
7889 virtual void TestBody();\
7890 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\
7891 GTEST_DISALLOW_COPY_AND_ASSIGN_(\
7892 GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
7895 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
7897 ::testing::internal::MakeAndRegisterTestInfo(\
7898 #test_case_name, #test_name, NULL, NULL, \
7900 parent_class::SetUpTestCase, \
7901 parent_class::TearDownTestCase, \
7902 new ::testing::internal::TestFactoryImpl<\
7903 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
7904 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
7906 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
7944 #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
7945 #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
7983 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
7984 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
7990 namespace internal {
7992 GTEST_DECLARE_string_(internal_run_death_test);
7995 const char kDeathTestStyleFlag[] =
"death_test_style";
7996 const char kDeathTestUseFork[] =
"death_test_use_fork";
7997 const char kInternalRunDeathTestFlag[] =
"internal_run_death_test";
7999 #if GTEST_HAS_DEATH_TEST
8014 class GTEST_API_ DeathTest {
8024 static bool Create(
const char* statement,
const RE* regex,
8025 const char* file,
int line, DeathTest** test);
8027 virtual ~DeathTest() { }
8030 class ReturnSentinel {
8032 explicit ReturnSentinel(DeathTest* test) : test_(test) { }
8033 ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
8035 DeathTest*
const test_;
8036 GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel);
8037 } GTEST_ATTRIBUTE_UNUSED_;
8044 enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
8048 TEST_ENCOUNTERED_RETURN_STATEMENT,
8049 TEST_THREW_EXCEPTION,
8054 virtual TestRole AssumeRole() = 0;
8057 virtual int Wait() = 0;
8066 virtual bool Passed(
bool exit_status_ok) = 0;
8069 virtual void Abort(AbortReason reason) = 0;
8073 static const char* LastMessage();
8075 static void set_last_death_test_message(
const String& message);
8079 static String last_death_test_message_;
8081 GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);
8085 class DeathTestFactory {
8087 virtual ~DeathTestFactory() { }
8088 virtual bool Create(
const char* statement,
const RE* regex,
8089 const char* file,
int line, DeathTest** test) = 0;
8093 class DefaultDeathTestFactory :
public DeathTestFactory {
8095 virtual bool Create(
const char* statement,
const RE* regex,
8096 const char* file,
int line, DeathTest** test);
8101 GTEST_API_
bool ExitedUnsuccessfully(
int exit_status);
8105 # if GTEST_HAS_EXCEPTIONS
8106 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
8108 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8109 } catch (const ::std::exception& gtest_exception) { \
8112 "\n%s: Caught std::exception-derived exception escaping the " \
8113 "death test statement. Exception message: %s\n", \
8114 ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
8115 gtest_exception.what()); \
8117 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
8119 death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
8123 # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
8124 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
8130 # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
8131 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8132 if (::testing::internal::AlwaysTrue()) { \
8133 const ::testing::internal::RE& gtest_regex = (regex); \
8134 ::testing::internal::DeathTest* gtest_dt; \
8135 if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \
8136 __FILE__, __LINE__, >est_dt)) { \
8137 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
8139 if (gtest_dt != NULL) { \
8140 ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \
8141 gtest_dt_ptr(gtest_dt); \
8142 switch (gtest_dt->AssumeRole()) { \
8143 case ::testing::internal::DeathTest::OVERSEE_TEST: \
8144 if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
8145 goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
8148 case ::testing::internal::DeathTest::EXECUTE_TEST: { \
8149 ::testing::internal::DeathTest::ReturnSentinel \
8150 gtest_sentinel(gtest_dt); \
8151 GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
8152 gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
8160 GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \
8161 fail(::testing::internal::DeathTest::LastMessage())
8168 class InternalRunDeathTestFlag {
8170 InternalRunDeathTestFlag(
const String& a_file,
8174 : file_(a_file), line_(a_line), index_(an_index),
8175 write_fd_(a_write_fd) {}
8177 ~InternalRunDeathTestFlag() {
8179 posix::Close(write_fd_);
8182 String file()
const {
return file_; }
8183 int line()
const {
return line_; }
8184 int index()
const {
return index_; }
8185 int write_fd()
const {
return write_fd_; }
8193 GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag);
8199 InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
8201 #else // GTEST_HAS_DEATH_TEST
8235 # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
8236 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8237 if (::testing::internal::AlwaysTrue()) { \
8238 GTEST_LOG_(WARNING) \
8239 << "Death tests are not supported on this platform.\n" \
8240 << "Statement '" #statement "' cannot be verified."; \
8241 } else if (::testing::internal::AlwaysFalse()) { \
8242 ::testing::internal::RE::PartialMatch(".*", (regex)); \
8243 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
8246 ::testing::Message()
8248 #endif // GTEST_HAS_DEATH_TEST
8253 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
8262 GTEST_DECLARE_string_(death_test_style);
8264 #if GTEST_HAS_DEATH_TEST
8369 # define ASSERT_EXIT(statement, predicate, regex) \
8370 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)
8374 # define EXPECT_EXIT(statement, predicate, regex) \
8375 GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)
8380 # define ASSERT_DEATH(statement, regex) \
8381 ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
8385 # define EXPECT_DEATH(statement, regex) \
8386 EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
8391 class GTEST_API_ ExitedWithCode {
8393 explicit ExitedWithCode(
int exit_code);
8394 bool operator()(
int exit_status)
const;
8397 void operator=(
const ExitedWithCode& other);
8399 const int exit_code_;
8402 # if !GTEST_OS_WINDOWS
8405 class GTEST_API_ KilledBySignal {
8407 explicit KilledBySignal(
int signum);
8408 bool operator()(
int exit_status)
const;
8412 # endif // !GTEST_OS_WINDOWS
8459 # define EXPECT_DEBUG_DEATH(statement, regex) \
8460 do { statement; } while (::testing::internal::AlwaysFalse())
8462 # define ASSERT_DEBUG_DEATH(statement, regex) \
8463 do { statement; } while (::testing::internal::AlwaysFalse())
8467 # define EXPECT_DEBUG_DEATH(statement, regex) \
8468 EXPECT_DEATH(statement, regex)
8470 # define ASSERT_DEBUG_DEATH(statement, regex) \
8471 ASSERT_DEATH(statement, regex)
8473 # endif // NDEBUG for EXPECT_DEBUG_DEATH
8474 #endif // GTEST_HAS_DEATH_TEST
8481 #if GTEST_HAS_DEATH_TEST
8482 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
8483 EXPECT_DEATH(statement, regex)
8484 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
8485 ASSERT_DEATH(statement, regex)
8487 # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
8488 GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )
8489 # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
8490 GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)
8495 #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
8541 #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
8542 #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
8579 typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
8587 Message() : ss_(new ::std::stringstream) {
8590 *ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);
8595 *ss_ << msg.GetString();
8599 explicit Message(
const char* str) : ss_(new ::std::stringstream) {
8603 #if GTEST_OS_SYMBIAN
8605 template <
typename T>
8606 inline Message& operator <<(
const T& value) {
8612 template <
typename T>
8613 inline Message& operator <<(
const T& val) {
8614 ::GTestStreamToHelper(ss_.get(), val);
8631 template <
typename T>
8632 inline Message& operator <<(T*
const& pointer) {
8633 if (pointer == NULL) {
8636 ::GTestStreamToHelper(ss_.get(), pointer);
8640 #endif // GTEST_OS_SYMBIAN
8648 Message& operator <<(BasicNarrowIoManip val) {
8654 Message& operator <<(
bool b) {
8655 return *
this << (b ?
"true" :
"false");
8660 Message& operator <<(
const wchar_t* wide_c_str) {
8661 return *
this << internal::String::ShowWideCString(wide_c_str);
8663 Message& operator <<(
wchar_t* wide_c_str) {
8664 return *
this << internal::String::ShowWideCString(wide_c_str);
8667 #if GTEST_HAS_STD_WSTRING
8670 Message& operator <<(const ::std::wstring& wstr);
8671 #endif // GTEST_HAS_STD_WSTRING
8673 #if GTEST_HAS_GLOBAL_WSTRING
8676 Message& operator <<(const ::wstring& wstr);
8677 #endif // GTEST_HAS_GLOBAL_WSTRING
8684 return internal::StringStreamToString(ss_.get());
8689 #if GTEST_OS_SYMBIAN
8694 template <
typename T>
8696 if (pointer == NULL) {
8699 ::GTestStreamToHelper(ss_.get(), pointer);
8702 template <
typename T>
8704 ::GTestStreamToHelper(ss_.get(), value);
8706 #endif // GTEST_OS_SYMBIAN
8713 void operator=(
const Message&);
8717 inline std::ostream& operator <<(std::ostream& os,
const Message& sb) {
8718 return os << sb.GetString();
8723 #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
8764 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
8765 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
8791 TEST_P(FooTest, DoesBlah) {
8794 EXPECT_TRUE(foo.Blah(GetParam()));
8798 TEST_P(FooTest, HasBlahBlah) {
8826 INSTANTIATE_TEST_CASE_P(InstantiationName,
8828 Values(
"meeny",
"miny",
"moe"));
8849 const char* pets[] = {
"cat",
"dog"};
8850 INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
8894 TEST_F(BaseTest, HasFoo) {
8898 TEST_P(DerivedTest, DoesBlah) {
8900 EXPECT_TRUE(foo.Blah(GetParam()));
8906 #if !GTEST_OS_SYMBIAN
8946 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
8947 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
9023 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
9024 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
9031 namespace internal {
9034 GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);
9067 while (p->next_ != ptr) p = p->next_;
9078 if (next_ ==
this)
return true;
9080 while (p->next_ !=
this) p = p->next_;
9089 template <
typename T>
9092 typedef T element_type;
9096 explicit linked_ptr(T* ptr = NULL) { capture(ptr); }
9102 assert(&ptr !=
this);
9122 void reset(T* ptr = NULL) {
9126 T*
get()
const {
return value_; }
9127 T* operator->()
const {
return value_; }
9128 T& operator*()
const {
return *value_; }
9130 bool operator==(T* p)
const {
return value_ == p; }
9131 bool operator!=(T* p)
const {
return value_ != p; }
9132 template <
typename U>
9134 return value_ == ptr.get();
9136 template <
typename U>
9138 return value_ != ptr.get();
9142 template <
typename U>
9149 if (link_.depart())
delete value_;
9152 void capture(T* ptr) {
9158 value_ = ptr->get();
9160 link_.join(&ptr->link_);
9166 template<
typename T>
inline
9168 return ptr == x.get();
9171 template<
typename T>
inline
9172 bool operator!=(T* ptr,
const linked_ptr<T>& x) {
9173 return ptr != x.get();
9179 template <
typename T>
9180 linked_ptr<T> make_linked_ptr(T* ptr) {
9181 return linked_ptr<T>(ptr);
9187 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
9282 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
9283 #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
9295 namespace internal2 {
9299 GTEST_API_
void PrintBytesInObjectTo(
const unsigned char* obj_bytes,
9301 ::std::ostream* os);
9307 kConvertibleToInteger,
9316 template <
typename T, TypeKind kTypeKind>
9320 static void PrintValue(
const T& value, ::std::ostream* os) {
9321 PrintBytesInObjectTo(reinterpret_cast<const unsigned char*>(&value),
9329 const size_t kProtobufOneLinerMaxLength = 50;
9331 template <
typename T>
9334 static void PrintValue(
const T& value, ::std::ostream* os) {
9335 const ::testing::internal::string short_str = value.ShortDebugString();
9336 const ::testing::internal::string pretty_str =
9337 short_str.length() <= kProtobufOneLinerMaxLength ?
9338 short_str : (
"\n" + value.DebugString());
9339 *os << (
"<" + pretty_str +
">");
9343 template <
typename T>
9353 static void PrintValue(
const T& value, ::std::ostream* os) {
9354 const internal::BiggestInt kBigInt = value;
9383 template <
typename Char,
typename CharTraits,
typename T>
9384 ::std::basic_ostream<Char, CharTraits>& operator<<(
9385 ::std::basic_ostream<Char, CharTraits>& os,
const T& x) {
9389 kConvertibleToInteger : kOtherType)>::PrintValue(x, &os);
9398 namespace testing_internal {
9402 template <
typename T>
9403 void DefaultPrintNonContainerTo(
const T& value, ::std::ostream* os) {
9415 using namespace ::testing::internal2;
9436 namespace internal {
9445 template <
typename T>
9448 template <
typename T>
9449 void UniversalPrint(
const T& value, ::std::ostream* os);
9453 template <
typename C>
9454 void DefaultPrintTo(IsContainer ,
9456 const C& container, ::std::ostream* os) {
9457 const size_t kMaxCount = 32;
9460 for (
typename C::const_iterator it = container.begin();
9461 it != container.end(); ++it, ++count) {
9464 if (count == kMaxCount) {
9472 internal::UniversalPrint(*it, os);
9487 template <
typename T>
9488 void DefaultPrintTo(IsNotContainer ,
9490 T* p, ::std::ostream* os) {
9499 if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {
9511 *os << reinterpret_cast<const void*>(
9512 reinterpret_cast<internal::UInt64
>(p));
9519 template <
typename T>
9520 void DefaultPrintTo(IsNotContainer ,
9522 const T& value, ::std::ostream* os) {
9523 ::testing_internal::DefaultPrintNonContainerTo(value, os);
9537 template <
typename T>
9538 void PrintTo(
const T& value, ::std::ostream* os) {
9561 DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os);
9569 GTEST_API_
void PrintTo(
unsigned char c, ::std::ostream* os);
9570 GTEST_API_
void PrintTo(
signed char c, ::std::ostream* os);
9571 inline void PrintTo(
char c, ::std::ostream* os) {
9575 PrintTo(static_cast<unsigned char>(c), os);
9579 inline void PrintTo(
bool x, ::std::ostream* os) {
9580 *os << (x ?
"true" :
"false");
9590 GTEST_API_
void PrintTo(
wchar_t wc, ::std::ostream* os);
9593 GTEST_API_
void PrintTo(
const char* s, ::std::ostream* os);
9594 inline void PrintTo(
char* s, ::std::ostream* os) {
9595 PrintTo(ImplicitCast_<const char*>(s), os);
9600 inline void PrintTo(
const signed char* s, ::std::ostream* os) {
9601 PrintTo(ImplicitCast_<const void*>(s), os);
9603 inline void PrintTo(
signed char* s, ::std::ostream* os) {
9604 PrintTo(ImplicitCast_<const void*>(s), os);
9606 inline void PrintTo(
const unsigned char* s, ::std::ostream* os) {
9607 PrintTo(ImplicitCast_<const void*>(s), os);
9609 inline void PrintTo(
unsigned char* s, ::std::ostream* os) {
9610 PrintTo(ImplicitCast_<const void*>(s), os);
9618 #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
9620 GTEST_API_
void PrintTo(
const wchar_t* s, ::std::ostream* os);
9621 inline void PrintTo(
wchar_t* s, ::std::ostream* os) {
9622 PrintTo(ImplicitCast_<const wchar_t*>(s), os);
9631 template <
typename T>
9632 void PrintRawArrayTo(
const T a[],
size_t count, ::std::ostream* os) {
9633 UniversalPrint(a[0], os);
9634 for (
size_t i = 1; i != count; i++) {
9636 UniversalPrint(a[i], os);
9641 #if GTEST_HAS_GLOBAL_STRING
9642 GTEST_API_
void PrintStringTo(const ::string&s, ::std::ostream* os);
9643 inline void PrintTo(const ::string& s, ::std::ostream* os) {
9644 PrintStringTo(s, os);
9646 #endif // GTEST_HAS_GLOBAL_STRING
9648 GTEST_API_
void PrintStringTo(const ::std::string&s, ::std::ostream* os);
9649 inline void PrintTo(const ::std::string& s, ::std::ostream* os) {
9650 PrintStringTo(s, os);
9654 #if GTEST_HAS_GLOBAL_WSTRING
9655 GTEST_API_
void PrintWideStringTo(const ::wstring&s, ::std::ostream* os);
9656 inline void PrintTo(const ::wstring& s, ::std::ostream* os) {
9657 PrintWideStringTo(s, os);
9659 #endif // GTEST_HAS_GLOBAL_WSTRING
9661 #if GTEST_HAS_STD_WSTRING
9662 GTEST_API_
void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os);
9663 inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
9664 PrintWideStringTo(s, os);
9666 #endif // GTEST_HAS_STD_WSTRING
9668 #if GTEST_HAS_TR1_TUPLE
9674 template <
typename T>
9675 void PrintTupleTo(
const T& t, ::std::ostream* os);
9682 inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {
9683 PrintTupleTo(t, os);
9686 template <
typename T1>
9687 void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {
9688 PrintTupleTo(t, os);
9691 template <
typename T1,
typename T2>
9692 void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {
9693 PrintTupleTo(t, os);
9696 template <
typename T1,
typename T2,
typename T3>
9697 void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {
9698 PrintTupleTo(t, os);
9701 template <
typename T1,
typename T2,
typename T3,
typename T4>
9702 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {
9703 PrintTupleTo(t, os);
9706 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
9707 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,
9708 ::std::ostream* os) {
9709 PrintTupleTo(t, os);
9712 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
9714 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,
9715 ::std::ostream* os) {
9716 PrintTupleTo(t, os);
9719 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
9720 typename T6,
typename T7>
9721 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,
9722 ::std::ostream* os) {
9723 PrintTupleTo(t, os);
9726 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
9727 typename T6,
typename T7,
typename T8>
9728 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,
9729 ::std::ostream* os) {
9730 PrintTupleTo(t, os);
9733 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
9734 typename T6,
typename T7,
typename T8,
typename T9>
9735 void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,
9736 ::std::ostream* os) {
9737 PrintTupleTo(t, os);
9740 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
9741 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
9743 const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,
9744 ::std::ostream* os) {
9745 PrintTupleTo(t, os);
9747 #endif // GTEST_HAS_TR1_TUPLE
9750 template <
typename T1,
typename T2>
9751 void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
9755 UniversalPrinter<T1>::Print(value.first, os);
9757 UniversalPrinter<T2>::Print(value.second, os);
9763 template <
typename T>
9764 class UniversalPrinter {
9769 # pragma warning(push) // Saves the current warning state.
9770 # pragma warning(disable:4180) // Temporarily disables warning 4180.
9776 static void Print(
const T& value, ::std::ostream* os) {
9789 # pragma warning(pop) // Restores the warning state.
9795 template <
typename T>
9796 void UniversalPrintArray(
const T* begin,
size_t len, ::std::ostream* os) {
9801 const size_t kThreshold = 18;
9802 const size_t kChunkSize = 8;
9807 if (len <= kThreshold) {
9808 PrintRawArrayTo(begin, len, os);
9810 PrintRawArrayTo(begin, kChunkSize, os);
9812 PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os);
9818 GTEST_API_
void UniversalPrintArray(
const char* begin,
9820 ::std::ostream* os);
9823 template <
typename T,
size_t N>
9828 static void Print(
const T (&a)[N], ::std::ostream* os) {
9829 UniversalPrintArray(a, N, os);
9834 template <
typename T>
9840 # pragma warning(push) // Saves the current warning state.
9841 # pragma warning(disable:4180) // Temporarily disables warning 4180.
9844 static void Print(
const T& value, ::std::ostream* os) {
9847 *os <<
"@" <<
reinterpret_cast<const void*
>(&value) <<
" ";
9850 UniversalPrint(value, os);
9854 # pragma warning(pop) // Restores the warning state.
9861 template <
typename T>
9862 void UniversalTersePrint(
const T& value, ::std::ostream* os) {
9863 UniversalPrint(value, os);
9865 inline void UniversalTersePrint(
const char* str, ::std::ostream* os) {
9869 UniversalPrint(
string(str), os);
9872 inline void UniversalTersePrint(
char* str, ::std::ostream* os) {
9873 UniversalTersePrint(static_cast<const char*>(str), os);
9880 template <
typename T>
9881 void UniversalPrint(
const T& value, ::std::ostream* os) {
9882 UniversalPrinter<T>::Print(value, os);
9885 #if GTEST_HAS_TR1_TUPLE
9886 typedef ::std::vector<string> Strings;
9899 template <
typename Tuple>
9900 static void PrintPrefixTo(
const Tuple& t, ::std::ostream* os) {
9904 ::Print(::std::tr1::get<N - 1>(t), os);
9909 template <
typename Tuple>
9910 static void TersePrintPrefixToStrings(
const Tuple& t, Strings* strings) {
9912 ::std::stringstream ss;
9913 UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss);
9914 strings->push_back(ss.str());
9921 template <
typename Tuple>
9922 static void PrintPrefixTo(
const Tuple&, ::std::ostream*) {}
9924 template <
typename Tuple>
9925 static void TersePrintPrefixToStrings(
const Tuple&, Strings*) {}
9934 template <
typename Tuple>
9935 static void PrintPrefixTo(
const Tuple& t, ::std::ostream* os) {
9937 Print(::std::tr1::get<0>(t), os);
9940 template <
typename Tuple>
9941 static void TersePrintPrefixToStrings(
const Tuple& t, Strings* strings) {
9942 ::std::stringstream ss;
9943 UniversalTersePrint(::std::tr1::get<0>(t), &ss);
9944 strings->push_back(ss.str());
9950 template <
typename T>
9951 void PrintTupleTo(
const T& t, ::std::ostream* os) {
9954 PrintPrefixTo(t, os);
9961 template <
typename Tuple>
9962 Strings UniversalTersePrintTupleFieldsToStrings(
const Tuple& value) {
9964 TuplePrefixPrinter< ::std::tr1::tuple_size<Tuple>::value>::
9965 TersePrintPrefixToStrings(value, &result);
9968 #endif // GTEST_HAS_TR1_TUPLE
9972 template <
typename T>
9973 ::std::string PrintToString(
const T& value) {
9974 ::std::stringstream ss;
9975 internal::UniversalTersePrint(value, &ss);
9981 #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
9983 #if GTEST_HAS_PARAM_TEST
9986 namespace internal {
9994 GTEST_API_
void ReportInvalidTestCaseType(
const char* test_case_name,
9995 const char* file,
int line);
10002 template <
typename T>
10014 virtual void Advance() = 0;
10022 virtual const T* Current()
const = 0;
10032 template <
typename T>
10035 typedef T value_type;
10036 typedef const T& reference;
10037 typedef ptrdiff_t difference_type;
10042 if (
this != &other)
10043 impl_.reset(other.impl_->Clone());
10047 const T& operator*()
const {
return *impl_->Current(); }
10048 const T* operator->()
const {
return impl_->Current(); }
10061 return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);
10064 return !(*
this == other);
10075 template <
typename T>
10078 typedef T ParamType;
10083 virtual ParamIteratorInterface<T>* Begin()
const = 0;
10084 virtual ParamIteratorInterface<T>* End()
const = 0;
10092 template<
typename T>
10093 class ParamGenerator {
10095 typedef ParamIterator<T> iterator;
10097 explicit ParamGenerator(ParamGeneratorInterface<T>* impl) : impl_(impl) {}
10098 ParamGenerator(
const ParamGenerator& other) : impl_(other.impl_) {}
10100 ParamGenerator& operator=(
const ParamGenerator& other) {
10101 impl_ = other.impl_;
10105 iterator begin()
const {
return iterator(impl_->Begin()); }
10106 iterator end()
const {
return iterator(impl_->End()); }
10109 linked_ptr<const ParamGeneratorInterface<T> > impl_;
10116 template <
typename T,
typename IncrementT>
10120 : begin_(begin), end_(end),
10121 step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}
10125 return new Iterator(
this, begin_, 0, step_);
10128 return new Iterator(
this, end_, end_index_, step_);
10136 : base_(base), value_(value), index_(index), step_(step) {}
10137 virtual ~Iterator() {}
10142 virtual void Advance() {
10143 value_ = value_ + step_;
10147 return new Iterator(*
this);
10149 virtual const T* Current()
const {
return &value_; }
10153 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10154 <<
"The program attempted to compare iterators "
10155 <<
"from different generators." << std::endl;
10156 const int other_index =
10157 CheckedDowncastToActualType<const Iterator>(&other)->index_;
10158 return index_ == other_index;
10162 Iterator(
const Iterator& other)
10164 base_(other.base_), value_(other.value_), index_(other.index_),
10165 step_(other.step_) {}
10168 void operator=(
const Iterator& other);
10173 const IncrementT step_;
10176 static int CalculateEndIndex(
const T& begin,
10178 const IncrementT& step) {
10180 for (T i = begin; i < end; i = i + step)
10190 const IncrementT step_;
10193 const int end_index_;
10201 template <
typename T>
10204 template <
typename ForwardIterator>
10206 : container_(begin, end) {}
10210 return new Iterator(
this, container_.begin());
10213 return new Iterator(
this, container_.end());
10217 typedef typename ::std::vector<T> ContainerType;
10222 typename ContainerType::const_iterator iterator)
10223 : base_(base), iterator_(iterator) {}
10224 virtual ~Iterator() {}
10229 virtual void Advance() {
10234 return new Iterator(*
this);
10243 virtual const T* Current()
const {
10244 if (value_.get() == NULL)
10245 value_.reset(
new T(*iterator_));
10246 return value_.get();
10251 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
10252 <<
"The program attempted to compare iterators "
10253 <<
"from different generators." << std::endl;
10254 return iterator_ ==
10255 CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
10259 Iterator(
const Iterator& other)
10263 base_(other.base_),
10264 iterator_(other.iterator_) {}
10267 typename ContainerType::const_iterator iterator_;
10279 const ContainerType container_;
10286 template <
class TestClass>
10289 typedef typename TestClass::ParamType ParamType;
10291 parameter_(parameter) {}
10292 virtual Test* CreateTest() {
10293 TestClass::SetParam(¶meter_);
10294 return new TestClass();
10298 const ParamType parameter_;
10307 template <
class ParamType>
10323 template <
class TestCase>
10327 typedef typename TestCase::ParamType ParamType;
10354 virtual const string& GetTestCaseName()
const = 0;
10356 virtual TypeId GetTestCaseTypeId()
const = 0;
10361 virtual void RegisterTests() = 0;
10377 template <
class TestCase>
10383 typedef typename TestCase::ParamType ParamType;
10388 : test_case_name_(name) {}
10391 virtual const string& GetTestCaseName()
const {
return test_case_name_; }
10393 virtual TypeId GetTestCaseTypeId()
const {
return GetTypeId<TestCase>(); }
10400 void AddTestPattern(
const char* test_case_name,
10401 const char* test_base_name,
10409 int AddTestCaseInstantiation(
const string& instantiation_name,
10410 GeneratorCreationFunc* func,
10413 instantiations_.push_back(::std::make_pair(instantiation_name, func));
10421 virtual void RegisterTests() {
10422 for (
typename TestInfoContainer::iterator test_it = tests_.begin();
10423 test_it != tests_.end(); ++test_it) {
10425 for (
typename InstantiationContainer::iterator gen_it =
10426 instantiations_.begin(); gen_it != instantiations_.end();
10428 const string& instantiation_name = gen_it->first;
10429 ParamGenerator<ParamType> generator((*gen_it->second)());
10431 Message test_case_name_stream;
10432 if ( !instantiation_name.empty() )
10433 test_case_name_stream << instantiation_name <<
"/";
10434 test_case_name_stream << test_info->test_case_base_name;
10439 param_it != generator.end(); ++param_it, ++i) {
10441 test_name_stream << test_info->test_base_name <<
"/" << i;
10442 MakeAndRegisterTestInfo(
10443 test_case_name_stream.GetString().c_str(),
10444 test_name_stream.GetString().c_str(),
10446 PrintToString(*param_it).c_str(),
10447 GetTestCaseTypeId(),
10448 TestCase::SetUpTestCase,
10449 TestCase::TearDownTestCase,
10450 test_info->test_meta_factory->CreateTestFactory(*param_it));
10460 TestInfo(
const char* a_test_case_base_name,
10461 const char* a_test_base_name,
10463 test_case_base_name(a_test_case_base_name),
10464 test_base_name(a_test_base_name),
10465 test_meta_factory(a_test_meta_factory) {}
10467 const string test_case_base_name;
10468 const string test_base_name;
10471 typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer;
10474 typedef ::std::vector<std::pair<string, GeneratorCreationFunc*> >
10475 InstantiationContainer;
10477 const string test_case_name_;
10478 TestInfoContainer tests_;
10479 InstantiationContainer instantiations_;
10494 for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
10495 it != test_case_infos_.end(); ++it) {
10502 template <
class TestCase>
10504 const char* test_case_name,
10508 for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
10509 it != test_case_infos_.end(); ++it) {
10510 if ((*it)->GetTestCaseName() == test_case_name) {
10511 if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {
10515 ReportInvalidTestCaseType(test_case_name, file, line);
10521 typed_test_info = CheckedDowncastToActualType<
10527 if (typed_test_info == NULL) {
10529 test_case_infos_.push_back(typed_test_info);
10531 return typed_test_info;
10533 void RegisterTests() {
10534 for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
10535 it != test_case_infos_.end(); ++it) {
10536 (*it)->RegisterTests();
10541 typedef ::std::vector<ParameterizedTestCaseInfoBase*> TestCaseInfoContainer;
10543 TestCaseInfoContainer test_case_infos_;
10551 #endif // GTEST_HAS_PARAM_TEST
10553 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
10599 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
10600 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
10606 #if GTEST_HAS_PARAM_TEST
10608 namespace testing {
10612 template <
typename ForwardIterator>
10613 internal::ParamGenerator<
10614 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
10615 ValuesIn(ForwardIterator begin, ForwardIterator end);
10617 template <
typename T,
size_t N>
10618 internal::ParamGenerator<T> ValuesIn(
const T (&array)[N]);
10620 template <
class Container>
10621 internal::ParamGenerator<typename Container::value_type> ValuesIn(
10622 const Container& container);
10624 namespace internal {
10627 template <
typename T1>
10632 template <
typename T>
10642 template <
typename T1,
typename T2>
10647 template <
typename T>
10649 const T array[] = {v1_, v2_};
10650 return ValuesIn(array);
10661 template <
typename T1,
typename T2,
typename T3>
10664 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
10666 template <
typename T>
10668 const T array[] = {v1_, v2_, v3_};
10669 return ValuesIn(array);
10681 template <
typename T1,
typename T2,
typename T3,
typename T4>
10684 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
10687 template <
typename T>
10689 const T array[] = {v1_, v2_, v3_, v4_};
10690 return ValuesIn(array);
10703 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
10706 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
10707 v4_(v4), v5_(v5) {}
10709 template <
typename T>
10711 const T array[] = {v1_, v2_, v3_, v4_, v5_};
10712 return ValuesIn(array);
10726 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10730 ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
10731 v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
10733 template <
typename T>
10735 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
10736 return ValuesIn(array);
10751 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10752 typename T6,
typename T7>
10755 ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
10756 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
10758 template <
typename T>
10760 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
10761 return ValuesIn(array);
10777 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10778 typename T6,
typename T7,
typename T8>
10781 ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
10782 T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
10785 template <
typename T>
10787 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
10788 return ValuesIn(array);
10805 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10806 typename T6,
typename T7,
typename T8,
typename T9>
10809 ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
10810 T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
10811 v8_(v8), v9_(v9) {}
10813 template <
typename T>
10815 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
10816 return ValuesIn(array);
10834 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10835 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
10838 ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
10839 T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
10840 v8_(v8), v9_(v9), v10_(v10) {}
10842 template <
typename T>
10844 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
10845 return ValuesIn(array);
10864 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10865 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
10869 ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
10870 T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
10871 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
10873 template <
typename T>
10875 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
10876 return ValuesIn(array);
10896 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10897 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
10898 typename T11,
typename T12>
10901 ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
10902 T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
10903 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
10905 template <
typename T>
10907 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
10909 return ValuesIn(array);
10930 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10931 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
10932 typename T11,
typename T12,
typename T13>
10935 ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
10936 T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
10937 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
10938 v12_(v12), v13_(v13) {}
10940 template <
typename T>
10942 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
10944 return ValuesIn(array);
10966 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
10967 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
10968 typename T11,
typename T12,
typename T13,
typename T14>
10971 ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
10972 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
10973 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
10974 v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
10976 template <
typename T>
10978 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
10980 return ValuesIn(array);
11003 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11004 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11005 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
11008 ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11009 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
11010 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
11011 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
11013 template <
typename T>
11015 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11016 v12_, v13_, v14_, v15_};
11017 return ValuesIn(array);
11041 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11042 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11043 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11047 ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11048 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
11049 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
11050 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
11053 template <
typename T>
11055 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11056 v12_, v13_, v14_, v15_, v16_};
11057 return ValuesIn(array);
11082 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11083 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11084 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11085 typename T16,
typename T17>
11088 ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11089 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
11090 T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
11091 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
11092 v15_(v15), v16_(v16), v17_(v17) {}
11094 template <
typename T>
11096 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11097 v12_, v13_, v14_, v15_, v16_, v17_};
11098 return ValuesIn(array);
11124 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11125 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11126 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11127 typename T16,
typename T17,
typename T18>
11130 ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11131 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11132 T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
11133 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
11134 v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
11136 template <
typename T>
11138 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11139 v12_, v13_, v14_, v15_, v16_, v17_, v18_};
11140 return ValuesIn(array);
11167 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11168 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11169 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11170 typename T16,
typename T17,
typename T18,
typename T19>
11173 ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11174 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11175 T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
11176 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
11177 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
11179 template <
typename T>
11181 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11182 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
11183 return ValuesIn(array);
11211 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11212 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11213 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11214 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
11217 ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11218 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11219 T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
11220 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
11221 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
11222 v19_(v19), v20_(v20) {}
11224 template <
typename T>
11226 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11227 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
11228 return ValuesIn(array);
11257 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11258 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11259 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11260 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11264 ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11265 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11266 T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
11267 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
11268 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
11269 v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
11271 template <
typename T>
11273 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11274 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
11275 return ValuesIn(array);
11305 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11306 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11307 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11308 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11309 typename T21,
typename T22>
11312 ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11313 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11314 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
11315 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
11316 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
11317 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
11319 template <
typename T>
11321 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11322 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
11323 return ValuesIn(array);
11354 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11355 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11356 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11357 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11358 typename T21,
typename T22,
typename T23>
11361 ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11362 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11363 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
11364 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
11365 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
11366 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
11369 template <
typename T>
11371 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11372 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
11374 return ValuesIn(array);
11406 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11407 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11408 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11409 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11410 typename T21,
typename T22,
typename T23,
typename T24>
11413 ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11414 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11415 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
11416 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
11417 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
11418 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
11419 v22_(v22), v23_(v23), v24_(v24) {}
11421 template <
typename T>
11423 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11424 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11426 return ValuesIn(array);
11459 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11460 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11461 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11462 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11463 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
11466 ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11467 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11468 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
11469 T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
11470 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
11471 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
11472 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
11474 template <
typename T>
11476 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11477 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11479 return ValuesIn(array);
11513 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11514 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11515 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11516 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11517 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11521 ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11522 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11523 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11524 T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
11525 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
11526 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
11527 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
11529 template <
typename T>
11531 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11532 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11534 return ValuesIn(array);
11569 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11570 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11571 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11572 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11573 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11574 typename T26,
typename T27>
11577 ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11578 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11579 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11580 T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
11581 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
11582 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
11583 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
11584 v26_(v26), v27_(v27) {}
11586 template <
typename T>
11588 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11589 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11590 v24_, v25_, v26_, v27_};
11591 return ValuesIn(array);
11627 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11628 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11629 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11630 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11631 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11632 typename T26,
typename T27,
typename T28>
11635 ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11636 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11637 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11638 T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
11639 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
11640 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
11641 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
11642 v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
11644 template <
typename T>
11646 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11647 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11648 v24_, v25_, v26_, v27_, v28_};
11649 return ValuesIn(array);
11686 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11687 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11688 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11689 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11690 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11691 typename T26,
typename T27,
typename T28,
typename T29>
11694 ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11695 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11696 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11697 T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
11698 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
11699 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
11700 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
11701 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
11703 template <
typename T>
11705 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11706 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11707 v24_, v25_, v26_, v27_, v28_, v29_};
11708 return ValuesIn(array);
11746 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11747 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11748 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11749 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11750 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11751 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
11754 ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11755 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11756 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11757 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
11758 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
11759 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
11760 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
11761 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
11762 v29_(v29), v30_(v30) {}
11764 template <
typename T>
11766 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11767 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11768 v24_, v25_, v26_, v27_, v28_, v29_, v30_};
11769 return ValuesIn(array);
11808 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11809 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11810 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11811 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11812 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11813 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
11817 ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11818 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11819 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11820 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
11821 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
11822 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
11823 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
11824 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
11825 v29_(v29), v30_(v30), v31_(v31) {}
11827 template <
typename T>
11829 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11830 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11831 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
11832 return ValuesIn(array);
11872 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11873 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11874 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11875 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11876 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11877 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
11878 typename T31,
typename T32>
11881 ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11882 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11883 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11884 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
11885 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
11886 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
11887 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
11888 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
11889 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
11891 template <
typename T>
11893 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11894 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11895 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
11896 return ValuesIn(array);
11937 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
11938 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
11939 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
11940 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
11941 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
11942 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
11943 typename T31,
typename T32,
typename T33>
11946 ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
11947 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
11948 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
11949 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
11950 T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
11951 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
11952 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
11953 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
11954 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
11957 template <
typename T>
11959 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
11960 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
11961 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
11962 return ValuesIn(array);
12004 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12005 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12006 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12007 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12008 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12009 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12010 typename T31,
typename T32,
typename T33,
typename T34>
12013 ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12014 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12015 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12016 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12017 T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12018 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12019 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
12020 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
12021 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
12022 v33_(v33), v34_(v34) {}
12024 template <
typename T>
12026 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12027 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12028 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
12029 return ValuesIn(array);
12072 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12073 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12074 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12075 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12076 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12077 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12078 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
12081 ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12082 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12083 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12084 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12085 T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
12086 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
12087 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
12088 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
12089 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
12090 v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
12092 template <
typename T>
12094 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12095 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12096 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
12098 return ValuesIn(array);
12142 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12143 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12144 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12145 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12146 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12147 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12148 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12152 ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12153 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12154 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12155 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12156 T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
12157 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
12158 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
12159 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
12160 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
12161 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
12163 template <
typename T>
12165 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12166 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12167 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12169 return ValuesIn(array);
12214 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12215 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12216 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12217 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12218 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12219 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12220 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12221 typename T36,
typename T37>
12224 ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12225 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12226 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12227 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12228 T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
12229 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
12230 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
12231 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
12232 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
12233 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
12234 v36_(v36), v37_(v37) {}
12236 template <
typename T>
12238 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12239 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12240 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12242 return ValuesIn(array);
12288 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12289 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12290 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12291 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12292 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12293 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12294 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12295 typename T36,
typename T37,
typename T38>
12298 ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12299 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12300 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12301 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12302 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
12303 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12304 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
12305 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
12306 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
12307 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
12308 v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
12310 template <
typename T>
12312 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12313 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12314 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12316 return ValuesIn(array);
12363 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12364 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12365 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12366 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12367 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12368 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12369 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12370 typename T36,
typename T37,
typename T38,
typename T39>
12373 ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12374 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12375 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12376 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12377 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
12378 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12379 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
12380 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
12381 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
12382 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
12383 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
12385 template <
typename T>
12387 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12388 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12389 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12390 v36_, v37_, v38_, v39_};
12391 return ValuesIn(array);
12439 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12440 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12441 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12442 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12443 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12444 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12445 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12446 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
12449 ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12450 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12451 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12452 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12453 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
12454 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
12455 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
12456 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
12457 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
12458 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
12459 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
12462 template <
typename T>
12464 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12465 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12466 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12467 v36_, v37_, v38_, v39_, v40_};
12468 return ValuesIn(array);
12517 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12518 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12519 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12520 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12521 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12522 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12523 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12524 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12528 ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12529 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12530 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12531 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12532 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
12533 T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12534 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12535 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
12536 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
12537 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
12538 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
12539 v39_(v39), v40_(v40), v41_(v41) {}
12541 template <
typename T>
12543 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12544 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12545 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12546 v36_, v37_, v38_, v39_, v40_, v41_};
12547 return ValuesIn(array);
12597 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12598 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12599 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12600 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12601 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12602 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12603 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12604 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12605 typename T41,
typename T42>
12608 ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12609 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12610 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12611 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12612 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
12613 T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
12614 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
12615 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
12616 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
12617 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
12618 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
12619 v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
12621 template <
typename T>
12623 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12624 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12625 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12626 v36_, v37_, v38_, v39_, v40_, v41_, v42_};
12627 return ValuesIn(array);
12678 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12679 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12680 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12681 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12682 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12683 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12684 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12685 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12686 typename T41,
typename T42,
typename T43>
12689 ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12690 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12691 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12692 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12693 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
12694 T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
12695 v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
12696 v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
12697 v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
12698 v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
12699 v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
12700 v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
12702 template <
typename T>
12704 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12705 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12706 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12707 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
12708 return ValuesIn(array);
12760 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12761 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12762 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12763 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12764 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12765 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12766 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12767 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12768 typename T41,
typename T42,
typename T43,
typename T44>
12771 ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12772 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12773 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12774 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12775 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
12776 T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
12777 v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
12778 v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
12779 v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
12780 v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
12781 v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
12782 v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
12783 v43_(v43), v44_(v44) {}
12785 template <
typename T>
12787 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12788 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12789 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12790 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
12791 return ValuesIn(array);
12844 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12845 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12846 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12847 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12848 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12849 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12850 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12851 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12852 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
12855 ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12856 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12857 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12858 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12859 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
12860 T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
12861 v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
12862 v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
12863 v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
12864 v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
12865 v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
12866 v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
12867 v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
12869 template <
typename T>
12871 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12872 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12873 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12874 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
12875 return ValuesIn(array);
12929 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
12930 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
12931 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
12932 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
12933 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
12934 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
12935 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
12936 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
12937 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
12941 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
12942 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
12943 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
12944 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
12945 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
12946 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
12947 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
12948 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
12949 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
12950 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
12951 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
12952 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
12953 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
12955 template <
typename T>
12957 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
12958 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
12959 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
12960 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
12961 return ValuesIn(array);
13016 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13017 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13018 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13019 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13020 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13021 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13022 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13023 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
13024 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
13025 typename T46,
typename T47>
13028 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
13029 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13030 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13031 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13032 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
13033 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
13034 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
13035 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
13036 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
13037 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
13038 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
13039 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
13040 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
13043 template <
typename T>
13045 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
13046 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
13047 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
13048 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
13050 return ValuesIn(array);
13106 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13107 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13108 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13109 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13110 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13111 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13112 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13113 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
13114 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
13115 typename T46,
typename T47,
typename T48>
13118 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
13119 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13120 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13121 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13122 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
13123 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
13124 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
13125 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
13126 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
13127 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
13128 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
13129 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
13130 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
13131 v46_(v46), v47_(v47), v48_(v48) {}
13133 template <
typename T>
13135 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
13136 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
13137 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
13138 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
13140 return ValuesIn(array);
13197 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13198 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13199 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13200 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13201 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13202 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13203 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13204 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
13205 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
13206 typename T46,
typename T47,
typename T48,
typename T49>
13209 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
13210 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13211 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13212 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13213 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
13214 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
13215 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
13216 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
13217 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
13218 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
13219 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
13220 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
13221 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
13222 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
13224 template <
typename T>
13226 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
13227 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
13228 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
13229 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
13231 return ValuesIn(array);
13289 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13290 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
13291 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
13292 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
13293 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
13294 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
13295 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
13296 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
13297 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
13298 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
13301 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
13302 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
13303 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
13304 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
13305 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
13306 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
13307 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
13308 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
13309 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
13310 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
13311 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
13312 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
13313 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
13314 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
13316 template <
typename T>
13318 const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
13319 v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
13320 v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
13321 v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
13323 return ValuesIn(array);
13382 # if GTEST_HAS_COMBINE
13388 template <
typename T1,
typename T2>
13392 typedef ::std::tr1::tuple<T1, T2>
ParamType;
13396 : g1_(g1), g2_(g2) {}
13400 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin());
13403 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end());
13415 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
13416 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
13417 ComputeCurrentValue();
13419 virtual ~Iterator() {}
13426 virtual void Advance() {
13429 if (current2_ == end2_) {
13430 current2_ = begin2_;
13433 ComputeCurrentValue();
13436 return new Iterator(*
this);
13438 virtual const ParamType* Current()
const {
return ¤t_value_; }
13442 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
13443 <<
"The program attempted to compare iterators "
13444 <<
"from different generators." << std::endl;
13445 const Iterator* typed_other =
13446 CheckedDowncastToActualType<const Iterator>(&other);
13450 return (AtEnd() && typed_other->AtEnd()) ||
13452 current1_ == typed_other->current1_ &&
13453 current2_ == typed_other->current2_);
13457 Iterator(
const Iterator& other)
13458 : base_(other.base_),
13459 begin1_(other.begin1_),
13460 end1_(other.end1_),
13461 current1_(other.current1_),
13462 begin2_(other.begin2_),
13463 end2_(other.end2_),
13464 current2_(other.current2_) {
13465 ComputeCurrentValue();
13468 void ComputeCurrentValue() {
13470 current_value_ =
ParamType(*current1_, *current2_);
13472 bool AtEnd()
const {
13476 current1_ == end1_ ||
13477 current2_ == end2_;
13481 void operator=(
const Iterator& other);
13503 template <
typename T1,
typename T2,
typename T3>
13507 typedef ::std::tr1::tuple<T1, T2, T3>
ParamType;
13511 : g1_(g1), g2_(g2), g3_(g3) {}
13515 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
13519 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
13533 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
13534 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
13535 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
13536 ComputeCurrentValue();
13538 virtual ~Iterator() {}
13545 virtual void Advance() {
13548 if (current3_ == end3_) {
13549 current3_ = begin3_;
13552 if (current2_ == end2_) {
13553 current2_ = begin2_;
13556 ComputeCurrentValue();
13559 return new Iterator(*
this);
13561 virtual const ParamType* Current()
const {
return ¤t_value_; }
13565 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
13566 <<
"The program attempted to compare iterators "
13567 <<
"from different generators." << std::endl;
13568 const Iterator* typed_other =
13569 CheckedDowncastToActualType<const Iterator>(&other);
13573 return (AtEnd() && typed_other->AtEnd()) ||
13575 current1_ == typed_other->current1_ &&
13576 current2_ == typed_other->current2_ &&
13577 current3_ == typed_other->current3_);
13581 Iterator(
const Iterator& other)
13582 : base_(other.base_),
13583 begin1_(other.begin1_),
13584 end1_(other.end1_),
13585 current1_(other.current1_),
13586 begin2_(other.begin2_),
13587 end2_(other.end2_),
13588 current2_(other.current2_),
13589 begin3_(other.begin3_),
13590 end3_(other.end3_),
13591 current3_(other.current3_) {
13592 ComputeCurrentValue();
13595 void ComputeCurrentValue() {
13597 current_value_ =
ParamType(*current1_, *current2_, *current3_);
13599 bool AtEnd()
const {
13603 current1_ == end1_ ||
13604 current2_ == end2_ ||
13605 current3_ == end3_;
13609 void operator=(
const Iterator& other);
13635 template <
typename T1,
typename T2,
typename T3,
typename T4>
13639 typedef ::std::tr1::tuple<T1, T2, T3, T4>
ParamType;
13644 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
13648 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
13649 g3_.begin(), g4_, g4_.begin());
13652 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
13669 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
13670 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
13671 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
13672 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
13673 ComputeCurrentValue();
13675 virtual ~Iterator() {}
13682 virtual void Advance() {
13685 if (current4_ == end4_) {
13686 current4_ = begin4_;
13689 if (current3_ == end3_) {
13690 current3_ = begin3_;
13693 if (current2_ == end2_) {
13694 current2_ = begin2_;
13697 ComputeCurrentValue();
13700 return new Iterator(*
this);
13702 virtual const ParamType* Current()
const {
return ¤t_value_; }
13706 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
13707 <<
"The program attempted to compare iterators "
13708 <<
"from different generators." << std::endl;
13709 const Iterator* typed_other =
13710 CheckedDowncastToActualType<const Iterator>(&other);
13714 return (AtEnd() && typed_other->AtEnd()) ||
13716 current1_ == typed_other->current1_ &&
13717 current2_ == typed_other->current2_ &&
13718 current3_ == typed_other->current3_ &&
13719 current4_ == typed_other->current4_);
13723 Iterator(
const Iterator& other)
13724 : base_(other.base_),
13725 begin1_(other.begin1_),
13726 end1_(other.end1_),
13727 current1_(other.current1_),
13728 begin2_(other.begin2_),
13729 end2_(other.end2_),
13730 current2_(other.current2_),
13731 begin3_(other.begin3_),
13732 end3_(other.end3_),
13733 current3_(other.current3_),
13734 begin4_(other.begin4_),
13735 end4_(other.end4_),
13736 current4_(other.current4_) {
13737 ComputeCurrentValue();
13740 void ComputeCurrentValue() {
13742 current_value_ =
ParamType(*current1_, *current2_, *current3_,
13745 bool AtEnd()
const {
13749 current1_ == end1_ ||
13750 current2_ == end2_ ||
13751 current3_ == end3_ ||
13752 current4_ == end4_;
13756 void operator=(
const Iterator& other);
13786 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
13790 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5>
ParamType;
13795 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
13799 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
13800 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
13803 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
13804 g4_, g4_.end(), g5_, g5_.end());
13822 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
13823 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
13824 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
13825 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
13826 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
13827 ComputeCurrentValue();
13829 virtual ~Iterator() {}
13836 virtual void Advance() {
13839 if (current5_ == end5_) {
13840 current5_ = begin5_;
13843 if (current4_ == end4_) {
13844 current4_ = begin4_;
13847 if (current3_ == end3_) {
13848 current3_ = begin3_;
13851 if (current2_ == end2_) {
13852 current2_ = begin2_;
13855 ComputeCurrentValue();
13858 return new Iterator(*
this);
13860 virtual const ParamType* Current()
const {
return ¤t_value_; }
13864 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
13865 <<
"The program attempted to compare iterators "
13866 <<
"from different generators." << std::endl;
13867 const Iterator* typed_other =
13868 CheckedDowncastToActualType<const Iterator>(&other);
13872 return (AtEnd() && typed_other->AtEnd()) ||
13874 current1_ == typed_other->current1_ &&
13875 current2_ == typed_other->current2_ &&
13876 current3_ == typed_other->current3_ &&
13877 current4_ == typed_other->current4_ &&
13878 current5_ == typed_other->current5_);
13882 Iterator(
const Iterator& other)
13883 : base_(other.base_),
13884 begin1_(other.begin1_),
13885 end1_(other.end1_),
13886 current1_(other.current1_),
13887 begin2_(other.begin2_),
13888 end2_(other.end2_),
13889 current2_(other.current2_),
13890 begin3_(other.begin3_),
13891 end3_(other.end3_),
13892 current3_(other.current3_),
13893 begin4_(other.begin4_),
13894 end4_(other.end4_),
13895 current4_(other.current4_),
13896 begin5_(other.begin5_),
13897 end5_(other.end5_),
13898 current5_(other.current5_) {
13899 ComputeCurrentValue();
13902 void ComputeCurrentValue() {
13904 current_value_ =
ParamType(*current1_, *current2_, *current3_,
13905 *current4_, *current5_);
13907 bool AtEnd()
const {
13911 current1_ == end1_ ||
13912 current2_ == end2_ ||
13913 current3_ == end3_ ||
13914 current4_ == end4_ ||
13915 current5_ == end5_;
13919 void operator=(
const Iterator& other);
13953 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
13959 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>
ParamType;
13965 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
13969 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
13970 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
13973 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
13974 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
13994 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
13995 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
13996 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
13997 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
13998 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
13999 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
14000 ComputeCurrentValue();
14002 virtual ~Iterator() {}
14009 virtual void Advance() {
14012 if (current6_ == end6_) {
14013 current6_ = begin6_;
14016 if (current5_ == end5_) {
14017 current5_ = begin5_;
14020 if (current4_ == end4_) {
14021 current4_ = begin4_;
14024 if (current3_ == end3_) {
14025 current3_ = begin3_;
14028 if (current2_ == end2_) {
14029 current2_ = begin2_;
14032 ComputeCurrentValue();
14035 return new Iterator(*
this);
14037 virtual const ParamType* Current()
const {
return ¤t_value_; }
14041 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14042 <<
"The program attempted to compare iterators "
14043 <<
"from different generators." << std::endl;
14044 const Iterator* typed_other =
14045 CheckedDowncastToActualType<const Iterator>(&other);
14049 return (AtEnd() && typed_other->AtEnd()) ||
14051 current1_ == typed_other->current1_ &&
14052 current2_ == typed_other->current2_ &&
14053 current3_ == typed_other->current3_ &&
14054 current4_ == typed_other->current4_ &&
14055 current5_ == typed_other->current5_ &&
14056 current6_ == typed_other->current6_);
14060 Iterator(
const Iterator& other)
14061 : base_(other.base_),
14062 begin1_(other.begin1_),
14063 end1_(other.end1_),
14064 current1_(other.current1_),
14065 begin2_(other.begin2_),
14066 end2_(other.end2_),
14067 current2_(other.current2_),
14068 begin3_(other.begin3_),
14069 end3_(other.end3_),
14070 current3_(other.current3_),
14071 begin4_(other.begin4_),
14072 end4_(other.end4_),
14073 current4_(other.current4_),
14074 begin5_(other.begin5_),
14075 end5_(other.end5_),
14076 current5_(other.current5_),
14077 begin6_(other.begin6_),
14078 end6_(other.end6_),
14079 current6_(other.current6_) {
14080 ComputeCurrentValue();
14083 void ComputeCurrentValue() {
14085 current_value_ =
ParamType(*current1_, *current2_, *current3_,
14086 *current4_, *current5_, *current6_);
14088 bool AtEnd()
const {
14092 current1_ == end1_ ||
14093 current2_ == end2_ ||
14094 current3_ == end3_ ||
14095 current4_ == end4_ ||
14096 current5_ == end5_ ||
14097 current6_ == end6_;
14101 void operator=(
const Iterator& other);
14139 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14140 typename T6,
typename T7>
14145 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>
ParamType;
14151 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
14155 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
14156 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
14160 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
14161 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
14183 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
14184 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
14185 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
14186 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
14187 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
14188 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
14189 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
14190 ComputeCurrentValue();
14192 virtual ~Iterator() {}
14199 virtual void Advance() {
14202 if (current7_ == end7_) {
14203 current7_ = begin7_;
14206 if (current6_ == end6_) {
14207 current6_ = begin6_;
14210 if (current5_ == end5_) {
14211 current5_ = begin5_;
14214 if (current4_ == end4_) {
14215 current4_ = begin4_;
14218 if (current3_ == end3_) {
14219 current3_ = begin3_;
14222 if (current2_ == end2_) {
14223 current2_ = begin2_;
14226 ComputeCurrentValue();
14229 return new Iterator(*
this);
14231 virtual const ParamType* Current()
const {
return ¤t_value_; }
14235 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14236 <<
"The program attempted to compare iterators "
14237 <<
"from different generators." << std::endl;
14238 const Iterator* typed_other =
14239 CheckedDowncastToActualType<const Iterator>(&other);
14243 return (AtEnd() && typed_other->AtEnd()) ||
14245 current1_ == typed_other->current1_ &&
14246 current2_ == typed_other->current2_ &&
14247 current3_ == typed_other->current3_ &&
14248 current4_ == typed_other->current4_ &&
14249 current5_ == typed_other->current5_ &&
14250 current6_ == typed_other->current6_ &&
14251 current7_ == typed_other->current7_);
14255 Iterator(
const Iterator& other)
14256 : base_(other.base_),
14257 begin1_(other.begin1_),
14258 end1_(other.end1_),
14259 current1_(other.current1_),
14260 begin2_(other.begin2_),
14261 end2_(other.end2_),
14262 current2_(other.current2_),
14263 begin3_(other.begin3_),
14264 end3_(other.end3_),
14265 current3_(other.current3_),
14266 begin4_(other.begin4_),
14267 end4_(other.end4_),
14268 current4_(other.current4_),
14269 begin5_(other.begin5_),
14270 end5_(other.end5_),
14271 current5_(other.current5_),
14272 begin6_(other.begin6_),
14273 end6_(other.end6_),
14274 current6_(other.current6_),
14275 begin7_(other.begin7_),
14276 end7_(other.end7_),
14277 current7_(other.current7_) {
14278 ComputeCurrentValue();
14281 void ComputeCurrentValue() {
14283 current_value_ =
ParamType(*current1_, *current2_, *current3_,
14284 *current4_, *current5_, *current6_, *current7_);
14286 bool AtEnd()
const {
14290 current1_ == end1_ ||
14291 current2_ == end2_ ||
14292 current3_ == end3_ ||
14293 current4_ == end4_ ||
14294 current5_ == end5_ ||
14295 current6_ == end6_ ||
14296 current7_ == end7_;
14300 void operator=(
const Iterator& other);
14342 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14343 typename T6,
typename T7,
typename T8>
14348 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>
ParamType;
14355 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
14360 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
14361 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
14362 g7_.begin(), g8_, g8_.begin());
14365 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
14366 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
14391 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
14392 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
14393 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
14394 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
14395 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
14396 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
14397 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
14398 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
14399 ComputeCurrentValue();
14401 virtual ~Iterator() {}
14408 virtual void Advance() {
14411 if (current8_ == end8_) {
14412 current8_ = begin8_;
14415 if (current7_ == end7_) {
14416 current7_ = begin7_;
14419 if (current6_ == end6_) {
14420 current6_ = begin6_;
14423 if (current5_ == end5_) {
14424 current5_ = begin5_;
14427 if (current4_ == end4_) {
14428 current4_ = begin4_;
14431 if (current3_ == end3_) {
14432 current3_ = begin3_;
14435 if (current2_ == end2_) {
14436 current2_ = begin2_;
14439 ComputeCurrentValue();
14442 return new Iterator(*
this);
14444 virtual const ParamType* Current()
const {
return ¤t_value_; }
14448 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14449 <<
"The program attempted to compare iterators "
14450 <<
"from different generators." << std::endl;
14451 const Iterator* typed_other =
14452 CheckedDowncastToActualType<const Iterator>(&other);
14456 return (AtEnd() && typed_other->AtEnd()) ||
14458 current1_ == typed_other->current1_ &&
14459 current2_ == typed_other->current2_ &&
14460 current3_ == typed_other->current3_ &&
14461 current4_ == typed_other->current4_ &&
14462 current5_ == typed_other->current5_ &&
14463 current6_ == typed_other->current6_ &&
14464 current7_ == typed_other->current7_ &&
14465 current8_ == typed_other->current8_);
14469 Iterator(
const Iterator& other)
14470 : base_(other.base_),
14471 begin1_(other.begin1_),
14472 end1_(other.end1_),
14473 current1_(other.current1_),
14474 begin2_(other.begin2_),
14475 end2_(other.end2_),
14476 current2_(other.current2_),
14477 begin3_(other.begin3_),
14478 end3_(other.end3_),
14479 current3_(other.current3_),
14480 begin4_(other.begin4_),
14481 end4_(other.end4_),
14482 current4_(other.current4_),
14483 begin5_(other.begin5_),
14484 end5_(other.end5_),
14485 current5_(other.current5_),
14486 begin6_(other.begin6_),
14487 end6_(other.end6_),
14488 current6_(other.current6_),
14489 begin7_(other.begin7_),
14490 end7_(other.end7_),
14491 current7_(other.current7_),
14492 begin8_(other.begin8_),
14493 end8_(other.end8_),
14494 current8_(other.current8_) {
14495 ComputeCurrentValue();
14498 void ComputeCurrentValue() {
14500 current_value_ =
ParamType(*current1_, *current2_, *current3_,
14501 *current4_, *current5_, *current6_, *current7_, *current8_);
14503 bool AtEnd()
const {
14507 current1_ == end1_ ||
14508 current2_ == end2_ ||
14509 current3_ == end3_ ||
14510 current4_ == end4_ ||
14511 current5_ == end5_ ||
14512 current6_ == end6_ ||
14513 current7_ == end7_ ||
14514 current8_ == end8_;
14518 void operator=(
const Iterator& other);
14564 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14565 typename T6,
typename T7,
typename T8,
typename T9>
14570 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
ParamType;
14577 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
14582 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
14583 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
14584 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
14587 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
14588 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
14589 g8_.end(), g9_, g9_.end());
14615 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
14616 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
14617 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
14618 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
14619 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
14620 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
14621 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
14622 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
14623 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
14624 ComputeCurrentValue();
14626 virtual ~Iterator() {}
14633 virtual void Advance() {
14636 if (current9_ == end9_) {
14637 current9_ = begin9_;
14640 if (current8_ == end8_) {
14641 current8_ = begin8_;
14644 if (current7_ == end7_) {
14645 current7_ = begin7_;
14648 if (current6_ == end6_) {
14649 current6_ = begin6_;
14652 if (current5_ == end5_) {
14653 current5_ = begin5_;
14656 if (current4_ == end4_) {
14657 current4_ = begin4_;
14660 if (current3_ == end3_) {
14661 current3_ = begin3_;
14664 if (current2_ == end2_) {
14665 current2_ = begin2_;
14668 ComputeCurrentValue();
14671 return new Iterator(*
this);
14673 virtual const ParamType* Current()
const {
return ¤t_value_; }
14677 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14678 <<
"The program attempted to compare iterators "
14679 <<
"from different generators." << std::endl;
14680 const Iterator* typed_other =
14681 CheckedDowncastToActualType<const Iterator>(&other);
14685 return (AtEnd() && typed_other->AtEnd()) ||
14687 current1_ == typed_other->current1_ &&
14688 current2_ == typed_other->current2_ &&
14689 current3_ == typed_other->current3_ &&
14690 current4_ == typed_other->current4_ &&
14691 current5_ == typed_other->current5_ &&
14692 current6_ == typed_other->current6_ &&
14693 current7_ == typed_other->current7_ &&
14694 current8_ == typed_other->current8_ &&
14695 current9_ == typed_other->current9_);
14699 Iterator(
const Iterator& other)
14700 : base_(other.base_),
14701 begin1_(other.begin1_),
14702 end1_(other.end1_),
14703 current1_(other.current1_),
14704 begin2_(other.begin2_),
14705 end2_(other.end2_),
14706 current2_(other.current2_),
14707 begin3_(other.begin3_),
14708 end3_(other.end3_),
14709 current3_(other.current3_),
14710 begin4_(other.begin4_),
14711 end4_(other.end4_),
14712 current4_(other.current4_),
14713 begin5_(other.begin5_),
14714 end5_(other.end5_),
14715 current5_(other.current5_),
14716 begin6_(other.begin6_),
14717 end6_(other.end6_),
14718 current6_(other.current6_),
14719 begin7_(other.begin7_),
14720 end7_(other.end7_),
14721 current7_(other.current7_),
14722 begin8_(other.begin8_),
14723 end8_(other.end8_),
14724 current8_(other.current8_),
14725 begin9_(other.begin9_),
14726 end9_(other.end9_),
14727 current9_(other.current9_) {
14728 ComputeCurrentValue();
14731 void ComputeCurrentValue() {
14733 current_value_ =
ParamType(*current1_, *current2_, *current3_,
14734 *current4_, *current5_, *current6_, *current7_, *current8_,
14737 bool AtEnd()
const {
14741 current1_ == end1_ ||
14742 current2_ == end2_ ||
14743 current3_ == end3_ ||
14744 current4_ == end4_ ||
14745 current5_ == end5_ ||
14746 current6_ == end6_ ||
14747 current7_ == end7_ ||
14748 current8_ == end8_ ||
14749 current9_ == end9_;
14753 void operator=(
const Iterator& other);
14803 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
14804 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
14807 T7, T8, T9, T10> > {
14809 typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
ParamType;
14817 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
14818 g9_(g9), g10_(g10) {}
14822 return new Iterator(
this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
14823 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
14824 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
14827 return new Iterator(
this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
14828 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
14829 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
14857 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
14858 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
14859 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
14860 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
14861 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
14862 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
14863 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
14864 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
14865 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
14866 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
14867 ComputeCurrentValue();
14869 virtual ~Iterator() {}
14876 virtual void Advance() {
14879 if (current10_ == end10_) {
14880 current10_ = begin10_;
14883 if (current9_ == end9_) {
14884 current9_ = begin9_;
14887 if (current8_ == end8_) {
14888 current8_ = begin8_;
14891 if (current7_ == end7_) {
14892 current7_ = begin7_;
14895 if (current6_ == end6_) {
14896 current6_ = begin6_;
14899 if (current5_ == end5_) {
14900 current5_ = begin5_;
14903 if (current4_ == end4_) {
14904 current4_ = begin4_;
14907 if (current3_ == end3_) {
14908 current3_ = begin3_;
14911 if (current2_ == end2_) {
14912 current2_ = begin2_;
14915 ComputeCurrentValue();
14918 return new Iterator(*
this);
14920 virtual const ParamType* Current()
const {
return ¤t_value_; }
14924 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
14925 <<
"The program attempted to compare iterators "
14926 <<
"from different generators." << std::endl;
14927 const Iterator* typed_other =
14928 CheckedDowncastToActualType<const Iterator>(&other);
14932 return (AtEnd() && typed_other->AtEnd()) ||
14934 current1_ == typed_other->current1_ &&
14935 current2_ == typed_other->current2_ &&
14936 current3_ == typed_other->current3_ &&
14937 current4_ == typed_other->current4_ &&
14938 current5_ == typed_other->current5_ &&
14939 current6_ == typed_other->current6_ &&
14940 current7_ == typed_other->current7_ &&
14941 current8_ == typed_other->current8_ &&
14942 current9_ == typed_other->current9_ &&
14943 current10_ == typed_other->current10_);
14947 Iterator(
const Iterator& other)
14948 : base_(other.base_),
14949 begin1_(other.begin1_),
14950 end1_(other.end1_),
14951 current1_(other.current1_),
14952 begin2_(other.begin2_),
14953 end2_(other.end2_),
14954 current2_(other.current2_),
14955 begin3_(other.begin3_),
14956 end3_(other.end3_),
14957 current3_(other.current3_),
14958 begin4_(other.begin4_),
14959 end4_(other.end4_),
14960 current4_(other.current4_),
14961 begin5_(other.begin5_),
14962 end5_(other.end5_),
14963 current5_(other.current5_),
14964 begin6_(other.begin6_),
14965 end6_(other.end6_),
14966 current6_(other.current6_),
14967 begin7_(other.begin7_),
14968 end7_(other.end7_),
14969 current7_(other.current7_),
14970 begin8_(other.begin8_),
14971 end8_(other.end8_),
14972 current8_(other.current8_),
14973 begin9_(other.begin9_),
14974 end9_(other.end9_),
14975 current9_(other.current9_),
14976 begin10_(other.begin10_),
14977 end10_(other.end10_),
14978 current10_(other.current10_) {
14979 ComputeCurrentValue();
14982 void ComputeCurrentValue() {
14984 current_value_ =
ParamType(*current1_, *current2_, *current3_,
14985 *current4_, *current5_, *current6_, *current7_, *current8_,
14986 *current9_, *current10_);
14988 bool AtEnd()
const {
14992 current1_ == end1_ ||
14993 current2_ == end2_ ||
14994 current3_ == end3_ ||
14995 current4_ == end4_ ||
14996 current5_ == end5_ ||
14997 current6_ == end6_ ||
14998 current7_ == end7_ ||
14999 current8_ == end8_ ||
15000 current9_ == end9_ ||
15001 current10_ == end10_;
15005 void operator=(
const Iterator& other);
15065 template <
class Generator1,
class Generator2>
15069 : g1_(g1), g2_(g2) {}
15070 template <
typename T1,
typename T2>
15082 const Generator1 g1_;
15083 const Generator2 g2_;
15086 template <
class Generator1,
class Generator2,
class Generator3>
15090 const Generator3& g3)
15091 : g1_(g1), g2_(g2), g3_(g3) {}
15092 template <
typename T1,
typename T2,
typename T3>
15105 const Generator1 g1_;
15106 const Generator2 g2_;
15107 const Generator3 g3_;
15110 template <
class Generator1,
class Generator2,
class Generator3,
15115 const Generator3& g3,
const Generator4& g4)
15116 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
15117 template <
typename T1,
typename T2,
typename T3,
typename T4>
15131 const Generator1 g1_;
15132 const Generator2 g2_;
15133 const Generator3 g3_;
15134 const Generator4 g4_;
15137 template <
class Generator1,
class Generator2,
class Generator3,
15138 class Generator4,
class Generator5>
15142 const Generator3& g3,
const Generator4& g4,
const Generator5& g5)
15143 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
15144 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
15159 const Generator1 g1_;
15160 const Generator2 g2_;
15161 const Generator3 g3_;
15162 const Generator4 g4_;
15163 const Generator5 g5_;
15166 template <
class Generator1,
class Generator2,
class Generator3,
15167 class Generator4,
class Generator5,
class Generator6>
15171 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
15172 const Generator6& g6)
15173 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
15174 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15191 const Generator1 g1_;
15192 const Generator2 g2_;
15193 const Generator3 g3_;
15194 const Generator4 g4_;
15195 const Generator5 g5_;
15196 const Generator6 g6_;
15199 template <
class Generator1,
class Generator2,
class Generator3,
15200 class Generator4,
class Generator5,
class Generator6,
class Generator7>
15204 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
15205 const Generator6& g6,
const Generator7& g7)
15206 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
15207 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15208 typename T6,
typename T7>
15226 const Generator1 g1_;
15227 const Generator2 g2_;
15228 const Generator3 g3_;
15229 const Generator4 g4_;
15230 const Generator5 g5_;
15231 const Generator6 g6_;
15232 const Generator7 g7_;
15235 template <
class Generator1,
class Generator2,
class Generator3,
15236 class Generator4,
class Generator5,
class Generator6,
class Generator7,
15241 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
15242 const Generator6& g6,
const Generator7& g7,
const Generator8& g8)
15243 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
15245 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15246 typename T6,
typename T7,
typename T8>
15265 const Generator1 g1_;
15266 const Generator2 g2_;
15267 const Generator3 g3_;
15268 const Generator4 g4_;
15269 const Generator5 g5_;
15270 const Generator6 g6_;
15271 const Generator7 g7_;
15272 const Generator8 g8_;
15275 template <
class Generator1,
class Generator2,
class Generator3,
15276 class Generator4,
class Generator5,
class Generator6,
class Generator7,
15277 class Generator8,
class Generator9>
15281 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
15282 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
15283 const Generator9& g9)
15284 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
15286 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15287 typename T6,
typename T7,
typename T8,
typename T9>
15308 const Generator1 g1_;
15309 const Generator2 g2_;
15310 const Generator3 g3_;
15311 const Generator4 g4_;
15312 const Generator5 g5_;
15313 const Generator6 g6_;
15314 const Generator7 g7_;
15315 const Generator8 g8_;
15316 const Generator9 g9_;
15319 template <
class Generator1,
class Generator2,
class Generator3,
15320 class Generator4,
class Generator5,
class Generator6,
class Generator7,
15321 class Generator8,
class Generator9,
class Generator10>
15325 const Generator3& g3,
const Generator4& g4,
const Generator5& g5,
15326 const Generator6& g6,
const Generator7& g7,
const Generator8& g8,
15327 const Generator9& g9,
const Generator10& g10)
15328 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
15329 g9_(g9), g10_(g10) {}
15330 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15331 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
15333 T9, T10> >()
const {
15354 const Generator1 g1_;
15355 const Generator2 g2_;
15356 const Generator3 g3_;
15357 const Generator4 g4_;
15358 const Generator5 g5_;
15359 const Generator6 g6_;
15360 const Generator7 g7_;
15361 const Generator8 g8_;
15362 const Generator9 g9_;
15363 const Generator10 g10_;
15366 # endif // GTEST_HAS_COMBINE
15371 #endif // GTEST_HAS_PARAM_TEST
15373 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
15375 #if GTEST_HAS_PARAM_TEST
15377 namespace testing {
15421 template <
typename T,
typename IncrementT>
15422 internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
15423 return internal::ParamGenerator<T>(
15424 new internal::RangeGenerator<T, IncrementT>(start, end, step));
15427 template <
typename T>
15428 internal::ParamGenerator<T> Range(T start, T end) {
15429 return Range(start, end, 1);
15487 template <
typename ForwardIterator>
15488 internal::ParamGenerator<
15489 typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
15490 ValuesIn(ForwardIterator begin, ForwardIterator end) {
15491 typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
15492 ::value_type ParamType;
15493 return internal::ParamGenerator<ParamType>(
15494 new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
15497 template <
typename T,
size_t N>
15498 internal::ParamGenerator<T> ValuesIn(
const T (&array)[N]) {
15499 return ValuesIn(array, array + N);
15502 template <
class Container>
15503 internal::ParamGenerator<typename Container::value_type> ValuesIn(
15504 const Container& container) {
15505 return ValuesIn(container.begin(), container.end());
15527 template <
typename T1>
15528 internal::ValueArray1<T1> Values(T1 v1) {
15529 return internal::ValueArray1<T1>(v1);
15532 template <
typename T1,
typename T2>
15533 internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {
15534 return internal::ValueArray2<T1, T2>(v1, v2);
15537 template <
typename T1,
typename T2,
typename T3>
15538 internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
15539 return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);
15542 template <
typename T1,
typename T2,
typename T3,
typename T4>
15543 internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
15544 return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);
15547 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
15548 internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4,
15550 return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
15553 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15555 internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3,
15556 T4 v4, T5 v5, T6 v6) {
15557 return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
15560 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15561 typename T6,
typename T7>
15562 internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3,
15563 T4 v4, T5 v5, T6 v6, T7 v7) {
15564 return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
15568 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15569 typename T6,
typename T7,
typename T8>
15570 internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2,
15571 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
15572 return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
15576 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15577 typename T6,
typename T7,
typename T8,
typename T9>
15578 internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,
15579 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
15580 return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
15581 v4, v5, v6, v7, v8, v9);
15584 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15585 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
15586 internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,
15587 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
15588 return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
15589 v2, v3, v4, v5, v6, v7, v8, v9, v10);
15592 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15593 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15595 internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
15596 T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15597 T10 v10, T11 v11) {
15598 return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
15599 T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
15602 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15603 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15604 typename T11,
typename T12>
15605 internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15606 T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15607 T10 v10, T11 v11, T12 v12) {
15608 return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15609 T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
15612 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15613 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15614 typename T11,
typename T12,
typename T13>
15615 internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
15616 T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15617 T10 v10, T11 v11, T12 v12, T13 v13) {
15618 return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15619 T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
15622 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15623 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15624 typename T11,
typename T12,
typename T13,
typename T14>
15625 internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15626 T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15627 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
15628 return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15629 T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
15633 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15634 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15635 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
15636 internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15637 T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
15638 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
15639 return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15640 T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
15644 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15645 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15646 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15648 internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15649 T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
15650 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15652 return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15653 T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
15654 v12, v13, v14, v15, v16);
15657 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15658 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15659 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15660 typename T16,
typename T17>
15661 internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15662 T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
15663 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15664 T16 v16, T17 v17) {
15665 return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15666 T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
15667 v11, v12, v13, v14, v15, v16, v17);
15670 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15671 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15672 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15673 typename T16,
typename T17,
typename T18>
15674 internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15675 T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
15676 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15677 T16 v16, T17 v17, T18 v18) {
15678 return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15679 T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
15680 v10, v11, v12, v13, v14, v15, v16, v17, v18);
15683 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15684 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15685 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15686 typename T16,
typename T17,
typename T18,
typename T19>
15687 internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15688 T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
15689 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
15690 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
15691 return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15692 T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
15693 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
15696 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15697 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15698 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15699 typename T16,
typename T17,
typename T18,
typename T19,
typename T20>
15700 internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15701 T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4,
15702 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
15703 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
15704 return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15705 T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
15706 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
15709 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15710 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15711 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15712 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15714 internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15715 T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4,
15716 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
15717 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
15718 return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15719 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
15720 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
15723 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15724 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15725 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15726 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15727 typename T21,
typename T22>
15728 internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15729 T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3,
15730 T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
15731 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
15732 T21 v21, T22 v22) {
15733 return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15734 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
15735 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
15739 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15740 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15741 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15742 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15743 typename T21,
typename T22,
typename T23>
15744 internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15745 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2,
15746 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
15747 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
15748 T21 v21, T22 v22, T23 v23) {
15749 return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15750 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
15751 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
15752 v20, v21, v22, v23);
15755 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15756 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15757 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15758 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15759 typename T21,
typename T22,
typename T23,
typename T24>
15760 internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15761 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2,
15762 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
15763 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
15764 T21 v21, T22 v22, T23 v23, T24 v24) {
15765 return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15766 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
15767 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
15768 v19, v20, v21, v22, v23, v24);
15771 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15772 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15773 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15774 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15775 typename T21,
typename T22,
typename T23,
typename T24,
typename T25>
15776 internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15777 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1,
15778 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
15779 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
15780 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
15781 return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15782 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
15783 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
15784 v18, v19, v20, v21, v22, v23, v24, v25);
15787 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15788 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15789 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15790 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15791 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15793 internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15794 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15795 T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15796 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
15797 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
15799 return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15800 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15801 T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
15802 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
15805 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15806 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15807 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15808 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15809 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15810 typename T26,
typename T27>
15811 internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15812 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
15813 T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15814 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
15815 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
15816 T26 v26, T27 v27) {
15817 return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15818 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15819 T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
15820 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
15823 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15824 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15825 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15826 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15827 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15828 typename T26,
typename T27,
typename T28>
15829 internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15830 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
15831 T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15832 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
15833 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
15834 T26 v26, T27 v27, T28 v28) {
15835 return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15836 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15837 T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
15838 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
15842 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15843 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15844 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15845 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15846 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15847 typename T26,
typename T27,
typename T28,
typename T29>
15848 internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15849 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15850 T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
15851 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
15852 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
15853 T26 v26, T27 v27, T28 v28, T29 v29) {
15854 return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15855 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15856 T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
15857 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
15861 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15862 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15863 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15864 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15865 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15866 typename T26,
typename T27,
typename T28,
typename T29,
typename T30>
15867 internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15868 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15869 T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
15870 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
15871 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
15872 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
15873 return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15874 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15875 T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
15876 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
15877 v26, v27, v28, v29, v30);
15880 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15881 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15882 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15883 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15884 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15885 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15887 internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15888 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15889 T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
15890 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15891 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
15892 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
15893 return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15894 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15895 T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
15896 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
15897 v25, v26, v27, v28, v29, v30, v31);
15900 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15901 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15902 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15903 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15904 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15905 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15906 typename T31,
typename T32>
15907 internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15908 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15909 T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
15910 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15911 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
15912 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
15914 return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15915 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15916 T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
15917 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
15918 v24, v25, v26, v27, v28, v29, v30, v31, v32);
15921 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15922 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15923 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15924 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15925 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15926 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15927 typename T31,
typename T32,
typename T33>
15928 internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15929 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15930 T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
15931 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
15932 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
15933 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
15934 T32 v32, T33 v33) {
15935 return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15936 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15937 T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
15938 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
15939 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
15942 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15943 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15944 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15945 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15946 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15947 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15948 typename T31,
typename T32,
typename T33,
typename T34>
15949 internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15950 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15951 T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
15952 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
15953 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
15954 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
15955 T31 v31, T32 v32, T33 v33, T34 v34) {
15956 return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15957 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15958 T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
15959 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
15960 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
15963 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15964 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15965 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15966 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15967 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15968 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15969 typename T31,
typename T32,
typename T33,
typename T34,
typename T35>
15970 internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15971 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15972 T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4,
15973 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
15974 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
15975 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
15976 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
15977 return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
15978 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
15979 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
15980 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
15981 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
15984 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
15985 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
15986 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
15987 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
15988 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
15989 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
15990 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
15992 internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
15993 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
15994 T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4,
15995 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
15996 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
15997 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
15998 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
15999 return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16000 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16001 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
16002 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
16003 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
16007 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16008 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16009 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16010 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16011 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16012 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16013 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16014 typename T36,
typename T37>
16015 internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16016 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16017 T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3,
16018 T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
16019 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
16020 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
16021 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
16023 return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16024 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16025 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
16026 v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
16027 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
16028 v34, v35, v36, v37);
16031 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16032 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16033 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16034 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16035 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16036 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16037 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16038 typename T36,
typename T37,
typename T38>
16039 internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16040 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16041 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2,
16042 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
16043 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
16044 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
16045 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
16046 T37 v37, T38 v38) {
16047 return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16048 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16049 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
16050 v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
16051 v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
16052 v33, v34, v35, v36, v37, v38);
16055 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16056 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16057 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16058 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16059 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16060 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16061 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16062 typename T36,
typename T37,
typename T38,
typename T39>
16063 internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16064 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16065 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2,
16066 T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
16067 T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
16068 T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
16069 T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
16070 T37 v37, T38 v38, T39 v39) {
16071 return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16072 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16073 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
16074 v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
16075 v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
16076 v32, v33, v34, v35, v36, v37, v38, v39);
16079 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16080 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16081 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16082 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16083 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16084 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16085 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16086 typename T36,
typename T37,
typename T38,
typename T39,
typename T40>
16087 internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16088 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16089 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1,
16090 T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
16091 T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
16092 T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
16093 T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
16094 T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
16095 return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16096 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16097 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16098 T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
16099 v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
16100 v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
16103 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16104 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16105 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16106 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16107 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16108 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16109 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16110 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16112 internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16113 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16114 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
16115 T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
16116 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
16117 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
16118 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
16119 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
16120 return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16121 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16122 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16123 T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
16124 v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
16125 v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
16128 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16129 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16130 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16131 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16132 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16133 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16134 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16135 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16136 typename T41,
typename T42>
16137 internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16138 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16139 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
16140 T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
16141 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
16142 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
16143 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
16144 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
16146 return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16147 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16148 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16149 T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
16150 v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
16151 v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
16155 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16156 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16157 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16158 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16159 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16160 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16161 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16162 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16163 typename T41,
typename T42,
typename T43>
16164 internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16165 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16166 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
16167 T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
16168 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
16169 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
16170 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
16171 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
16172 T42 v42, T43 v43) {
16173 return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16174 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16175 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16176 T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
16177 v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
16178 v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
16182 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16183 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16184 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16185 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16186 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16187 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16188 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16189 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16190 typename T41,
typename T42,
typename T43,
typename T44>
16191 internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16192 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16193 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16194 T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
16195 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
16196 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
16197 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
16198 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
16199 T42 v42, T43 v43, T44 v44) {
16200 return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16201 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16202 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16203 T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
16204 v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
16205 v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
16206 v40, v41, v42, v43, v44);
16209 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16210 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16211 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16212 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16213 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16214 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16215 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16216 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16217 typename T41,
typename T42,
typename T43,
typename T44,
typename T45>
16218 internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16219 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16220 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16221 T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
16222 T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
16223 T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
16224 T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
16225 T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
16226 T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
16227 return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16228 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16229 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16230 T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
16231 v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
16232 v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
16233 v39, v40, v41, v42, v43, v44, v45);
16236 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16237 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16238 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16239 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16240 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16241 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16242 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16243 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16244 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
16246 internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16247 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16248 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16249 T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
16250 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
16251 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
16252 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
16253 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
16254 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
16255 return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16256 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16257 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16258 T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
16259 v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
16260 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
16261 v38, v39, v40, v41, v42, v43, v44, v45, v46);
16264 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16265 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16266 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16267 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16268 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16269 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16270 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16271 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16272 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
16273 typename T46,
typename T47>
16274 internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16275 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16276 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16277 T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
16278 T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
16279 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
16280 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
16281 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
16282 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
16283 return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16284 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16285 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16286 T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
16287 v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
16288 v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
16289 v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
16292 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16293 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16294 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16295 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16296 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16297 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16298 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16299 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16300 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
16301 typename T46,
typename T47,
typename T48>
16302 internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16303 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16304 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16305 T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
16306 T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
16307 T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
16308 T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
16309 T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
16310 T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
16312 return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16313 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16314 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16315 T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
16316 v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
16317 v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
16318 v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
16321 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16322 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16323 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16324 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16325 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16326 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16327 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16328 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16329 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
16330 typename T46,
typename T47,
typename T48,
typename T49>
16331 internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16332 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16333 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16334 T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
16335 T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
16336 T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
16337 T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
16338 T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
16339 T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
16340 T47 v47, T48 v48, T49 v49) {
16341 return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16342 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16343 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16344 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
16345 v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
16346 v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
16347 v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
16350 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
16351 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
16352 typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
16353 typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
16354 typename T21,
typename T22,
typename T23,
typename T24,
typename T25,
16355 typename T26,
typename T27,
typename T28,
typename T29,
typename T30,
16356 typename T31,
typename T32,
typename T33,
typename T34,
typename T35,
16357 typename T36,
typename T37,
typename T38,
typename T39,
typename T40,
16358 typename T41,
typename T42,
typename T43,
typename T44,
typename T45,
16359 typename T46,
typename T47,
typename T48,
typename T49,
typename T50>
16360 internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
16361 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
16362 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
16363 T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,
16364 T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
16365 T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
16366 T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
16367 T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
16368 T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
16369 T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
16370 return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
16371 T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
16372 T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
16373 T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
16374 v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
16375 v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
16376 v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
16400 inline internal::ParamGenerator<bool> Bool() {
16401 return Values(
false,
true);
16404 # if GTEST_HAS_COMBINE
16453 template <
typename Generator1,
typename Generator2>
16454 internal::CartesianProductHolder2<Generator1, Generator2> Combine(
16455 const Generator1& g1,
const Generator2& g2) {
16456 return internal::CartesianProductHolder2<Generator1, Generator2>(
16460 template <
typename Generator1,
typename Generator2,
typename Generator3>
16461 internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(
16462 const Generator1& g1,
const Generator2& g2,
const Generator3& g3) {
16463 return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
16467 template <
typename Generator1,
typename Generator2,
typename Generator3,
16468 typename Generator4>
16469 internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
16470 Generator4> Combine(
16471 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16472 const Generator4& g4) {
16473 return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
16478 template <
typename Generator1,
typename Generator2,
typename Generator3,
16479 typename Generator4,
typename Generator5>
16480 internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
16481 Generator4, Generator5> Combine(
16482 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16483 const Generator4& g4,
const Generator5& g5) {
16484 return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
16485 Generator4, Generator5>(
16486 g1, g2, g3, g4, g5);
16489 template <
typename Generator1,
typename Generator2,
typename Generator3,
16490 typename Generator4,
typename Generator5,
typename Generator6>
16491 internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
16492 Generator4, Generator5, Generator6> Combine(
16493 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16494 const Generator4& g4,
const Generator5& g5,
const Generator6& g6) {
16495 return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
16496 Generator4, Generator5, Generator6>(
16497 g1, g2, g3, g4, g5, g6);
16500 template <
typename Generator1,
typename Generator2,
typename Generator3,
16501 typename Generator4,
typename Generator5,
typename Generator6,
16502 typename Generator7>
16503 internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
16504 Generator4, Generator5, Generator6, Generator7> Combine(
16505 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16506 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
16507 const Generator7& g7) {
16508 return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
16509 Generator4, Generator5, Generator6, Generator7>(
16510 g1, g2, g3, g4, g5, g6, g7);
16513 template <
typename Generator1,
typename Generator2,
typename Generator3,
16514 typename Generator4,
typename Generator5,
typename Generator6,
16515 typename Generator7,
typename Generator8>
16516 internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
16517 Generator4, Generator5, Generator6, Generator7, Generator8> Combine(
16518 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16519 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
16520 const Generator7& g7,
const Generator8& g8) {
16521 return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
16522 Generator4, Generator5, Generator6, Generator7, Generator8>(
16523 g1, g2, g3, g4, g5, g6, g7, g8);
16526 template <
typename Generator1,
typename Generator2,
typename Generator3,
16527 typename Generator4,
typename Generator5,
typename Generator6,
16528 typename Generator7,
typename Generator8,
typename Generator9>
16529 internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
16530 Generator4, Generator5, Generator6, Generator7, Generator8,
16531 Generator9> Combine(
16532 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16533 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
16534 const Generator7& g7,
const Generator8& g8,
const Generator9& g9) {
16535 return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
16536 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
16537 g1, g2, g3, g4, g5, g6, g7, g8, g9);
16540 template <
typename Generator1,
typename Generator2,
typename Generator3,
16541 typename Generator4,
typename Generator5,
typename Generator6,
16542 typename Generator7,
typename Generator8,
typename Generator9,
16543 typename Generator10>
16544 internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
16545 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
16546 Generator10> Combine(
16547 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
16548 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
16549 const Generator7& g7,
const Generator8& g8,
const Generator9& g9,
16550 const Generator10& g10) {
16551 return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
16552 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
16554 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
16556 # endif // GTEST_HAS_COMBINE
16560 # define TEST_P(test_case_name, test_name) \
16561 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
16562 : public test_case_name { \
16564 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
16565 virtual void TestBody(); \
16567 static int AddToRegistry() { \
16568 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
16569 GetTestCasePatternHolder<test_case_name>(\
16570 #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
16573 new ::testing::internal::TestMetaFactory< \
16574 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
16577 static int gtest_registering_dummy_; \
16578 GTEST_DISALLOW_COPY_AND_ASSIGN_(\
16579 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
16581 int GTEST_TEST_CLASS_NAME_(test_case_name, \
16582 test_name)::gtest_registering_dummy_ = \
16583 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
16584 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
16586 # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
16587 ::testing::internal::ParamGenerator<test_case_name::ParamType> \
16588 gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
16589 int gtest_##prefix##test_case_name##_dummy_ = \
16590 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
16591 GetTestCasePatternHolder<test_case_name>(\
16592 #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\
16594 >est_##prefix##test_case_name##_EvalGenerator_, \
16595 __FILE__, __LINE__)
16599 #endif // GTEST_HAS_PARAM_TEST
16601 #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
16635 #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
16636 #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
16656 #define FRIEND_TEST(test_case_name, test_name)\
16657 friend class test_case_name##_##test_name##_Test
16659 #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_
16692 #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
16693 #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
16698 namespace testing {
16718 const char* a_file_name,
16720 const char* a_message)
16722 file_name_(a_file_name),
16723 line_number_(a_line_number),
16724 summary_(ExtractSummary(a_message)),
16725 message_(a_message) {
16729 Type type()
const {
return type_; }
16733 const char* file_name()
const {
return file_name_.c_str(); }
16737 int line_number()
const {
return line_number_; }
16740 const char* summary()
const {
return summary_.c_str(); }
16743 const char* message()
const {
return message_.c_str(); }
16746 bool passed()
const {
return type_ == kSuccess; }
16749 bool failed()
const {
return type_ != kSuccess; }
16752 bool nonfatally_failed()
const {
return type_ == kNonFatalFailure; }
16755 bool fatally_failed()
const {
return type_ == kFatalFailure; }
16774 std::ostream& operator<<(std::ostream& os,
const TestPartResult& result);
16794 std::vector<TestPartResult> array_;
16804 virtual void ReportTestPartResult(
const TestPartResult& result) = 0;
16807 namespace internal {
16820 virtual void ReportTestPartResult(
const TestPartResult& result);
16821 bool has_new_fatal_failure()
const {
return has_new_fatal_failure_; }
16823 bool has_new_fatal_failure_;
16833 #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
16865 #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
16866 #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
16878 template <
typename T>
16882 typedef std::list<T> List;
16890 typedef testing::Types<char, int, unsigned int> MyTypes;
16891 TYPED_TEST_CASE(FooTest, MyTypes);
16899 TYPED_TEST(FooTest, DoesBlah) {
16903 TypeParam n = this->value_;
16907 n += TestFixture::shared_;
16911 typename TestFixture::List values;
16912 values.push_back(n);
16916 TYPED_TEST(FooTest, HasPropertyA) { ... }
16938 template <
typename T>
16946 TYPED_TEST_CASE_P(FooTest);
16950 TYPED_TEST_P(FooTest, DoesBlah) {
16956 TYPED_TEST_P(FooTest, HasPropertyA) { ... }
16962 REGISTER_TYPED_TEST_CASE_P(FooTest,
16963 DoesBlah, HasPropertyA);
16973 typedef testing::Types<char, int, unsigned int> MyTypes;
16974 INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
16985 #if GTEST_HAS_TYPED_TEST
16991 # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_
16996 # define TYPED_TEST_CASE(CaseName, Types) \
16997 typedef ::testing::internal::TypeList< Types >::type \
16998 GTEST_TYPE_PARAMS_(CaseName)
17000 # define TYPED_TEST(CaseName, TestName) \
17001 template <typename gtest_TypeParam_> \
17002 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
17003 : public CaseName<gtest_TypeParam_> { \
17005 typedef CaseName<gtest_TypeParam_> TestFixture; \
17006 typedef gtest_TypeParam_ TypeParam; \
17007 virtual void TestBody(); \
17009 bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \
17010 ::testing::internal::TypeParameterizedTest< \
17012 ::testing::internal::TemplateSel< \
17013 GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \
17014 GTEST_TYPE_PARAMS_(CaseName)>::Register(\
17015 "", #CaseName, #TestName, 0); \
17016 template <typename gtest_TypeParam_> \
17017 void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody()
17019 #endif // GTEST_HAS_TYPED_TEST
17023 #if GTEST_HAS_TYPED_TEST_P
17030 # define GTEST_CASE_NAMESPACE_(TestCaseName) \
17031 gtest_case_##TestCaseName##_
17037 # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \
17038 gtest_typed_test_case_p_state_##TestCaseName##_
17044 # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \
17045 gtest_registered_test_names_##TestCaseName##_
17050 # define TYPED_TEST_CASE_P(CaseName) \
17051 static ::testing::internal::TypedTestCasePState \
17052 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName)
17054 # define TYPED_TEST_P(CaseName, TestName) \
17055 namespace GTEST_CASE_NAMESPACE_(CaseName) { \
17056 template <typename gtest_TypeParam_> \
17057 class TestName : public CaseName<gtest_TypeParam_> { \
17059 typedef CaseName<gtest_TypeParam_> TestFixture; \
17060 typedef gtest_TypeParam_ TypeParam; \
17061 virtual void TestBody(); \
17063 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
17064 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\
17065 __FILE__, __LINE__, #CaseName, #TestName); \
17067 template <typename gtest_TypeParam_> \
17068 void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody()
17070 # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \
17071 namespace GTEST_CASE_NAMESPACE_(CaseName) { \
17072 typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
17074 static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \
17075 GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
17076 __FILE__, __LINE__, #__VA_ARGS__)
17081 # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \
17082 bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \
17083 ::testing::internal::TypeParameterizedTestCase<CaseName, \
17084 GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \
17085 ::testing::internal::TypeList< Types >::type>::Register(\
17086 #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName))
17088 #endif // GTEST_HAS_TYPED_TEST_P
17090 #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
17107 namespace testing {
17112 GTEST_DECLARE_bool_(also_run_disabled_tests);
17115 GTEST_DECLARE_bool_(break_on_failure);
17119 GTEST_DECLARE_bool_(catch_exceptions);
17124 GTEST_DECLARE_string_(color);
17128 GTEST_DECLARE_string_(filter);
17132 GTEST_DECLARE_bool_(list_tests);
17136 GTEST_DECLARE_string_(output);
17140 GTEST_DECLARE_bool_(print_time);
17143 GTEST_DECLARE_int32_(random_seed);
17147 GTEST_DECLARE_int32_(repeat);
17151 GTEST_DECLARE_bool_(show_internal_stack_frames);
17154 GTEST_DECLARE_bool_(shuffle);
17158 GTEST_DECLARE_int32_(stack_trace_depth);
17163 GTEST_DECLARE_bool_(throw_on_failure);
17168 GTEST_DECLARE_string_(stream_result_to);
17171 const int kMaxStackTraceDepth = 100;
17173 namespace internal {
17175 class AssertHelper;
17176 class DefaultGlobalTestPartResultReporter;
17177 class ExecDeathTest;
17178 class NoExecDeathTest;
17179 class FinalSuccessChecker;
17180 class GTestFlagSaver;
17181 class TestResultAccessor;
17182 class TestEventListenersAccessor;
17183 class TestEventRepeater;
17184 class WindowsDeathTest;
17185 class UnitTestImpl* GetUnitTestImpl();
17186 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
17187 const String& message);
17196 template <
typename T>
17197 String StreamableToString(
const T& streamable) {
17198 return (Message() << streamable).GetString();
17299 operator bool()
const {
return success_; }
17308 const char* message()
const {
17309 return message_.get() != NULL ? message_->c_str() :
"";
17313 const char* failure_message()
const {
return message(); }
17317 AppendMessage(
Message() << value);
17324 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
17325 AppendMessage(
Message() << basic_manipulator);
17331 void AppendMessage(
const Message& a_message) {
17332 if (message_.get() == NULL)
17333 message_.reset(new ::std::string);
17334 message_->append(a_message.GetString().c_str());
17387 typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc;
17388 typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc;
17399 static void SetUpTestCase() {}
17407 static void TearDownTestCase() {}
17410 static bool HasFatalFailure();
17413 static bool HasNonfatalFailure();
17417 static bool HasFailure() {
return HasFatalFailure() || HasNonfatalFailure(); }
17431 static void RecordProperty(
const char* key,
const char* value);
17432 static void RecordProperty(
const char* key,
int value);
17439 virtual void SetUp();
17442 virtual void TearDown();
17447 static bool HasSameFixtureClass();
17455 virtual void TestBody() = 0;
17462 void DeleteSelf_() {
delete this; }
17483 struct Setup_should_be_spelled_SetUp {};
17484 virtual Setup_should_be_spelled_SetUp* Setup() {
return NULL; }
17487 GTEST_DISALLOW_COPY_AND_ASSIGN_(
Test);
17490 typedef internal::TimeInMillis TimeInMillis;
17501 TestProperty(
const char* a_key,
const char* a_value) :
17502 key_(a_key), value_(a_value) {
17506 const char* key()
const {
17507 return key_.c_str();
17511 const char* value()
const {
17512 return value_.c_str();
17516 void SetValue(
const char* new_value) {
17517 value_ = new_value;
17543 int total_part_count()
const;
17546 int test_property_count()
const;
17549 bool Passed()
const {
return !Failed(); }
17552 bool Failed()
const;
17555 bool HasFatalFailure()
const;
17558 bool HasNonfatalFailure()
const;
17561 TimeInMillis elapsed_time()
const {
return elapsed_time_; }
17577 friend class internal::ExecDeathTest;
17580 friend class internal::WindowsDeathTest;
17583 const std::vector<TestPartResult>& test_part_results()
const {
17584 return test_part_results_;
17588 const std::vector<TestProperty>& test_properties()
const {
17589 return test_properties_;
17593 void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
17600 void RecordProperty(
const TestProperty& test_property);
17605 static bool ValidateTestProperty(
const TestProperty& test_property);
17611 int death_test_count()
const {
return death_test_count_; }
17614 int increment_death_test_count() {
return ++death_test_count_; }
17617 void ClearTestPartResults();
17627 std::vector<TestPartResult> test_part_results_;
17629 std::vector<TestProperty> test_properties_;
17631 int death_test_count_;
17633 TimeInMillis elapsed_time_;
17636 GTEST_DISALLOW_COPY_AND_ASSIGN_(
TestResult);
17657 const char* test_case_name()
const {
return test_case_name_.c_str(); }
17660 const char* name()
const {
return name_.c_str(); }
17664 const char* type_param()
const {
17665 if (type_param_.get() != NULL)
17666 return type_param_->c_str();
17672 const char* value_param()
const {
17673 if (value_param_.get() != NULL)
17674 return value_param_->c_str();
17694 bool should_run()
const {
return should_run_; }
17697 const TestResult* result()
const {
return &result_; }
17701 #if GTEST_HAS_DEATH_TEST
17702 friend class internal::DefaultDeathTestFactory;
17703 #endif // GTEST_HAS_DEATH_TEST
17707 friend TestInfo* internal::MakeAndRegisterTestInfo(
17708 const char* test_case_name,
const char* name,
17709 const char* type_param,
17710 const char* value_param,
17711 internal::TypeId fixture_class_id,
17712 Test::SetUpTestCaseFunc set_up_tc,
17713 Test::TearDownTestCaseFunc tear_down_tc,
17718 TestInfo(
const char* test_case_name,
const char* name,
17719 const char* a_type_param,
17720 const char* a_value_param,
17721 internal::TypeId fixture_class_id,
17726 int increment_death_test_count() {
17727 return result_.increment_death_test_count();
17734 static void ClearTestResult(
TestInfo* test_info) {
17735 test_info->result_.Clear();
17739 const std::string test_case_name_;
17740 const std::string name_;
17747 const internal::TypeId fixture_class_id_;
17750 bool matches_filter_;
17759 GTEST_DISALLOW_COPY_AND_ASSIGN_(
TestInfo);
17779 TestCase(
const char* name,
const char* a_type_param,
17780 Test::SetUpTestCaseFunc set_up_tc,
17781 Test::TearDownTestCaseFunc tear_down_tc);
17787 const char* name()
const {
return name_.c_str(); }
17791 const char* type_param()
const {
17792 if (type_param_.get() != NULL)
17793 return type_param_->c_str();
17798 bool should_run()
const {
return should_run_; }
17801 int successful_test_count()
const;
17804 int failed_test_count()
const;
17807 int disabled_test_count()
const;
17810 int test_to_run_count()
const;
17813 int total_test_count()
const;
17816 bool Passed()
const {
return !Failed(); }
17819 bool Failed()
const {
return failed_test_count() > 0; }
17822 TimeInMillis elapsed_time()
const {
return elapsed_time_; }
17826 const TestInfo* GetTestInfo(
int i)
const;
17833 std::vector<TestInfo*>& test_info_list() {
return test_info_list_; }
17836 const std::vector<TestInfo*>& test_info_list()
const {
17837 return test_info_list_;
17842 TestInfo* GetMutableTestInfo(
int i);
17845 void set_should_run(
bool should) { should_run_ = should; }
17849 void AddTestInfo(
TestInfo * test_info);
17852 void ClearResult();
17855 static void ClearTestCaseResult(
TestCase* test_case) {
17856 test_case->ClearResult();
17864 void RunSetUpTestCase() { (*set_up_tc_)(); }
17868 void RunTearDownTestCase() { (*tear_down_tc_)(); }
17871 static bool TestPassed(
const TestInfo* test_info) {
17872 return test_info->should_run() && test_info->result()->Passed();
17876 static bool TestFailed(
const TestInfo* test_info) {
17877 return test_info->should_run() && test_info->result()->Failed();
17881 static bool TestDisabled(
const TestInfo* test_info) {
17882 return test_info->is_disabled_;
17886 static bool ShouldRunTest(
const TestInfo* test_info) {
17887 return test_info->should_run();
17894 void UnshuffleTests();
17903 std::vector<TestInfo*> test_info_list_;
17907 std::vector<int> test_indices_;
17909 Test::SetUpTestCaseFunc set_up_tc_;
17911 Test::TearDownTestCaseFunc tear_down_tc_;
17915 TimeInMillis elapsed_time_;
17918 GTEST_DISALLOW_COPY_AND_ASSIGN_(
TestCase);
17941 virtual void SetUp() {}
17944 virtual void TearDown() {}
17948 struct Setup_should_be_spelled_SetUp {};
17949 virtual Setup_should_be_spelled_SetUp* Setup() {
return NULL; }
17959 virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
17964 virtual void OnTestIterationStart(
const UnitTest& unit_test,
17965 int iteration) = 0;
17968 virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
17971 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
17974 virtual void OnTestCaseStart(
const TestCase& test_case) = 0;
17977 virtual void OnTestStart(
const TestInfo& test_info) = 0;
17980 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
17983 virtual void OnTestEnd(
const TestInfo& test_info) = 0;
17986 virtual void OnTestCaseEnd(
const TestCase& test_case) = 0;
17989 virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
17992 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
17995 virtual void OnTestIterationEnd(
const UnitTest& unit_test,
17996 int iteration) = 0;
17999 virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
18009 virtual void OnTestProgramStart(
const UnitTest& ) {}
18010 virtual void OnTestIterationStart(
const UnitTest& ,
18012 virtual void OnEnvironmentsSetUpStart(
const UnitTest& ) {}
18013 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& ) {}
18014 virtual void OnTestCaseStart(
const TestCase& ) {}
18015 virtual void OnTestStart(
const TestInfo& ) {}
18017 virtual void OnTestEnd(
const TestInfo& ) {}
18018 virtual void OnTestCaseEnd(
const TestCase& ) {}
18019 virtual void OnEnvironmentsTearDownStart(
const UnitTest& ) {}
18020 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& ) {}
18021 virtual void OnTestIterationEnd(
const UnitTest& ,
18023 virtual void OnTestProgramEnd(
const UnitTest& ) {}
18048 return default_result_printer_;
18059 return default_xml_generator_;
18066 friend class internal::NoExecDeathTest;
18067 friend class internal::TestEventListenersAccessor;
18090 bool EventForwardingEnabled()
const;
18091 void SuppressEventForwarding();
18127 int Run() GTEST_MUST_USE_RESULT_;
18131 const char* original_working_dir()
const;
18135 const TestCase* current_test_case()
const;
18139 const TestInfo* current_test_info()
const;
18142 int random_seed()
const;
18144 #if GTEST_HAS_PARAM_TEST
18150 #endif // GTEST_HAS_PARAM_TEST
18153 int successful_test_case_count()
const;
18156 int failed_test_case_count()
const;
18159 int total_test_case_count()
const;
18163 int test_case_to_run_count()
const;
18166 int successful_test_count()
const;
18169 int failed_test_count()
const;
18172 int disabled_test_count()
const;
18175 int total_test_count()
const;
18178 int test_to_run_count()
const;
18181 TimeInMillis elapsed_time()
const;
18184 bool Passed()
const;
18188 bool Failed()
const;
18192 const TestCase* GetTestCase(
int i)
const;
18214 void AddTestPartResult(TestPartResult::Type result_type,
18215 const char* file_name,
18222 void RecordPropertyForCurrentTest(
const char* key,
const char* value);
18226 TestCase* GetMutableTestCase(
int i);
18239 friend void internal::ReportFailureInUnknownLocation(
18240 TestPartResult::Type result_type,
18254 void PopGTestTrace();
18267 GTEST_DISALLOW_COPY_AND_ASSIGN_(
UnitTest);
18289 return UnitTest::GetInstance()->AddEnvironment(env);
18301 GTEST_API_
void InitGoogleTest(
int* argc,
char** argv);
18305 GTEST_API_
void InitGoogleTest(
int* argc,
wchar_t** argv);
18307 namespace internal {
18321 template <
typename T1,
typename T2>
18322 String FormatForComparisonFailureMessage(
const T1& value,
18326 return ::testing::PrintToString(value);
18330 template <
typename T1,
typename T2>
18331 AssertionResult CmpHelperEQ(
const char* expected_expression,
18332 const char* actual_expression,
18333 const T1& expected,
18334 const T2& actual) {
18336 # pragma warning(push) // Saves the current warning state.
18337 # pragma warning(disable:4389) // Temporarily disables warning on
18341 if (expected == actual) {
18342 return AssertionSuccess();
18346 # pragma warning(pop) // Restores the warning state.
18349 return EqFailure(expected_expression,
18351 FormatForComparisonFailureMessage(expected, actual),
18352 FormatForComparisonFailureMessage(actual, expected),
18359 GTEST_API_ AssertionResult CmpHelperEQ(
const char* expected_expression,
18360 const char* actual_expression,
18361 BiggestInt expected,
18362 BiggestInt actual);
18368 template <
bool lhs_is_null_literal>
18372 template <
typename T1,
typename T2>
18374 const char* actual_expression,
18375 const T1& expected,
18376 const T2& actual) {
18377 return CmpHelperEQ(expected_expression, actual_expression, expected,
18388 const char* actual_expression,
18389 BiggestInt expected,
18390 BiggestInt actual) {
18391 return CmpHelperEQ(expected_expression, actual_expression, expected,
18405 template <
typename T1,
typename T2>
18407 const char* expected_expression,
18408 const char* actual_expression,
18409 const T1& expected,
18417 return CmpHelperEQ(expected_expression, actual_expression, expected,
18423 template <
typename T>
18425 const char* expected_expression,
18426 const char* actual_expression,
18436 return CmpHelperEQ(expected_expression, actual_expression,
18437 static_cast<T*>(NULL), actual);
18451 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\
18452 template <typename T1, typename T2>\
18453 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
18454 const T1& val1, const T2& val2) {\
18455 if (val1 op val2) {\
18456 return AssertionSuccess();\
18458 return AssertionFailure() \
18459 << "Expected: (" << expr1 << ") " #op " (" << expr2\
18460 << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\
18461 << " vs " << FormatForComparisonFailureMessage(val2, val1);\
18464 GTEST_API_ AssertionResult CmpHelper##op_name(\
18465 const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)
18470 GTEST_IMPL_CMP_HELPER_(NE, !=);
18472 GTEST_IMPL_CMP_HELPER_(LE, <=);
18474 GTEST_IMPL_CMP_HELPER_(LT, < );
18476 GTEST_IMPL_CMP_HELPER_(GE, >=);
18478 GTEST_IMPL_CMP_HELPER_(GT, > );
18480 #undef GTEST_IMPL_CMP_HELPER_
18485 GTEST_API_
AssertionResult CmpHelperSTREQ(
const char* expected_expression,
18486 const char* actual_expression,
18487 const char* expected,
18488 const char* actual);
18493 GTEST_API_
AssertionResult CmpHelperSTRCASEEQ(
const char* expected_expression,
18494 const char* actual_expression,
18495 const char* expected,
18496 const char* actual);
18502 const char* s2_expression,
18509 GTEST_API_
AssertionResult CmpHelperSTRCASENE(
const char* s1_expression,
18510 const char* s2_expression,
18518 GTEST_API_
AssertionResult CmpHelperSTREQ(
const char* expected_expression,
18519 const char* actual_expression,
18520 const wchar_t* expected,
18521 const wchar_t* actual);
18527 const char* s2_expression,
18529 const wchar_t* s2);
18542 const char* needle_expr,
const char* haystack_expr,
18543 const char* needle,
const char* haystack);
18545 const char* needle_expr,
const char* haystack_expr,
18546 const wchar_t* needle,
const wchar_t* haystack);
18548 const char* needle_expr,
const char* haystack_expr,
18549 const char* needle,
const char* haystack);
18551 const char* needle_expr,
const char* haystack_expr,
18552 const wchar_t* needle,
const wchar_t* haystack);
18554 const char* needle_expr,
const char* haystack_expr,
18555 const ::std::string& needle, const ::std::string& haystack);
18557 const char* needle_expr,
const char* haystack_expr,
18558 const ::std::string& needle, const ::std::string& haystack);
18560 #if GTEST_HAS_STD_WSTRING
18562 const char* needle_expr,
const char* haystack_expr,
18563 const ::std::wstring& needle, const ::std::wstring& haystack);
18565 const char* needle_expr,
const char* haystack_expr,
18566 const ::std::wstring& needle, const ::std::wstring& haystack);
18567 #endif // GTEST_HAS_STD_WSTRING
18569 namespace internal {
18578 template <
typename RawType>
18579 AssertionResult CmpHelperFloatingPointEQ(
const char* expected_expression,
18580 const char* actual_expression,
18583 const FloatingPoint<RawType> lhs(expected), rhs(actual);
18585 if (lhs.AlmostEquals(rhs)) {
18586 return AssertionSuccess();
18589 ::std::stringstream expected_ss;
18590 expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
18593 ::std::stringstream actual_ss;
18594 actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
18597 return EqFailure(expected_expression,
18599 StringStreamToString(&expected_ss),
18600 StringStreamToString(&actual_ss),
18607 GTEST_API_ AssertionResult DoubleNearPredFormat(
const char* expr1,
18609 const char* abs_error_expr,
18622 const char* message);
18627 void operator=(
const Message& message)
const;
18634 struct AssertHelperData {
18635 AssertHelperData(TestPartResult::Type t,
18636 const char* srcfile,
18639 : type(t), file(srcfile), line(line_num), message(msg) { }
18641 TestPartResult::Type
const type;
18642 const char*
const file;
18647 GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
18650 AssertHelperData*
const data_;
18657 #if GTEST_HAS_PARAM_TEST
18692 template <
typename T>
18695 typedef T ParamType;
18703 const ParamType& GetParam()
const {
return *parameter_; }
18708 static void SetParam(
const ParamType* parameter) {
18709 parameter_ = parameter;
18713 static const ParamType* parameter_;
18719 template <
typename T>
18725 template <
typename T>
18729 #endif // GTEST_HAS_PARAM_TEST
18757 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
18761 #define ADD_FAILURE_AT(file, line) \
18762 GTEST_MESSAGE_AT_(file, line, "Failed", \
18763 ::testing::TestPartResult::kNonFatalFailure)
18766 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed")
18770 #if !GTEST_DONT_DEFINE_FAIL
18771 # define FAIL() GTEST_FAIL()
18775 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded")
18779 #if !GTEST_DONT_DEFINE_SUCCEED
18780 # define SUCCEED() GTEST_SUCCEED()
18792 #define EXPECT_THROW(statement, expected_exception) \
18793 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
18794 #define EXPECT_NO_THROW(statement) \
18795 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
18796 #define EXPECT_ANY_THROW(statement) \
18797 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
18798 #define ASSERT_THROW(statement, expected_exception) \
18799 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
18800 #define ASSERT_NO_THROW(statement) \
18801 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
18802 #define ASSERT_ANY_THROW(statement) \
18803 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
18808 #define EXPECT_TRUE(condition) \
18809 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
18810 GTEST_NONFATAL_FAILURE_)
18811 #define EXPECT_FALSE(condition) \
18812 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
18813 GTEST_NONFATAL_FAILURE_)
18814 #define ASSERT_TRUE(condition) \
18815 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
18816 GTEST_FATAL_FAILURE_)
18817 #define ASSERT_FALSE(condition) \
18818 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
18819 GTEST_FATAL_FAILURE_)
18857 #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
18858 #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
18861 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_
18862 # error Do not include gtest_pred_impl.h directly. Include gtest.h instead.
18863 #endif // GTEST_INCLUDE_GTEST_GTEST_H_
18897 #define GTEST_ASSERT_(expression, on_failure) \
18898 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
18899 if (const ::testing::AssertionResult gtest_ar = (expression)) \
18902 on_failure(gtest_ar.failure_message())
18907 template <
typename Pred,
18913 if (pred(v1))
return AssertionSuccess();
18915 return AssertionFailure() << pred_text <<
"("
18916 << e1 <<
") evaluates to false, where"
18917 <<
"\n" << e1 <<
" evaluates to " << v1;
18922 #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
18923 GTEST_ASSERT_(pred_format(#v1, v1),\
18928 #define GTEST_PRED1_(pred, v1, on_failure)\
18929 GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
18935 #define EXPECT_PRED_FORMAT1(pred_format, v1) \
18936 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
18937 #define EXPECT_PRED1(pred, v1) \
18938 GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
18939 #define ASSERT_PRED_FORMAT1(pred_format, v1) \
18940 GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
18941 #define ASSERT_PRED1(pred, v1) \
18942 GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
18948 template <
typename Pred,
18951 AssertionResult AssertPred2Helper(
const char* pred_text,
18957 if (pred(v1, v2))
return AssertionSuccess();
18959 return AssertionFailure() << pred_text <<
"("
18961 << e2 <<
") evaluates to false, where"
18962 <<
"\n" << e1 <<
" evaluates to " << v1
18963 <<
"\n" << e2 <<
" evaluates to " << v2;
18968 #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
18969 GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\
18974 #define GTEST_PRED2_(pred, v1, v2, on_failure)\
18975 GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
18983 #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
18984 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
18985 #define EXPECT_PRED2(pred, v1, v2) \
18986 GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
18987 #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
18988 GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
18989 #define ASSERT_PRED2(pred, v1, v2) \
18990 GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
18996 template <
typename Pred,
19000 AssertionResult AssertPred3Helper(
const char* pred_text,
19008 if (pred(v1, v2, v3))
return AssertionSuccess();
19010 return AssertionFailure() << pred_text <<
"("
19013 << e3 <<
") evaluates to false, where"
19014 <<
"\n" << e1 <<
" evaluates to " << v1
19015 <<
"\n" << e2 <<
" evaluates to " << v2
19016 <<
"\n" << e3 <<
" evaluates to " << v3;
19021 #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
19022 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\
19027 #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
19028 GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
19038 #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
19039 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
19040 #define EXPECT_PRED3(pred, v1, v2, v3) \
19041 GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
19042 #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
19043 GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
19044 #define ASSERT_PRED3(pred, v1, v2, v3) \
19045 GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
19051 template <
typename Pred,
19056 AssertionResult AssertPred4Helper(
const char* pred_text,
19066 if (pred(v1, v2, v3, v4))
return AssertionSuccess();
19068 return AssertionFailure() << pred_text <<
"("
19072 << e4 <<
") evaluates to false, where"
19073 <<
"\n" << e1 <<
" evaluates to " << v1
19074 <<
"\n" << e2 <<
" evaluates to " << v2
19075 <<
"\n" << e3 <<
" evaluates to " << v3
19076 <<
"\n" << e4 <<
" evaluates to " << v4;
19081 #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
19082 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\
19087 #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
19088 GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
19100 #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
19101 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
19102 #define EXPECT_PRED4(pred, v1, v2, v3, v4) \
19103 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
19104 #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
19105 GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
19106 #define ASSERT_PRED4(pred, v1, v2, v3, v4) \
19107 GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
19113 template <
typename Pred,
19119 AssertionResult AssertPred5Helper(
const char* pred_text,
19131 if (pred(v1, v2, v3, v4, v5))
return AssertionSuccess();
19133 return AssertionFailure() << pred_text <<
"("
19138 << e5 <<
") evaluates to false, where"
19139 <<
"\n" << e1 <<
" evaluates to " << v1
19140 <<
"\n" << e2 <<
" evaluates to " << v2
19141 <<
"\n" << e3 <<
" evaluates to " << v3
19142 <<
"\n" << e4 <<
" evaluates to " << v4
19143 <<
"\n" << e5 <<
" evaluates to " << v5;
19148 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
19149 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
19154 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
19155 GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
19169 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
19170 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
19171 #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
19172 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
19173 #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
19174 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
19175 #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
19176 GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
19180 #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
19228 #define EXPECT_EQ(expected, actual) \
19229 EXPECT_PRED_FORMAT2(::testing::internal:: \
19230 EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
19232 #define EXPECT_NE(expected, actual) \
19233 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual)
19234 #define EXPECT_LE(val1, val2) \
19235 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
19236 #define EXPECT_LT(val1, val2) \
19237 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
19238 #define EXPECT_GE(val1, val2) \
19239 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
19240 #define EXPECT_GT(val1, val2) \
19241 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
19243 #define GTEST_ASSERT_EQ(expected, actual) \
19244 ASSERT_PRED_FORMAT2(::testing::internal:: \
19245 EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
19247 #define GTEST_ASSERT_NE(val1, val2) \
19248 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
19249 #define GTEST_ASSERT_LE(val1, val2) \
19250 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
19251 #define GTEST_ASSERT_LT(val1, val2) \
19252 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
19253 #define GTEST_ASSERT_GE(val1, val2) \
19254 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
19255 #define GTEST_ASSERT_GT(val1, val2) \
19256 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
19261 #if !GTEST_DONT_DEFINE_ASSERT_EQ
19262 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
19265 #if !GTEST_DONT_DEFINE_ASSERT_NE
19266 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)
19269 #if !GTEST_DONT_DEFINE_ASSERT_LE
19270 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)
19273 #if !GTEST_DONT_DEFINE_ASSERT_LT
19274 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)
19277 #if !GTEST_DONT_DEFINE_ASSERT_GE
19278 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)
19281 #if !GTEST_DONT_DEFINE_ASSERT_GT
19282 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
19301 #define EXPECT_STREQ(expected, actual) \
19302 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
19303 #define EXPECT_STRNE(s1, s2) \
19304 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
19305 #define EXPECT_STRCASEEQ(expected, actual) \
19306 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
19307 #define EXPECT_STRCASENE(s1, s2)\
19308 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
19310 #define ASSERT_STREQ(expected, actual) \
19311 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
19312 #define ASSERT_STRNE(s1, s2) \
19313 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
19314 #define ASSERT_STRCASEEQ(expected, actual) \
19315 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
19316 #define ASSERT_STRCASENE(s1, s2)\
19317 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
19333 #define EXPECT_FLOAT_EQ(expected, actual)\
19334 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
19337 #define EXPECT_DOUBLE_EQ(expected, actual)\
19338 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
19341 #define ASSERT_FLOAT_EQ(expected, actual)\
19342 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
19345 #define ASSERT_DOUBLE_EQ(expected, actual)\
19346 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
19349 #define EXPECT_NEAR(val1, val2, abs_error)\
19350 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
19351 val1, val2, abs_error)
19353 #define ASSERT_NEAR(val1, val2, abs_error)\
19354 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
19355 val1, val2, abs_error)
19364 GTEST_API_ AssertionResult FloatLE(
const char* expr1,
const char* expr2,
19365 float val1,
float val2);
19366 GTEST_API_ AssertionResult DoubleLE(
const char* expr1,
const char* expr2,
19367 double val1,
double val2);
19370 #if GTEST_OS_WINDOWS
19381 # define EXPECT_HRESULT_SUCCEEDED(expr) \
19382 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
19384 # define ASSERT_HRESULT_SUCCEEDED(expr) \
19385 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
19387 # define EXPECT_HRESULT_FAILED(expr) \
19388 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
19390 # define ASSERT_HRESULT_FAILED(expr) \
19391 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
19393 #endif // GTEST_OS_WINDOWS
19405 #define ASSERT_NO_FATAL_FAILURE(statement) \
19406 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)
19407 #define EXPECT_NO_FATAL_FAILURE(statement) \
19408 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
19421 #define SCOPED_TRACE(message) \
19422 ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
19423 __FILE__, __LINE__, ::testing::Message() << (message))
19455 template <
typename T1,
typename T2>
19456 bool StaticAssertTypeEq() {
19457 (void)internal::StaticAssertTypeEqHelper<T1, T2>();
19486 #define GTEST_TEST(test_case_name, test_name)\
19487 GTEST_TEST_(test_case_name, test_name, \
19488 ::testing::Test, ::testing::internal::GetTestTypeId())
19492 #if !GTEST_DONT_DEFINE_TEST
19493 # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)
19522 #define TEST_F(test_fixture, test_name)\
19523 GTEST_TEST_(test_fixture, test_name, test_fixture, \
19524 ::testing::internal::GetTypeId<test_fixture>())
19532 #define RUN_ALL_TESTS()\
19533 (::testing::UnitTest::GetInstance()->Run())
19537 #endif // GTEST_INCLUDE_GTEST_GTEST_H_