History

update googletest to release-1.10.0-224-g23b2a3b1

this matches libaom and provides GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST BUG=webm:1695 BUG=b/159031848

James Zern committed 6 years ago

Commit fbfd3fd1 parent b79f25b26 files · +697 −3947Browse files

Unified · Split

26 files
  1. third_party/googletest/README.libvpx +2 −3
  2. third_party/googletest/src/CHANGES +0 −157
  3. third_party/googletest/src/CONTRIBUTORS +1 −0
  4. third_party/googletest/src/README.md +2 −2
  5. third_party/googletest/src/include/gtest/gtest-matchers.h +22 −22
  6. third_party/googletest/src/include/gtest/gtest-message.h +1 −0
  7. third_party/googletest/src/include/gtest/gtest-param-test.h +12 −4
  8. third_party/googletest/src/include/gtest/gtest-printers.h +15 −16
  9. third_party/googletest/src/include/gtest/gtest-typed-test.h +31 −24
  10. third_party/googletest/src/include/gtest/gtest.h +15 −10
  11. third_party/googletest/src/include/gtest/internal/gtest-internal.h +94 −42
  12. third_party/googletest/src/include/gtest/internal/gtest-param-util.h +52 −1
  13. third_party/googletest/src/include/gtest/internal/gtest-port-arch.h +4 −0
  14. third_party/googletest/src/include/gtest/internal/gtest-port.h +98 −75
  15. third_party/googletest/src/include/gtest/internal/gtest-string.h +2 −1
  16. third_party/googletest/src/include/gtest/internal/gtest-type-util.h +41 −3193
  17. third_party/googletest/src/include/gtest/internal/gtest-type-util.h.pump +0 −302
  18. third_party/googletest/src/src/gtest-death-test.cc +1 −1
  19. third_party/googletest/src/src/gtest-filepath.cc +4 −1
  20. third_party/googletest/src/src/gtest-internal-inl.h +30 −23
  21. third_party/googletest/src/src/gtest-matchers.cc +14 −14
  22. third_party/googletest/src/src/gtest-port.cc +10 −6
  23. third_party/googletest/src/src/gtest-test-part.cc +5 −1
  24. third_party/googletest/src/src/gtest-typed-test.cc +4 −1
  25. third_party/googletest/src/src/gtest.cc +229 −47
  26. third_party/googletest/src/src/gtest_main.cc +8 −1
third_party/googletest/README.libvpx+2−3
@@ -1,5 +1,5 @@
1URL: https://github.com/google/googletest.git1URL: https://github.com/google/googletest.git
2Version: release-1.10.02Version: release-1.10.0-224-g23b2a3b1
3License: BSD3License: BSD
4License File: LICENSE4License File: LICENSE
5 5
@@ -13,8 +13,7 @@ generation. · 7 unmodified lines
13 13
14Local Modifications:14Local Modifications:
15- Remove everything but:15- Remove everything but:
16 googletest-release-1.10.0/googletest/16 googletest/
17 CHANGES
18 CONTRIBUTORS17 CONTRIBUTORS
19 include18 include
20 LICENSE19 LICENSE
third_party/googletest/src/CHANGES+0−157
@@ -1,157 +0,0 @@
1Changes for 1.7.0:
2
3* New feature: death tests are supported on OpenBSD and in iOS
4 simulator now.
5* New feature: Google Test now implements a protocol to allow
6 a test runner to detect that a test program has exited
7 prematurely and report it as a failure (before it would be
8 falsely reported as a success if the exit code is 0).
9* New feature: Test::RecordProperty() can now be used outside of the
10 lifespan of a test method, in which case it will be attributed to
11 the current test case or the test program in the XML report.
12* New feature (potentially breaking): --gtest_list_tests now prints
13 the type parameters and value parameters for each test.
14* Improvement: char pointers and char arrays are now escaped properly
15 in failure messages.
16* Improvement: failure summary in XML reports now includes file and
17 line information.
18* Improvement: the <testsuites> XML element now has a timestamp attribute.
19* Improvement: When --gtest_filter is specified, XML report now doesn't
20 contain information about tests that are filtered out.
21* Fixed the bug where long --gtest_filter flag values are truncated in
22 death tests.
23* Potentially breaking change: RUN_ALL_TESTS() is now implemented as a
24 function instead of a macro in order to work better with Clang.
25* Compatibility fixes with C++ 11 and various platforms.
26* Bug/warning fixes.
27
28Changes for 1.6.0:
29
30* New feature: ADD_FAILURE_AT() for reporting a test failure at the
31 given source location -- useful for writing testing utilities.
32* New feature: the universal value printer is moved from Google Mock
33 to Google Test.
34* New feature: type parameters and value parameters are reported in
35 the XML report now.
36* A gtest_disable_pthreads CMake option.
37* Colored output works in GNU Screen sessions now.
38* Parameters of value-parameterized tests are now printed in the
39 textual output.
40* Failures from ad hoc test assertions run before RUN_ALL_TESTS() are
41 now correctly reported.
42* Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to
43 ostream.
44* More complete handling of exceptions.
45* GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter
46 name is already used by another library.
47* --gtest_catch_exceptions is now true by default, allowing a test
48 program to continue after an exception is thrown.
49* Value-parameterized test fixtures can now derive from Test and
50 WithParamInterface<T> separately, easing conversion of legacy tests.
51* Death test messages are clearly marked to make them more
52 distinguishable from other messages.
53* Compatibility fixes for Android, Google Native Client, MinGW, HP UX,
54 PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear),
55 IBM XL C++ (Visual Age C++), and C++0x.
56* Bug fixes and implementation clean-ups.
57* Potentially incompatible changes: disables the harmful 'make install'
58 command in autotools.
59
60Changes for 1.5.0:
61
62 * New feature: assertions can be safely called in multiple threads
63 where the pthreads library is available.
64 * New feature: predicates used inside EXPECT_TRUE() and friends
65 can now generate custom failure messages.
66 * New feature: Google Test can now be compiled as a DLL.
67 * New feature: fused source files are included.
68 * New feature: prints help when encountering unrecognized Google Test flags.
69 * Experimental feature: CMake build script (requires CMake 2.6.4+).
70 * Experimental feature: the Pump script for meta programming.
71 * double values streamed to an assertion are printed with enough precision
72 to differentiate any two different values.
73 * Google Test now works on Solaris and AIX.
74 * Build and test script improvements.
75 * Bug fixes and implementation clean-ups.
76
77 Potentially breaking changes:
78
79 * Stopped supporting VC++ 7.1 with exceptions disabled.
80 * Dropped support for 'make install'.
81
82Changes for 1.4.0:
83
84 * New feature: the event listener API
85 * New feature: test shuffling
86 * New feature: the XML report format is closer to junitreport and can
87 be parsed by Hudson now.
88 * New feature: when a test runs under Visual Studio, its failures are
89 integrated in the IDE.
90 * New feature: /MD(d) versions of VC++ projects.
91 * New feature: elapsed time for the tests is printed by default.
92 * New feature: comes with a TR1 tuple implementation such that Boost
93 is no longer needed for Combine().
94 * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.
95 * New feature: the Xcode project can now produce static gtest
96 libraries in addition to a framework.
97 * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile,
98 Symbian, gcc, and C++Builder.
99 * Bug fixes and implementation clean-ups.
100
101Changes for 1.3.0:
102
103 * New feature: death tests on Windows, Cygwin, and Mac.
104 * New feature: ability to use Google Test assertions in other testing
105 frameworks.
106 * New feature: ability to run disabled test via
107 --gtest_also_run_disabled_tests.
108 * New feature: the --help flag for printing the usage.
109 * New feature: access to Google Test flag values in user code.
110 * New feature: a script that packs Google Test into one .h and one
111 .cc file for easy deployment.
112 * New feature: support for distributing test functions to multiple
113 machines (requires support from the test runner).
114 * Bug fixes and implementation clean-ups.
115
116Changes for 1.2.1:
117
118 * Compatibility fixes for Linux IA-64 and IBM z/OS.
119 * Added support for using Boost and other TR1 implementations.
120 * Changes to the build scripts to support upcoming release of Google C++
121 Mocking Framework.
122 * Added Makefile to the distribution package.
123 * Improved build instructions in README.
124
125Changes for 1.2.0:
126
127 * New feature: value-parameterized tests.
128 * New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS)
129 macros.
130 * Changed the XML report format to match JUnit/Ant's.
131 * Added tests to the Xcode project.
132 * Added scons/SConscript for building with SCons.
133 * Added src/gtest-all.cc for building Google Test from a single file.
134 * Fixed compatibility with Solaris and z/OS.
135 * Enabled running Python tests on systems with python 2.3 installed,
136 e.g. Mac OS X 10.4.
137 * Bug fixes.
138
139Changes for 1.1.0:
140
141 * New feature: type-parameterized tests.
142 * New feature: exception assertions.
143 * New feature: printing elapsed time of tests.
144 * Improved the robustness of death tests.
145 * Added an Xcode project and samples.
146 * Adjusted the output format on Windows to be understandable by Visual Studio.
147 * Minor bug fixes.
148
149Changes for 1.0.1:
150
151 * Added project files for Visual Studio 7.1.
152 * Fixed issues with compiling on Mac OS X.
153 * Fixed issues with compiling on Cygwin.
154
155Changes for 1.0.0:
156
157 * Initial Open Source release of Google Test
third_party/googletest/src/CONTRIBUTORS+1−0
@@ -17,6 +17,7 @@ Jói Sigurðsson <joi@google.com> · 16 unmodified lines
17Keir Mierle <mierle@gmail.com>17Keir Mierle <mierle@gmail.com>
18Keith Ray <keith.ray@gmail.com>18Keith Ray <keith.ray@gmail.com>
19Kenton Varda <kenton@google.com>19Kenton Varda <kenton@google.com>
20Krystian Kuzniarek <krystian.kuzniarek@gmail.com>
20Manuel Klimek <klimek@google.com>21Manuel Klimek <klimek@google.com>
21Markus Heule <markus.heule@gmail.com>22Markus Heule <markus.heule@gmail.com>
22Mika Raento <mikie@iki.fi>23Mika Raento <mikie@iki.fi>
third_party/googletest/src/README.md+2−2
@@ -8,8 +8,8 @@ depends on which build system you use, and is usually straightforward. · 7 unmodified lines
8 8
9### Build with CMake9### Build with CMake
10 10
11Google Test comes with a CMake build script (11Google Test comes with a CMake build script
12[CMakeLists.txt](https://github.com/google/googletest/blob/master/CMakeLists.txt))12([CMakeLists.txt](https://github.com/google/googletest/blob/master/CMakeLists.txt))
13that can be used on a wide range of platforms ("C" stands for cross-platform.).13that can be used on a wide range of platforms ("C" stands for cross-platform.).
14If you don't have CMake installed already, you can download it for free from14If you don't have CMake installed already, you can download it for free from
15<http://www.cmake.org/>.15<http://www.cmake.org/>.
third_party/googletest/src/include/gtest/gtest-matchers.h+22−22
@@ -384,18 +384,18 @@ class GTEST_API_ Matcher<std::string> · 383 unmodified lines
384 Matcher(const char* s); // NOLINT384 Matcher(const char* s); // NOLINT
385};385};
386 386
387#if GTEST_HAS_ABSL387#if GTEST_INTERNAL_HAS_STRING_VIEW
388// The following two specializations allow the user to write str388// The following two specializations allow the user to write str
389// instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view389// instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view
390// matcher is expected.390// matcher is expected.
391template <>391template <>
392class GTEST_API_ Matcher<const absl::string_view&>392class GTEST_API_ Matcher<const internal::StringView&>
393 : public internal::MatcherBase<const absl::string_view&> {393 : public internal::MatcherBase<const internal::StringView&> {
394 public:394 public:
395 Matcher() {}395 Matcher() {}
396 396
397 explicit Matcher(const MatcherInterface<const absl::string_view&>* impl)397 explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)
398 : internal::MatcherBase<const absl::string_view&>(impl) {}398 : internal::MatcherBase<const internal::StringView&>(impl) {}
399 399
400 // Allows the user to write str instead of Eq(str) sometimes, where400 // Allows the user to write str instead of Eq(str) sometimes, where
401 // str is a std::string object.401 // str is a std::string object.
@@ -404,20 +404,20 @@ class GTEST_API_ Matcher<const absl::string_view&> · 2 unmodified lines
404 // Allows the user to write "foo" instead of Eq("foo") sometimes.404 // Allows the user to write "foo" instead of Eq("foo") sometimes.
405 Matcher(const char* s); // NOLINT405 Matcher(const char* s); // NOLINT
406 406
407 // Allows the user to pass absl::string_views directly.407 // Allows the user to pass absl::string_views or std::string_views directly.
408 Matcher(absl::string_view s); // NOLINT408 Matcher(internal::StringView s); // NOLINT
409};409};
410 410
411template <>411template <>
412class GTEST_API_ Matcher<absl::string_view>412class GTEST_API_ Matcher<internal::StringView>
413 : public internal::MatcherBase<absl::string_view> {413 : public internal::MatcherBase<internal::StringView> {
414 public:414 public:
415 Matcher() {}415 Matcher() {}
416 416
417 explicit Matcher(const MatcherInterface<const absl::string_view&>* impl)417 explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)
418 : internal::MatcherBase<absl::string_view>(impl) {}418 : internal::MatcherBase<internal::StringView>(impl) {}
419 explicit Matcher(const MatcherInterface<absl::string_view>* impl)419 explicit Matcher(const MatcherInterface<internal::StringView>* impl)
420 : internal::MatcherBase<absl::string_view>(impl) {}420 : internal::MatcherBase<internal::StringView>(impl) {}
421 421
422 // Allows the user to write str instead of Eq(str) sometimes, where422 // Allows the user to write str instead of Eq(str) sometimes, where
423 // str is a std::string object.423 // str is a std::string object.
@@ -426,10 +426,10 @@ class GTEST_API_ Matcher<absl::string_view> · 2 unmodified lines
426 // Allows the user to write "foo" instead of Eq("foo") sometimes.426 // Allows the user to write "foo" instead of Eq("foo") sometimes.
427 Matcher(const char* s); // NOLINT427 Matcher(const char* s); // NOLINT
428 428
429 // Allows the user to pass absl::string_views directly.429 // Allows the user to pass absl::string_views or std::string_views directly.
430 Matcher(absl::string_view s); // NOLINT430 Matcher(internal::StringView s); // NOLINT
431};431};
432#endif // GTEST_HAS_ABSL432#endif // GTEST_INTERNAL_HAS_STRING_VIEW
433 433
434// Prints a matcher in a human-readable format.434// Prints a matcher in a human-readable format.
435template <typename T>435template <typename T>
@@ -474,13 +474,13 @@ class PolymorphicMatcher { · 38 unmodified lines
474 public:474 public:
475 explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}475 explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
476 476
477 virtual void DescribeTo(::std::ostream* os) const { impl_.DescribeTo(os); }477 void DescribeTo(::std::ostream* os) const override { impl_.DescribeTo(os); }
478 478
479 virtual void DescribeNegationTo(::std::ostream* os) const {479 void DescribeNegationTo(::std::ostream* os) const override {
480 impl_.DescribeNegationTo(os);480 impl_.DescribeNegationTo(os);
481 }481 }
482 482
483 virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {483 bool MatchAndExplain(T x, MatchResultListener* listener) const override {
484 return impl_.MatchAndExplain(x, listener);484 return impl_.MatchAndExplain(x, listener);
485 }485 }
486 486
@@ -620,12 +620,12 @@ class MatchesRegexMatcher { · 133 unmodified lines
620 MatchesRegexMatcher(const RE* regex, bool full_match)620 MatchesRegexMatcher(const RE* regex, bool full_match)
621 : regex_(regex), full_match_(full_match) {}621 : regex_(regex), full_match_(full_match) {}
622 622
623#if GTEST_HAS_ABSL623#if GTEST_INTERNAL_HAS_STRING_VIEW
624 bool MatchAndExplain(const absl::string_view& s,624 bool MatchAndExplain(const internal::StringView& s,
625 MatchResultListener* listener) const {625 MatchResultListener* listener) const {
626 return MatchAndExplain(std::string(s), listener);626 return MatchAndExplain(std::string(s), listener);
627 }627 }
628#endif // GTEST_HAS_ABSL628#endif // GTEST_INTERNAL_HAS_STRING_VIEW
629 629
630 // Accepts pointer types, particularly:630 // Accepts pointer types, particularly:
631 // const char*631 // const char*
third_party/googletest/src/include/gtest/gtest-message.h+1−0
@@ -49,6 +49,7 @@ · 48 unmodified lines
49 49
50#include <limits>50#include <limits>
51#include <memory>51#include <memory>
52#include <sstream>
52 53
53#include "gtest/internal/gtest-port.h"54#include "gtest/internal/gtest-port.h"
54 55
third_party/googletest/src/include/gtest/gtest-param-test.h+12−4
@@ -416,14 +416,14 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { · 415 unmodified lines
416 : public test_suite_name { \416 : public test_suite_name { \
417 public: \417 public: \
418 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \418 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
419 virtual void TestBody(); \419 void TestBody() override; \
420 \420 \
421 private: \421 private: \
422 static int AddToRegistry() { \422 static int AddToRegistry() { \
423 ::testing::UnitTest::GetInstance() \423 ::testing::UnitTest::GetInstance() \
424 ->parameterized_test_registry() \424 ->parameterized_test_registry() \
425 .GetTestSuitePatternHolder<test_suite_name>( \425 .GetTestSuitePatternHolder<test_suite_name>( \
426 #test_suite_name, \426 GTEST_STRINGIFY_(test_suite_name), \
427 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \427 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
428 ->AddTestPattern( \428 ->AddTestPattern( \
429 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \429 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
@@ -483,13 +483,21 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { · 53 unmodified lines
483 ::testing::UnitTest::GetInstance() \483 ::testing::UnitTest::GetInstance() \
484 ->parameterized_test_registry() \484 ->parameterized_test_registry() \
485 .GetTestSuitePatternHolder<test_suite_name>( \485 .GetTestSuitePatternHolder<test_suite_name>( \
486 #test_suite_name, \486 GTEST_STRINGIFY_(test_suite_name), \
487 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \487 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
488 ->AddTestSuiteInstantiation( \488 ->AddTestSuiteInstantiation( \
489 #prefix, &gtest_##prefix##test_suite_name##_EvalGenerator_, \489 GTEST_STRINGIFY_(prefix), \
490 &gtest_##prefix##test_suite_name##_EvalGenerator_, \
490 &gtest_##prefix##test_suite_name##_EvalGenerateName_, \491 &gtest_##prefix##test_suite_name##_EvalGenerateName_, \
491 __FILE__, __LINE__)492 __FILE__, __LINE__)
492 493
494
495// Allow Marking a Parameterized test class as not needing to be instantiated.
496#define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T) \
497 namespace gtest_do_not_use_outside_namespace_scope {} \
498 static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \
499 GTEST_STRINGIFY_(T))
500
493// Legacy API is deprecated but still available501// Legacy API is deprecated but still available
494#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_502#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
495#define INSTANTIATE_TEST_CASE_P \503#define INSTANTIATE_TEST_CASE_P \
third_party/googletest/src/include/gtest/gtest-printers.h+15−16
@@ -135,9 +135,9 @@ enum TypeKind { · 134 unmodified lines
135 kProtobuf, // a protobuf type135 kProtobuf, // a protobuf type
136 kConvertibleToInteger, // a type implicitly convertible to BiggestInt136 kConvertibleToInteger, // a type implicitly convertible to BiggestInt
137 // (e.g. a named or unnamed enum type)137 // (e.g. a named or unnamed enum type)
138#if GTEST_HAS_ABSL138#if GTEST_INTERNAL_HAS_STRING_VIEW
139 kConvertibleToStringView, // a type implicitly convertible to139 kConvertibleToStringView, // a type implicitly convertible to
140 // absl::string_view140 // absl::string_view or std::string_view
141#endif141#endif
142 kOtherType // anything else142 kOtherType // anything else
143};143};
@@ -191,12 +191,13 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> { · 47 unmodified lines
191 }191 }
192};192};
193 193
194#if GTEST_HAS_ABSL194#if GTEST_INTERNAL_HAS_STRING_VIEW
195template <typename T>195template <typename T>
196class TypeWithoutFormatter<T, kConvertibleToStringView> {196class TypeWithoutFormatter<T, kConvertibleToStringView> {
197 public:197 public:
198 // Since T has neither operator<< nor PrintTo() but can be implicitly198 // Since T has neither operator<< nor PrintTo() but can be implicitly
199 // converted to absl::string_view, we print it as a absl::string_view.199 // converted to absl::string_view, we print it as a absl::string_view
200 // (or std::string_view).
200 //201 //
201 // Note: the implementation is further below, as it depends on202 // Note: the implementation is further below, as it depends on
202 // internal::PrintTo symbol which is defined later in the file.203 // internal::PrintTo symbol which is defined later in the file.
@@ -237,9 +238,9 @@ template <typename Char, typename CharTraits, typename T> · 34 unmodified lines
237 const T&, internal::BiggestInt>::value238 const T&, internal::BiggestInt>::value
238 ? kConvertibleToInteger239 ? kConvertibleToInteger
239 :240 :
240#if GTEST_HAS_ABSL241#if GTEST_INTERNAL_HAS_STRING_VIEW
241 std::is_convertible<242 std::is_convertible<
242 const T&, absl::string_view>::value243 const T&, internal::StringView>::value
243 ? kConvertibleToStringView244 ? kConvertibleToStringView
244 :245 :
245#endif246#endif
@@ -266,10 +267,8 @@ void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { · 20 unmodified lines
266 // 7.3.4-1 [namespace.udir]. This allows us to fall back onto267 // 7.3.4-1 [namespace.udir]. This allows us to fall back onto
267 // testing::internal2::operator<< in case T doesn't come with a <<268 // testing::internal2::operator<< in case T doesn't come with a <<
268 // operator.269 // operator.
269 //270
270 // We cannot write 'using ::testing::internal2::operator<<;', which271 using ::testing::internal2::operator<<;
271 // gcc 3.3 fails to compile due to a compiler bug.
272 using namespace ::testing::internal2; // NOLINT
273 272
274 // Assuming T is defined in namespace foo, in the next statement,273 // Assuming T is defined in namespace foo, in the next statement,
275 // the compiler will consider all of:274 // the compiler will consider all of:
@@ -603,12 +602,12 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { · 327 unmodified lines
603}602}
604#endif // GTEST_HAS_STD_WSTRING603#endif // GTEST_HAS_STD_WSTRING
605 604
606#if GTEST_HAS_ABSL605#if GTEST_INTERNAL_HAS_STRING_VIEW
607// Overload for absl::string_view.606// Overload for internal::StringView.
608inline void PrintTo(absl::string_view sp, ::std::ostream* os) {607inline void PrintTo(internal::StringView sp, ::std::ostream* os) {
609 PrintTo(::std::string(sp), os);608 PrintTo(::std::string(sp), os);
610}609}
611#endif // GTEST_HAS_ABSL610#endif // GTEST_INTERNAL_HAS_STRING_VIEW
612 611
613inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; }612inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; }
614 613
@@ -901,12 +900,12 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { · 286 unmodified lines
901 900
902} // namespace internal901} // namespace internal
903 902
904#if GTEST_HAS_ABSL903#if GTEST_INTERNAL_HAS_STRING_VIEW
905namespace internal2 {904namespace internal2 {
906template <typename T>905template <typename T>
907void TypeWithoutFormatter<T, kConvertibleToStringView>::PrintValue(906void TypeWithoutFormatter<T, kConvertibleToStringView>::PrintValue(
908 const T& value, ::std::ostream* os) {907 const T& value, ::std::ostream* os) {
909 internal::PrintTo(absl::string_view(value), os);908 internal::PrintTo(internal::StringView(value), os);
910}909}
911} // namespace internal2910} // namespace internal2
912#endif911#endif
third_party/googletest/src/include/gtest/gtest-typed-test.h+31−24
@@ -27,7 +27,6 @@ · 26 unmodified lines
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 29
30
31// GOOGLETEST_CM0001 DO NOT DELETE30// GOOGLETEST_CM0001 DO NOT DELETE
32 31
33#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_32#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
@@ -170,6 +169,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 136 unmodified lines
170 169
171#endif // 0170#endif // 0
172 171
172#include "gtest/internal/gtest-internal.h"
173#include "gtest/internal/gtest-port.h"173#include "gtest/internal/gtest-port.h"
174#include "gtest/internal/gtest-type-util.h"174#include "gtest/internal/gtest-type-util.h"
175 175
@@ -188,24 +188,25 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 12 unmodified lines
188#define GTEST_NAME_GENERATOR_(TestSuiteName) \188#define GTEST_NAME_GENERATOR_(TestSuiteName) \
189 gtest_type_params_##TestSuiteName##_NameGenerator189 gtest_type_params_##TestSuiteName##_NameGenerator
190 190
191#define TYPED_TEST_SUITE(CaseName, Types, ...) \191#define TYPED_TEST_SUITE(CaseName, Types, ...) \
192 typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \192 typedef ::testing::internal::GenerateTypeList<Types>::type \
193 CaseName); \193 GTEST_TYPE_PARAMS_(CaseName); \
194 typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \194 typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
195 GTEST_NAME_GENERATOR_(CaseName)195 GTEST_NAME_GENERATOR_(CaseName)
196 196
197# define TYPED_TEST(CaseName, TestName) \197#define TYPED_TEST(CaseName, TestName) \
198 static_assert(sizeof(GTEST_STRINGIFY_(TestName)) > 1, \
199 "test-name must not be empty"); \
198 template <typename gtest_TypeParam_> \200 template <typename gtest_TypeParam_> \
199 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \201 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
200 : public CaseName<gtest_TypeParam_> { \202 : public CaseName<gtest_TypeParam_> { \
201 private: \203 private: \
202 typedef CaseName<gtest_TypeParam_> TestFixture; \204 typedef CaseName<gtest_TypeParam_> TestFixture; \
203 typedef gtest_TypeParam_ TypeParam; \205 typedef gtest_TypeParam_ TypeParam; \
204 virtual void TestBody(); \206 void TestBody() override; \
205 }; \207 }; \
206 static bool gtest_##CaseName##_##TestName##_registered_ \208 static bool gtest_##CaseName##_##TestName##_registered_ \
207 GTEST_ATTRIBUTE_UNUSED_ = \209 GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \
208 ::testing::internal::TypeParameterizedTest< \
209 CaseName, \210 CaseName, \
210 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \211 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
211 TestName)>, \212 TestName)>, \
@@ -213,7 +214,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 1 unmodified line
213 CaseName)>::Register("", \214 CaseName)>::Register("", \
214 ::testing::internal::CodeLocation( \215 ::testing::internal::CodeLocation( \
215 __FILE__, __LINE__), \216 __FILE__, __LINE__), \
216 #CaseName, #TestName, 0, \217 GTEST_STRINGIFY_(CaseName), \
218 GTEST_STRINGIFY_(TestName), 0, \
217 ::testing::internal::GenerateNames< \219 ::testing::internal::GenerateNames< \
218 GTEST_NAME_GENERATOR_(CaseName), \220 GTEST_NAME_GENERATOR_(CaseName), \
219 GTEST_TYPE_PARAMS_(CaseName)>()); \221 GTEST_TYPE_PARAMS_(CaseName)>()); \
@@ -276,24 +278,26 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 56 unmodified lines
276 private: \278 private: \
277 typedef SuiteName<gtest_TypeParam_> TestFixture; \279 typedef SuiteName<gtest_TypeParam_> TestFixture; \
278 typedef gtest_TypeParam_ TypeParam; \280 typedef gtest_TypeParam_ TypeParam; \
279 virtual void TestBody(); \281 void TestBody() override; \
280 }; \282 }; \
281 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \283 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
282 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \284 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \
283 __FILE__, __LINE__, #SuiteName, #TestName); \285 __FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName), \
286 GTEST_STRINGIFY_(TestName)); \
284 } \287 } \
285 template <typename gtest_TypeParam_> \288 template <typename gtest_TypeParam_> \
286 void GTEST_SUITE_NAMESPACE_( \289 void GTEST_SUITE_NAMESPACE_( \
287 SuiteName)::TestName<gtest_TypeParam_>::TestBody()290 SuiteName)::TestName<gtest_TypeParam_>::TestBody()
288 291
289#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \292// Note: this won't work correctly if the trailing arguments are macros.
290 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \293#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
291 typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \294 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
292 } \295 typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \
293 static const char* const GTEST_REGISTERED_TEST_NAMES_( \296 } \
294 SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \297 static const char* const GTEST_REGISTERED_TEST_NAMES_( \
295 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \298 SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
296 __FILE__, __LINE__, #__VA_ARGS__)299 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \
300 GTEST_STRINGIFY_(SuiteName), __FILE__, __LINE__, #__VA_ARGS__)
297 301
298// Legacy API is deprecated but still available302// Legacy API is deprecated but still available
299#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_303#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
@@ -304,18 +308,21 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 4 unmodified lines
304#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_308#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
305 309
306#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \310#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \
311 static_assert(sizeof(GTEST_STRINGIFY_(Prefix)) > 1, \
312 "test-suit-prefix must not be empty"); \
307 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \313 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
308 ::testing::internal::TypeParameterizedTestSuite< \314 ::testing::internal::TypeParameterizedTestSuite< \
309 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \315 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
310 ::testing::internal::TypeList<Types>::type>:: \316 ::testing::internal::GenerateTypeList<Types>::type>:: \
311 Register(#Prefix, \317 Register(GTEST_STRINGIFY_(Prefix), \
312 ::testing::internal::CodeLocation(__FILE__, __LINE__), \318 ::testing::internal::CodeLocation(__FILE__, __LINE__), \
313 &GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \319 &GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName), \
320 GTEST_STRINGIFY_(SuiteName), \
314 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \321 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \
315 ::testing::internal::GenerateNames< \322 ::testing::internal::GenerateNames< \
316 ::testing::internal::NameGeneratorSelector< \323 ::testing::internal::NameGeneratorSelector< \
317 __VA_ARGS__>::type, \324 __VA_ARGS__>::type, \
318 ::testing::internal::TypeList<Types>::type>())325 ::testing::internal::GenerateTypeList<Types>::type>())
319 326
320// Legacy API is deprecated but still available327// Legacy API is deprecated but still available
321#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_328#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
third_party/googletest/src/include/gtest/gtest.h+15−10
@@ -177,6 +177,7 @@ class FuchsiaDeathTest; · 176 unmodified lines
177class UnitTestImpl* GetUnitTestImpl();177class UnitTestImpl* GetUnitTestImpl();
178void ReportFailureInUnknownLocation(TestPartResult::Type result_type,178void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
179 const std::string& message);179 const std::string& message);
180std::set<std::string>* GetIgnoredParameterizedTestSuites();
180 181
181} // namespace internal182} // namespace internal
182 183
@@ -278,7 +279,11 @@ class GTEST_API_ AssertionResult { · 95 unmodified lines
278 // Used in EXPECT_TRUE/FALSE(assertion_result).279 // Used in EXPECT_TRUE/FALSE(assertion_result).
279 AssertionResult(const AssertionResult& other);280 AssertionResult(const AssertionResult& other);
280 281
281#if defined(_MSC_VER) && _MSC_VER < 1910282// C4800 is a level 3 warning in Visual Studio 2015 and earlier.
283// This warning is not emitted in Visual Studio 2017.
284// This warning is off by default starting in Visual Studio 2019 but can be
285// enabled with command-line options.
286#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)
282 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */)287 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */)
283#endif288#endif
284 289
@@ -298,7 +303,7 @@ class GTEST_API_ AssertionResult { · 13 unmodified lines
298 = nullptr)303 = nullptr)
299 : success_(success) {}304 : success_(success) {}
300 305
301#if defined(_MSC_VER) && _MSC_VER < 1910306#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)
302 GTEST_DISABLE_MSC_WARNINGS_POP_()307 GTEST_DISABLE_MSC_WARNINGS_POP_()
303#endif308#endif
304 309
@@ -412,8 +417,6 @@ class GTEST_API_ Test { · 107 unmodified lines
412 // test in test case Foo. Hence a sub-class can define its own417 // test in test case Foo. Hence a sub-class can define its own
413 // SetUpTestSuite() method to shadow the one defined in the super418 // SetUpTestSuite() method to shadow the one defined in the super
414 // class.419 // class.
415 // Failures that happen during SetUpTestSuite are logged but otherwise
416 // ignored.
417 static void SetUpTestSuite() {}420 static void SetUpTestSuite() {}
418 421
419 // Tears down the stuff shared by all tests in this test suite.422 // Tears down the stuff shared by all tests in this test suite.
@@ -422,8 +425,6 @@ class GTEST_API_ Test { · 2 unmodified lines
422 // test in test case Foo. Hence a sub-class can define its own425 // test in test case Foo. Hence a sub-class can define its own
423 // TearDownTestSuite() method to shadow the one defined in the super426 // TearDownTestSuite() method to shadow the one defined in the super
424 // class.427 // class.
425 // Failures that happen during TearDownTestSuite are logged but otherwise
426 // ignored.
427 static void TearDownTestSuite() {}428 static void TearDownTestSuite() {}
428 429
429 // Legacy API is deprecated but still available430 // Legacy API is deprecated but still available
@@ -889,7 +890,9 @@ class GTEST_API_ TestSuite { · 459 unmodified lines
889 bool Passed() const { return !Failed(); }890 bool Passed() const { return !Failed(); }
890 891
891 // Returns true if and only if the test suite failed.892 // Returns true if and only if the test suite failed.
892 bool Failed() const { return failed_test_count() > 0; }893 bool Failed() const {
894 return failed_test_count() > 0 || ad_hoc_test_result().Failed();
895 }
893 896
894 // Returns the elapsed time, in milliseconds.897 // Returns the elapsed time, in milliseconds.
895 TimeInMillis elapsed_time() const { return elapsed_time_; }898 TimeInMillis elapsed_time() const { return elapsed_time_; }
@@ -1420,6 +1423,7 @@ class GTEST_API_ UnitTest { · 524 unmodified lines
1420 friend class internal::StreamingListenerTest;1423 friend class internal::StreamingListenerTest;
1421 friend class internal::UnitTestRecordPropertyTestHelper;1424 friend class internal::UnitTestRecordPropertyTestHelper;
1422 friend Environment* AddGlobalTestEnvironment(Environment* env);1425 friend Environment* AddGlobalTestEnvironment(Environment* env);
1426 friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites();
1423 friend internal::UnitTestImpl* internal::GetUnitTestImpl();1427 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
1424 friend void internal::ReportFailureInUnknownLocation(1428 friend void internal::ReportFailureInUnknownLocation(
1425 TestPartResult::Type result_type,1429 TestPartResult::Type result_type,
@@ -1889,7 +1893,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { · 463 unmodified lines
1889// Skips test in runtime.1893// Skips test in runtime.
1890// Skipping test aborts current function.1894// Skipping test aborts current function.
1891// Skipped tests are neither successful nor failed.1895// Skipped tests are neither successful nor failed.
1892#define GTEST_SKIP() GTEST_SKIP_("Skipped")1896#define GTEST_SKIP() GTEST_SKIP_("")
1893 1897
1894// ADD_FAILURE unconditionally adds a failure to the current test.1898// ADD_FAILURE unconditionally adds a failure to the current test.
1895// SUCCEED generates a success - it doesn't automatically make the1899// SUCCEED generates a success - it doesn't automatically make the
@@ -2298,8 +2302,7 @@ class GTEST_API_ ScopedTrace { · 402 unmodified lines
2298// to cause a compiler error.2302// to cause a compiler error.
2299template <typename T1, typename T2>2303template <typename T1, typename T2>
2300constexpr bool StaticAssertTypeEq() noexcept {2304constexpr bool StaticAssertTypeEq() noexcept {
2301 static_assert(std::is_same<T1, T2>::value,2305 static_assert(std::is_same<T1, T2>::value, "T1 and T2 are not the same type");
2302 "type1 and type2 are not the same type");
2303 return true;2306 return true;
2304}2307}
2305 2308
@@ -2365,9 +2368,11 @@ constexpr bool StaticAssertTypeEq() noexcept { · 59 unmodified lines
2365// }2368// }
2366//2369//
2367// GOOGLETEST_CM0011 DO NOT DELETE2370// GOOGLETEST_CM0011 DO NOT DELETE
2371#if !GTEST_DONT_DEFINE_TEST
2368#define TEST_F(test_fixture, test_name)\2372#define TEST_F(test_fixture, test_name)\
2369 GTEST_TEST_(test_fixture, test_name, test_fixture, \2373 GTEST_TEST_(test_fixture, test_name, test_fixture, \
2370 ::testing::internal::GetTypeId<test_fixture>())2374 ::testing::internal::GetTypeId<test_fixture>())
2375#endif // !GTEST_DONT_DEFINE_TEST
2371 2376
2372// Returns a path to temporary directory.2377// Returns a path to temporary directory.
2373// Tries to determine an appropriate directory for the platform.2378// Tries to determine an appropriate directory for the platform.
third_party/googletest/src/include/gtest/internal/gtest-internal.h+94−42
@@ -53,6 +53,7 @@ · 52 unmodified lines
53#include <ctype.h>53#include <ctype.h>
54#include <float.h>54#include <float.h>
55#include <string.h>55#include <string.h>
56#include <cstdint>
56#include <iomanip>57#include <iomanip>
57#include <limits>58#include <limits>
58#include <map>59#include <map>
@@ -78,7 +79,16 @@ · 19 unmodified lines
78#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar79#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
79 80
80// Stringifies its argument.81// Stringifies its argument.
81#define GTEST_STRINGIFY_(name) #name82// Work around a bug in visual studio which doesn't accept code like this:
83//
84// #define GTEST_STRINGIFY_(name) #name
85// #define MACRO(a, b, c) ... GTEST_STRINGIFY_(a) ...
86// MACRO(, x, y)
87//
88// Complaining about the argument to GTEST_STRINGIFY_ being empty.
89// This is allowed by the spec.
90#define GTEST_STRINGIFY_HELPER_(name, ...) #name
91#define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, )
82 92
83namespace proto2 { class Message; }93namespace proto2 { class Message; }
84 94
@@ -607,8 +617,9 @@ class GTEST_API_ TypedTestSuitePState { · 522 unmodified lines
607 // Verifies that registered_tests match the test names in617 // Verifies that registered_tests match the test names in
608 // defined_test_names_; returns registered_tests if successful, or618 // defined_test_names_; returns registered_tests if successful, or
609 // aborts the program otherwise.619 // aborts the program otherwise.
610 const char* VerifyRegisteredTestNames(620 const char* VerifyRegisteredTestNames(const char* test_suite_name,
611 const char* file, int line, const char* registered_tests);621 const char* file, int line,
622 const char* registered_tests);
612 623
613 private:624 private:
614 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;625 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;
@@ -662,7 +673,7 @@ struct NameGeneratorSelector { · 47 unmodified lines
662};673};
663 674
664template <typename NameGenerator>675template <typename NameGenerator>
665void GenerateNamesRecursively(Types0, std::vector<std::string>*, int) {}676void GenerateNamesRecursively(internal::None, std::vector<std::string>*, int) {}
666 677
667template <typename NameGenerator, typename Types>678template <typename NameGenerator, typename Types>
668void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) {679void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) {
@@ -729,7 +740,7 @@ class TypeParameterizedTest { · 60 unmodified lines
729 740
730// The base case for the compile time recursion.741// The base case for the compile time recursion.
731template <GTEST_TEMPLATE_ Fixture, class TestSel>742template <GTEST_TEMPLATE_ Fixture, class TestSel>
732class TypeParameterizedTest<Fixture, TestSel, Types0> {743class TypeParameterizedTest<Fixture, TestSel, internal::None> {
733 public:744 public:
734 static bool Register(const char* /*prefix*/, const CodeLocation&,745 static bool Register(const char* /*prefix*/, const CodeLocation&,
735 const char* /*case_name*/, const char* /*test_names*/,746 const char* /*case_name*/, const char* /*test_names*/,
@@ -740,6 +751,11 @@ class TypeParameterizedTest<Fixture, TestSel, Types0> { · 4 unmodified lines
740 }751 }
741};752};
742 753
754GTEST_API_ void RegisterTypeParameterizedTestSuite(const char* test_suite_name,
755 CodeLocation code_location);
756GTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation(
757 const char* case_name);
758
743// TypeParameterizedTestSuite<Fixture, Tests, Types>::Register()759// TypeParameterizedTestSuite<Fixture, Tests, Types>::Register()
744// registers *all combinations* of 'Tests' and 'Types' with Google760// registers *all combinations* of 'Tests' and 'Types' with Google
745// Test. The return value is insignificant - we just need to return761// Test. The return value is insignificant - we just need to return
@@ -752,6 +768,7 @@ class TypeParameterizedTestSuite { · 6 unmodified lines
752 const char* test_names,768 const char* test_names,
753 const std::vector<std::string>& type_names =769 const std::vector<std::string>& type_names =
754 GenerateNames<DefaultNameGenerator, Types>()) {770 GenerateNames<DefaultNameGenerator, Types>()) {
771 RegisterTypeParameterizedTestSuiteInstantiation(case_name);
755 std::string test_name = StripTrailingSpaces(772 std::string test_name = StripTrailingSpaces(
756 GetPrefixUntilComma(test_names));773 GetPrefixUntilComma(test_names));
757 if (!state->TestExists(test_name)) {774 if (!state->TestExists(test_name)) {
@@ -781,7 +798,7 @@ class TypeParameterizedTestSuite { · 23 unmodified lines
781 798
782// The base case for the compile time recursion.799// The base case for the compile time recursion.
783template <GTEST_TEMPLATE_ Fixture, typename Types>800template <GTEST_TEMPLATE_ Fixture, typename Types>
784class TypeParameterizedTestSuite<Fixture, Templates0, Types> {801class TypeParameterizedTestSuite<Fixture, internal::None, Types> {
785 public:802 public:
786 static bool Register(const char* /*prefix*/, const CodeLocation&,803 static bool Register(const char* /*prefix*/, const CodeLocation&,
787 const TypedTestSuitePState* /*state*/,804 const TypedTestSuitePState* /*state*/,
@@ -825,6 +842,16 @@ struct GTEST_API_ ConstCharPtr { · 37 unmodified lines
825 const char* value;842 const char* value;
826};843};
827 844
845// Helper for declaring std::string within 'if' statement
846// in pre C++17 build environment.
847struct TrueWithString {
848 TrueWithString() = default;
849 explicit TrueWithString(const char* str) : value(str) {}
850 explicit TrueWithString(const std::string& str) : value(str) {}
851 explicit operator bool() const { return true; }
852 std::string value;
853};
854
828// A simple Linear Congruential Generator for generating random855// A simple Linear Congruential Generator for generating random
829// numbers with a uniform distribution. Unlike rand() and srand(), it856// numbers with a uniform distribution. Unlike rand() and srand(), it
830// doesn't use global state (and therefore can't interfere with user857// doesn't use global state (and therefore can't interfere with user
@@ -832,18 +859,18 @@ struct GTEST_API_ ConstCharPtr { · 1 unmodified line
832// but it's good enough for our purposes.859// but it's good enough for our purposes.
833class GTEST_API_ Random {860class GTEST_API_ Random {
834 public:861 public:
835 static const UInt32 kMaxRange = 1u << 31;862 static const uint32_t kMaxRange = 1u << 31;
836 863
837 explicit Random(UInt32 seed) : state_(seed) {}864 explicit Random(uint32_t seed) : state_(seed) {}
838 865
839 void Reseed(UInt32 seed) { state_ = seed; }866 void Reseed(uint32_t seed) { state_ = seed; }
840 867
841 // Generates a random number from [0, range). Crashes if 'range' is868 // Generates a random number from [0, range). Crashes if 'range' is
842 // 0 or greater than kMaxRange.869 // 0 or greater than kMaxRange.
843 UInt32 Generate(UInt32 range);870 uint32_t Generate(uint32_t range);
844 871
845 private:872 private:
846 UInt32 state_;873 uint32_t state_;
847 GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);874 GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);
848};875};
849 876
@@ -855,8 +882,7 @@ class GTEST_API_ Random { · 5 unmodified lines
855// true if and only if T is type proto2::Message or a subclass of it.882// true if and only if T is type proto2::Message or a subclass of it.
856template <typename T>883template <typename T>
857struct IsAProtocolMessage884struct IsAProtocolMessage
858 : public bool_constant<885 : public std::is_convertible<const T*, const ::proto2::Message*> {};
859 std::is_convertible<const T*, const ::proto2::Message*>::value> {};
860 886
861// When the compiler sees expression IsContainerTest<C>(0), if C is an887// When the compiler sees expression IsContainerTest<C>(0), if C is an
862// STL-style container class, the first overload of IsContainerTest888// STL-style container class, the first overload of IsContainerTest
@@ -1124,25 +1150,29 @@ struct MakeIndexSequence · 261 unmodified lines
1124template <>1150template <>
1125struct MakeIndexSequence<0> : IndexSequence<> {};1151struct MakeIndexSequence<0> : IndexSequence<> {};
1126 1152
1127// FIXME: This implementation of ElemFromList is O(1) in instantiation depth,1153template <size_t>
1128// but it is O(N^2) in total instantiations. Not sure if this is the best1154struct Ignore {
1129// tradeoff, as it will make it somewhat slow to compile.1155 Ignore(...); // NOLINT
1130template <typename T, size_t, size_t>
1131struct ElemFromListImpl {};
1132
1133template <typename T, size_t I>
1134struct ElemFromListImpl<T, I, I> {
1135 using type = T;
1136};1156};
1137 1157
1138// Get the Nth element from T...1158template <typename>
1139// It uses O(1) instantiation depth.1159struct ElemFromListImpl;
1140template <size_t N, typename I, typename... T>1160template <size_t... I>
1141struct ElemFromList;1161struct ElemFromListImpl<IndexSequence<I...>> {
1162 // We make Ignore a template to solve a problem with MSVC.
1163 // A non-template Ignore would work fine with `decltype(Ignore(I))...`, but
1164 // MSVC doesn't understand how to deal with that pack expansion.
1165 // Use `0 * I` to have a single instantiation of Ignore.
1166 template <typename R>
1167 static R Apply(Ignore<0 * I>..., R (*)(), ...);
1168};
1142 1169
1143template <size_t N, size_t... I, typename... T>1170template <size_t N, typename... T>
1144struct ElemFromList<N, IndexSequence<I...>, T...>1171struct ElemFromList {
1145 : ElemFromListImpl<T, N, I>... {};1172 using type =
1173 decltype(ElemFromListImpl<typename MakeIndexSequence<N>::type>::Apply(
1174 static_cast<T (*)()>(nullptr)...));
1175};
1146 1176
1147template <typename... T>1177template <typename... T>
1148class FlatTuple;1178class FlatTuple;
@@ -1152,9 +1182,7 @@ struct FlatTupleElemBase; · 3 unmodified lines
1152 1182
1153template <typename... T, size_t I>1183template <typename... T, size_t I>
1154struct FlatTupleElemBase<FlatTuple<T...>, I> {1184struct FlatTupleElemBase<FlatTuple<T...>, I> {
1155 using value_type =1185 using value_type = typename ElemFromList<I, T...>::type;
1156 typename ElemFromList<I, typename MakeIndexSequence<sizeof...(T)>::type,
1157 T...>::type;
1158 FlatTupleElemBase() = default;1186 FlatTupleElemBase() = default;
1159 explicit FlatTupleElemBase(value_type t) : value(std::move(t)) {}1187 explicit FlatTupleElemBase(value_type t) : value(std::move(t)) {}
1160 value_type value;1188 value_type value;
@@ -1174,7 +1202,7 @@ struct FlatTupleBase<FlatTuple<T...>, IndexSequence<Idx...>> · 13 unmodified lines
1174 1202
1175// Analog to std::tuple but with different tradeoffs.1203// Analog to std::tuple but with different tradeoffs.
1176// This class minimizes the template instantiation depth, thus allowing more1204// This class minimizes the template instantiation depth, thus allowing more
1177// elements that std::tuple would. std::tuple has been seen to require an1205// elements than std::tuple would. std::tuple has been seen to require an
1178// instantiation depth of more than 10x the number of elements in some1206// instantiation depth of more than 10x the number of elements in some
1179// implementations.1207// implementations.
1180// FlatTuple and ElemFromList are not recursive and have a fixed depth1208// FlatTuple and ElemFromList are not recursive and have a fixed depth
@@ -1185,19 +1213,20 @@ template <typename... T> · 4 unmodified lines
1185class FlatTuple1213class FlatTuple
1186 : private FlatTupleBase<FlatTuple<T...>,1214 : private FlatTupleBase<FlatTuple<T...>,
1187 typename MakeIndexSequence<sizeof...(T)>::type> {1215 typename MakeIndexSequence<sizeof...(T)>::type> {
1188 using Indices = typename FlatTuple::FlatTupleBase::Indices;1216 using Indices = typename FlatTupleBase<
1217 FlatTuple<T...>, typename MakeIndexSequence<sizeof...(T)>::type>::Indices;
1189 1218
1190 public:1219 public:
1191 FlatTuple() = default;1220 FlatTuple() = default;
1192 explicit FlatTuple(T... t) : FlatTuple::FlatTupleBase(std::move(t)...) {}1221 explicit FlatTuple(T... t) : FlatTuple::FlatTupleBase(std::move(t)...) {}
1193 1222
1194 template <size_t I>1223 template <size_t I>
1195 const typename ElemFromList<I, Indices, T...>::type& Get() const {1224 const typename ElemFromList<I, T...>::type& Get() const {
1196 return static_cast<const FlatTupleElemBase<FlatTuple, I>*>(this)->value;1225 return static_cast<const FlatTupleElemBase<FlatTuple, I>*>(this)->value;
1197 }1226 }
1198 1227
1199 template <size_t I>1228 template <size_t I>
1200 typename ElemFromList<I, Indices, T...>::type& Get() {1229 typename ElemFromList<I, T...>::type& Get() {
1201 return static_cast<FlatTupleElemBase<FlatTuple, I>*>(this)->value;1230 return static_cast<FlatTupleElemBase<FlatTuple, I>*>(this)->value;
1202 }1231 }
1203};1232};
@@ -1283,19 +1312,39 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } · 79 unmodified lines
1283 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \1312 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
1284 fail(gtest_msg.value)1313 fail(gtest_msg.value)
1285 1314
1315#if GTEST_HAS_EXCEPTIONS
1316
1317#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
1318 catch (std::exception const& e) { \
1319 gtest_msg.value = ( \
1320 "it throws std::exception-derived exception with description: \"" \
1321 ); \
1322 gtest_msg.value += e.what(); \
1323 gtest_msg.value += "\"."; \
1324 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
1325 }
1326
1327#else // GTEST_HAS_EXCEPTIONS
1328
1329#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()
1330
1331#endif // GTEST_HAS_EXCEPTIONS
1332
1286#define GTEST_TEST_NO_THROW_(statement, fail) \1333#define GTEST_TEST_NO_THROW_(statement, fail) \
1287 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \1334 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1288 if (::testing::internal::AlwaysTrue()) { \1335 if (::testing::internal::TrueWithString gtest_msg{}) { \
1289 try { \1336 try { \
1290 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \1337 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1291 } \1338 } \
1339 GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
1292 catch (...) { \1340 catch (...) { \
1341 gtest_msg.value = "it throws."; \
1293 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \1342 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
1294 } \1343 } \
1295 } else \1344 } else \
1296 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \1345 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
1297 fail("Expected: " #statement " doesn't throw an exception.\n" \1346 fail(("Expected: " #statement " doesn't throw an exception.\n" \
1298 " Actual: it throws.")1347 " Actual: " + gtest_msg.value).c_str())
1299 1348
1300#define GTEST_TEST_ANY_THROW_(statement, fail) \1349#define GTEST_TEST_ANY_THROW_(statement, fail) \
1301 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \1350 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
@@ -1356,12 +1405,15 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } · 54 unmodified lines
1356 : public parent_class { \1405 : public parent_class { \
1357 public: \1406 public: \
1358 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \1407 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
1408 ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default; \
1409 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
1410 test_name)); \
1411 GTEST_DISALLOW_MOVE_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
1412 test_name)); \
1359 \1413 \
1360 private: \1414 private: \
1361 virtual void TestBody(); \1415 void TestBody() override; \
1362 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \1416 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \
1363 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
1364 test_name)); \
1365 }; \1417 }; \
1366 \1418 \
1367 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \1419 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \
third_party/googletest/src/include/gtest/internal/gtest-param-util.h+52−1
@@ -42,12 +42,14 @@ · 41 unmodified lines
42#include <memory>42#include <memory>
43#include <set>43#include <set>
44#include <tuple>44#include <tuple>
45#include <type_traits>
45#include <utility>46#include <utility>
46#include <vector>47#include <vector>
47 48
48#include "gtest/internal/gtest-internal.h"49#include "gtest/internal/gtest-internal.h"
49#include "gtest/internal/gtest-port.h"50#include "gtest/internal/gtest-port.h"
50#include "gtest/gtest-printers.h"51#include "gtest/gtest-printers.h"
52#include "gtest/gtest-test-part.h"
51 53
52namespace testing {54namespace testing {
53// Input to a parameterized test name generator, describing a test parameter.55// Input to a parameterized test name generator, describing a test parameter.
@@ -472,6 +474,17 @@ class ParameterizedTestSuiteInfoBase { · 418 unmodified lines
472 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfoBase);474 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfoBase);
473};475};
474 476
477// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
478//
479// Report a the name of a test_suit as safe to ignore
480// as the side effect of construction of this type.
481struct MarkAsIgnored {
482 explicit MarkAsIgnored(const char* test_suite);
483};
484
485GTEST_API_ void InsertSyntheticTestCase(const std::string& name,
486 CodeLocation location, bool has_test_p);
487
475// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.488// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
476//489//
477// ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P490// ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P
@@ -522,11 +535,13 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 44 unmodified lines
522 return 0; // Return value used only to run this method in namespace scope.535 return 0; // Return value used only to run this method in namespace scope.
523 }536 }
524 // UnitTest class invokes this method to register tests in this test suite537 // UnitTest class invokes this method to register tests in this test suite
525 // test suites right before running tests in RUN_ALL_TESTS macro.538 // right before running tests in RUN_ALL_TESTS macro.
526 // This method should not be called more than once on any single539 // This method should not be called more than once on any single
527 // instance of a ParameterizedTestSuiteInfoBase derived class.540 // instance of a ParameterizedTestSuiteInfoBase derived class.
528 // UnitTest has a guard to prevent from calling this method more than once.541 // UnitTest has a guard to prevent from calling this method more than once.
529 void RegisterTests() override {542 void RegisterTests() override {
543 bool generated_instantiations = false;
544
530 for (typename TestInfoContainer::iterator test_it = tests_.begin();545 for (typename TestInfoContainer::iterator test_it = tests_.begin();
531 test_it != tests_.end(); ++test_it) {546 test_it != tests_.end(); ++test_it) {
532 std::shared_ptr<TestInfo> test_info = *test_it;547 std::shared_ptr<TestInfo> test_info = *test_it;
@@ -549,6 +564,8 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 16 unmodified lines
549 for (typename ParamGenerator<ParamType>::iterator param_it =564 for (typename ParamGenerator<ParamType>::iterator param_it =
550 generator.begin();565 generator.begin();
551 param_it != generator.end(); ++param_it, ++i) {566 param_it != generator.end(); ++param_it, ++i) {
567 generated_instantiations = true;
568
552 Message test_name_stream;569 Message test_name_stream;
553 570
554 std::string param_name = name_func(571 std::string param_name = name_func(
@@ -580,6 +597,12 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 25 unmodified lines
580 } // for param_it597 } // for param_it
581 } // for gen_it598 } // for gen_it
582 } // for test_it599 } // for test_it
600
601 if (!generated_instantiations) {
602 // There are no generaotrs, or they all generate nothing ...
603 InsertSyntheticTestCase(GetTestSuiteName(), code_location_,
604 !tests_.empty());
605 }
583 } // RegisterTests606 } // RegisterTests
584 607
585 private:608 private:
@@ -717,6 +740,34 @@ class ParameterizedTestSuiteRegistry { · 131 unmodified lines
717 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteRegistry);740 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteRegistry);
718};741};
719 742
743// Keep track of what type-parameterized test suite are defined and
744// where as well as which are intatiated. This allows susequently
745// identifying suits that are defined but never used.
746class TypeParameterizedTestSuiteRegistry {
747 public:
748 // Add a suite definition
749 void RegisterTestSuite(const char* test_suite_name,
750 CodeLocation code_location);
751
752 // Add an instantiation of a suit.
753 void RegisterInstantiation(const char* test_suite_name);
754
755 // For each suit repored as defined but not reported as instantiation,
756 // emit a test that reports that fact (configurably, as an error).
757 void CheckForInstantiations();
758
759 private:
760 struct TypeParameterizedTestSuiteInfo {
761 explicit TypeParameterizedTestSuiteInfo(CodeLocation c)
762 : code_location(c), instantiated(false) {}
763
764 CodeLocation code_location;
765 bool instantiated;
766 };
767
768 std::map<std::string, TypeParameterizedTestSuiteInfo> suites_;
769};
770
720} // namespace internal771} // namespace internal
721 772
722// Forward declarations of ValuesIn(), which is implemented in773// Forward declarations of ValuesIn(), which is implemented in
third_party/googletest/src/include/gtest/internal/gtest-port-arch.h+4−0
@@ -102,6 +102,10 @@ · 101 unmodified lines
102# define GTEST_OS_QNX 1102# define GTEST_OS_QNX 1
103#elif defined(__HAIKU__)103#elif defined(__HAIKU__)
104#define GTEST_OS_HAIKU 1104#define GTEST_OS_HAIKU 1
105#elif defined ESP8266
106#define GTEST_OS_ESP8266 1
107#elif defined ESP32
108#define GTEST_OS_ESP32 1
105#endif // __CYGWIN__109#endif // __CYGWIN__
106 110
107#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_111#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_
third_party/googletest/src/include/gtest/internal/gtest-port.h+98−75
@@ -190,13 +190,18 @@ · 189 unmodified lines
190// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.190// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
191// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a191// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a
192// variable don't have to be used.192// variable don't have to be used.
193// GTEST_DISALLOW_ASSIGN_ - disables operator=.193// GTEST_DISALLOW_ASSIGN_ - disables copy operator=.
194// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.194// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.
195// GTEST_DISALLOW_MOVE_ASSIGN_ - disables move operator=.
196// GTEST_DISALLOW_MOVE_AND_ASSIGN_ - disables move ctor and operator=.
195// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used.197// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used.
196// GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is198// GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is
197// suppressed (constant conditional).199// suppressed (constant conditional).
198// GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127200// GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127
199// is suppressed.201// is suppressed.
202// GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or
203// Matcher<absl::string_view>
204// specializations.
200//205//
201// Synchronization:206// Synchronization:
202// Mutex, MutexLock, ThreadLocal, GetThreadCount()207// Mutex, MutexLock, ThreadLocal, GetThreadCount()
@@ -223,8 +228,7 @@ · 20 unmodified lines
223//228//
224// Integer types:229// Integer types:
225// TypeWithSize - maps an integer to a int type.230// TypeWithSize - maps an integer to a int type.
226// Int32, UInt32, Int64, UInt64, TimeInMillis231// TimeInMillis - integers of known sizes.
227// - integers of known sizes.
228// BiggestInt - the biggest signed integer type.232// BiggestInt - the biggest signed integer type.
229//233//
230// Command-line utilities:234// Command-line utilities:
@@ -235,7 +239,7 @@ · 4 unmodified lines
235// Environment variable utilities:239// Environment variable utilities:
236// GetEnv() - gets the value of an environment variable.240// GetEnv() - gets the value of an environment variable.
237// BoolFromGTestEnv() - parses a bool environment variable.241// BoolFromGTestEnv() - parses a bool environment variable.
238// Int32FromGTestEnv() - parses an Int32 environment variable.242// Int32FromGTestEnv() - parses an int32_t environment variable.
239// StringFromGTestEnv() - parses a string environment variable.243// StringFromGTestEnv() - parses a string environment variable.
240//244//
241// Deprecation warnings:245// Deprecation warnings:
@@ -248,7 +252,8 @@ · 6 unmodified lines
248#include <stdio.h>252#include <stdio.h>
249#include <stdlib.h>253#include <stdlib.h>
250#include <string.h>254#include <string.h>
251#include <memory>255#include <cstdint>
256#include <limits>
252#include <type_traits>257#include <type_traits>
253 258
254#ifndef _WIN32_WCE259#ifndef _WIN32_WCE
@@ -261,16 +266,14 @@ · 6 unmodified lines
261# include <TargetConditionals.h>266# include <TargetConditionals.h>
262#endif267#endif
263 268
264#include <algorithm> // NOLINT269#include <iostream> // NOLINT
265#include <iostream> // NOLINT270#include <memory>
266#include <sstream> // NOLINT271#include <string> // NOLINT
267#include <string> // NOLINT
268#include <tuple>272#include <tuple>
269#include <utility>
270#include <vector> // NOLINT273#include <vector> // NOLINT
271 274
272#include "gtest/internal/gtest-port-arch.h"
273#include "gtest/internal/custom/gtest-port.h"275#include "gtest/internal/custom/gtest-port.h"
276#include "gtest/internal/gtest-port-arch.h"
274 277
275#if !defined(GTEST_DEV_EMAIL_)278#if !defined(GTEST_DEV_EMAIL_)
276# define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"279# define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
@@ -441,15 +444,6 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 164 unmodified lines
441# endif // defined(_MSC_VER) || defined(__BORLANDC__)444# endif // defined(_MSC_VER) || defined(__BORLANDC__)
442#endif // GTEST_HAS_EXCEPTIONS445#endif // GTEST_HAS_EXCEPTIONS
443 446
444#if !defined(GTEST_HAS_STD_STRING)
445// Even though we don't use this macro any longer, we keep it in case
446// some clients still depend on it.
447# define GTEST_HAS_STD_STRING 1
448#elif !GTEST_HAS_STD_STRING
449// The user told us that ::std::string isn't available.
450# error "::std::string isn't available."
451#endif // !defined(GTEST_HAS_STD_STRING)
452
453#ifndef GTEST_HAS_STD_WSTRING447#ifndef GTEST_HAS_STD_WSTRING
454// The user didn't tell us whether ::std::wstring is available, so we need448// The user didn't tell us whether ::std::wstring is available, so we need
455// to figure it out.449// to figure it out.
@@ -458,7 +452,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 2 unmodified lines
458// no support for it at least as recent as Froyo (2.2).452// no support for it at least as recent as Froyo (2.2).
459#define GTEST_HAS_STD_WSTRING \453#define GTEST_HAS_STD_WSTRING \
460 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \454 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
461 GTEST_OS_HAIKU))455 GTEST_OS_HAIKU || GTEST_OS_ESP32 || GTEST_OS_ESP8266))
462 456
463#endif // GTEST_HAS_STD_WSTRING457#endif // GTEST_HAS_STD_WSTRING
464 458
@@ -582,7 +576,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 117 unmodified lines
582#ifndef GTEST_HAS_STREAM_REDIRECTION576#ifndef GTEST_HAS_STREAM_REDIRECTION
583// By default, we assume that stream redirection is supported on all577// By default, we assume that stream redirection is supported on all
584// platforms except known mobile ones.578// platforms except known mobile ones.
585# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT579#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
580 GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266
586# define GTEST_HAS_STREAM_REDIRECTION 0581# define GTEST_HAS_STREAM_REDIRECTION 0
587# else582# else
588# define GTEST_HAS_STREAM_REDIRECTION 1583# define GTEST_HAS_STREAM_REDIRECTION 1
@@ -676,10 +671,10 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 87 unmodified lines
676#endif671#endif
677 672
678 673
679// A macro to disallow operator=674// A macro to disallow copy operator=
680// This should be used in the private: declarations for a class.675// This should be used in the private: declarations for a class.
681#define GTEST_DISALLOW_ASSIGN_(type) \676#define GTEST_DISALLOW_ASSIGN_(type) \
682 void operator=(type const &) = delete677 type& operator=(type const &) = delete
683 678
684// A macro to disallow copy constructor and operator=679// A macro to disallow copy constructor and operator=
685// This should be used in the private: declarations for a class.680// This should be used in the private: declarations for a class.
@@ -687,6 +682,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 1 unmodified line
687 type(type const &) = delete; \682 type(type const &) = delete; \
688 GTEST_DISALLOW_ASSIGN_(type)683 GTEST_DISALLOW_ASSIGN_(type)
689 684
685// A macro to disallow move operator=
686// This should be used in the private: declarations for a class.
687#define GTEST_DISALLOW_MOVE_ASSIGN_(type) \
688 type& operator=(type &&) noexcept = delete
689
690// A macro to disallow move constructor and operator=
691// This should be used in the private: declarations for a class.
692#define GTEST_DISALLOW_MOVE_AND_ASSIGN_(type) \
693 type(type &&) noexcept = delete; \
694 GTEST_DISALLOW_MOVE_ASSIGN_(type)
695
690// Tell the compiler to warn about unused return values for functions declared696// Tell the compiler to warn about unused return values for functions declared
691// with this macro. The macro should be used on function declarations697// with this macro. The macro should be used on function declarations
692// following the argument list:698// following the argument list:
@@ -856,9 +862,6 @@ class Secret; · 163 unmodified lines
856// expression is false, compiler will issue an error containing this identifier.862// expression is false, compiler will issue an error containing this identifier.
857#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)863#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)
858 864
859// Evaluates to the number of elements in 'array'.
860#define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))
861
862// A helper for suppressing warnings on constant condition. It just865// A helper for suppressing warnings on constant condition. It just
863// returns 'condition'.866// returns 'condition'.
864GTEST_API_ bool IsTrue(bool condition);867GTEST_API_ bool IsTrue(bool condition);
@@ -1599,7 +1602,7 @@ class ThreadLocal : public ThreadLocalBase { · 734 unmodified lines
1599 class DefaultValueHolderFactory : public ValueHolderFactory {1602 class DefaultValueHolderFactory : public ValueHolderFactory {
1600 public:1603 public:
1601 DefaultValueHolderFactory() {}1604 DefaultValueHolderFactory() {}
1602 virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }1605 ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }
1603 1606
1604 private:1607 private:
1605 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);1608 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
@@ -1608,7 +1611,7 @@ class ThreadLocal : public ThreadLocalBase { · 2 unmodified lines
1608 class InstanceValueHolderFactory : public ValueHolderFactory {1611 class InstanceValueHolderFactory : public ValueHolderFactory {
1609 public:1612 public:
1610 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}1613 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}
1611 virtual ValueHolder* MakeNewHolder() const {1614 ValueHolder* MakeNewHolder() const override {
1612 return new ValueHolder(value_);1615 return new ValueHolder(value_);
1613 }1616 }
1614 1617
@@ -1808,7 +1811,7 @@ class GTEST_API_ ThreadLocal { · 193 unmodified lines
1808 class DefaultValueHolderFactory : public ValueHolderFactory {1811 class DefaultValueHolderFactory : public ValueHolderFactory {
1809 public:1812 public:
1810 DefaultValueHolderFactory() {}1813 DefaultValueHolderFactory() {}
1811 virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }1814 ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }
1812 1815
1813 private:1816 private:
1814 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);1817 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
@@ -1817,7 +1820,7 @@ class GTEST_API_ ThreadLocal { · 2 unmodified lines
1817 class InstanceValueHolderFactory : public ValueHolderFactory {1820 class InstanceValueHolderFactory : public ValueHolderFactory {
1818 public:1821 public:
1819 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}1822 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}
1820 virtual ValueHolder* MakeNewHolder() const {1823 ValueHolder* MakeNewHolder() const override {
1821 return new ValueHolder(value_);1824 return new ValueHolder(value_);
1822 }1825 }
1823 1826
@@ -1887,18 +1890,12 @@ class GTEST_API_ ThreadLocal { · 63 unmodified lines
1887// we cannot detect it.1890// we cannot detect it.
1888GTEST_API_ size_t GetThreadCount();1891GTEST_API_ size_t GetThreadCount();
1889 1892
1890template <bool B>
1891using bool_constant = std::integral_constant<bool, B>;
1892
1893#if GTEST_OS_WINDOWS1893#if GTEST_OS_WINDOWS
1894# define GTEST_PATH_SEP_ "\\"1894# define GTEST_PATH_SEP_ "\\"
1895# define GTEST_HAS_ALT_PATH_SEP_ 11895# define GTEST_HAS_ALT_PATH_SEP_ 1
1896// The biggest signed integer type the compiler supports.
1897typedef __int64 BiggestInt;
1898#else1896#else
1899# define GTEST_PATH_SEP_ "/"1897# define GTEST_PATH_SEP_ "/"
1900# define GTEST_HAS_ALT_PATH_SEP_ 01898# define GTEST_HAS_ALT_PATH_SEP_ 0
1901typedef long long BiggestInt; // NOLINT
1902#endif // GTEST_OS_WINDOWS1899#endif // GTEST_OS_WINDOWS
1903 1900
1904// Utilities for char.1901// Utilities for char.
@@ -1993,6 +1990,22 @@ inline bool IsDir(const StatStruct& st) { · 88 unmodified lines
1993}1990}
1994# endif // GTEST_OS_WINDOWS_MOBILE1991# endif // GTEST_OS_WINDOWS_MOBILE
1995 1992
1993#elif GTEST_OS_ESP8266
1994typedef struct stat StatStruct;
1995
1996inline int FileNo(FILE* file) { return fileno(file); }
1997inline int IsATTY(int fd) { return isatty(fd); }
1998inline int Stat(const char* path, StatStruct* buf) {
1999 // stat function not implemented on ESP8266
2000 return 0;
2001}
2002inline int StrCaseCmp(const char* s1, const char* s2) {
2003 return strcasecmp(s1, s2);
2004}
2005inline char* StrDup(const char* src) { return strdup(src); }
2006inline int RmDir(const char* dir) { return rmdir(dir); }
2007inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }
2008
1996#else2009#else
1997 2010
1998typedef struct stat StatStruct;2011typedef struct stat StatStruct;
@@ -2013,10 +2026,6 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } · 14 unmodified lines
2013 2026
2014GTEST_DISABLE_MSC_DEPRECATED_PUSH_()2027GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
2015 2028
2016inline const char* StrNCpy(char* dest, const char* src, size_t n) {
2017 return strncpy(dest, src, n);
2018}
2019
2020// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and2029// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and
2021// StrError() aren't needed on Windows CE at this time and thus not2030// StrError() aren't needed on Windows CE at this time and thus not
2022// defined there.2031// defined there.
@@ -2045,8 +2054,9 @@ inline int Close(int fd) { return close(fd); } · 22 unmodified lines
2045inline const char* StrError(int errnum) { return strerror(errnum); }2054inline const char* StrError(int errnum) { return strerror(errnum); }
2046#endif2055#endif
2047inline const char* GetEnv(const char* name) {2056inline const char* GetEnv(const char* name) {
2048#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT2057#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
2049 // We are on Windows CE, which has no environment variables.2058 GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266
2059 // We are on an embedded platform, which has no environment variables.
2050 static_cast<void>(name); // To prevent 'unused argument' warning.2060 static_cast<void>(name); // To prevent 'unused argument' warning.
2051 return nullptr;2061 return nullptr;
2052#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)2062#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
@@ -2088,15 +2098,13 @@ GTEST_DISABLE_MSC_DEPRECATED_POP_() · 35 unmodified lines
2088# define GTEST_SNPRINTF_ snprintf2098# define GTEST_SNPRINTF_ snprintf
2089#endif2099#endif
2090 2100
2091// The maximum number a BiggestInt can represent. This definition2101// The biggest signed integer type the compiler supports.
2092// works no matter BiggestInt is represented in one's complement or
2093// two's complement.
2094//2102//
2095// We cannot rely on numeric_limits in STL, as __int64 and long long2103// long long is guaranteed to be at least 64-bits in C++11.
2096// are not part of standard C++ and numeric_limits doesn't need to be2104using BiggestInt = long long; // NOLINT
2097// defined for them.2105
2098const BiggestInt kMaxBiggestInt =2106// The maximum number a BiggestInt can represent.
2099 ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1));2107constexpr BiggestInt kMaxBiggestInt = (std::numeric_limits<BiggestInt>::max)();
2100 2108
2101// This template class serves as a compile-time function from size to2109// This template class serves as a compile-time function from size to
2102// type. It maps a size in bytes to a primitive type with that2110// type. It maps a size in bytes to a primitive type with that
@@ -2121,40 +2129,27 @@ class TypeWithSize { · 18 unmodified lines
2121 public:2129 public:
2122 // This prevents the user from using TypeWithSize<N> with incorrect2130 // This prevents the user from using TypeWithSize<N> with incorrect
2123 // values of N.2131 // values of N.
2124 typedef void UInt;2132 using UInt = void;
2125};2133};
2126 2134
2127// The specialization for size 4.2135// The specialization for size 4.
2128template <>2136template <>
2129class TypeWithSize<4> {2137class TypeWithSize<4> {
2130 public:2138 public:
2131 // unsigned int has size 4 in both gcc and MSVC.2139 using Int = std::int32_t;
2132 //2140 using UInt = std::uint32_t;
2133 // As base/basictypes.h doesn't compile on Windows, we cannot use
2134 // uint32, uint64, and etc here.
2135 typedef int Int;
2136 typedef unsigned int UInt;
2137};2141};
2138 2142
2139// The specialization for size 8.2143// The specialization for size 8.
2140template <>2144template <>
2141class TypeWithSize<8> {2145class TypeWithSize<8> {
2142 public:2146 public:
2143#if GTEST_OS_WINDOWS2147 using Int = std::int64_t;
2144 typedef __int64 Int;2148 using UInt = std::uint64_t;
2145 typedef unsigned __int64 UInt;
2146#else
2147 typedef long long Int; // NOLINT
2148 typedef unsigned long long UInt; // NOLINT
2149#endif // GTEST_OS_WINDOWS
2150};2149};
2151 2150
2152// Integer types of known sizes.2151// Integer types of known sizes.
2153typedef TypeWithSize<4>::Int Int32;2152using TimeInMillis = int64_t; // Represents time in milliseconds.
2154typedef TypeWithSize<4>::UInt UInt32;
2155typedef TypeWithSize<8>::Int Int64;
2156typedef TypeWithSize<8>::UInt UInt64;
2157typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
2158 2153
2159// Utilities for command line flags and environment variables.2154// Utilities for command line flags and environment variables.
2160 2155
@@ -2173,7 +2168,7 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 12 unmodified lines
2173// Macros for declaring flags.2168// Macros for declaring flags.
2174# define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)2169# define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
2175# define GTEST_DECLARE_int32_(name) \2170# define GTEST_DECLARE_int32_(name) \
2176 GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)2171 GTEST_API_ extern std::int32_t GTEST_FLAG(name)
2177# define GTEST_DECLARE_string_(name) \2172# define GTEST_DECLARE_string_(name) \
2178 GTEST_API_ extern ::std::string GTEST_FLAG(name)2173 GTEST_API_ extern ::std::string GTEST_FLAG(name)
2179 2174
@@ -2181,7 +2176,7 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 1 unmodified line
2181# define GTEST_DEFINE_bool_(name, default_val, doc) \2176# define GTEST_DEFINE_bool_(name, default_val, doc) \
2182 GTEST_API_ bool GTEST_FLAG(name) = (default_val)2177 GTEST_API_ bool GTEST_FLAG(name) = (default_val)
2183# define GTEST_DEFINE_int32_(name, default_val, doc) \2178# define GTEST_DEFINE_int32_(name, default_val, doc) \
2184 GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)2179 GTEST_API_ std::int32_t GTEST_FLAG(name) = (default_val)
2185# define GTEST_DEFINE_string_(name, default_val, doc) \2180# define GTEST_DEFINE_string_(name, default_val, doc) \
2186 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)2181 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)
2187 2182
@@ -2196,12 +2191,12 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 8 unmodified lines
2196// Parses 'str' for a 32-bit signed integer. If successful, writes the result2191// Parses 'str' for a 32-bit signed integer. If successful, writes the result
2197// to *value and returns true; otherwise leaves *value unchanged and returns2192// to *value and returns true; otherwise leaves *value unchanged and returns
2198// false.2193// false.
2199bool ParseInt32(const Message& src_text, const char* str, Int32* value);2194bool ParseInt32(const Message& src_text, const char* str, int32_t* value);
2200 2195
2201// Parses a bool/Int32/string from the environment variable2196// Parses a bool/int32_t/string from the environment variable
2202// corresponding to the given Google Test flag.2197// corresponding to the given Google Test flag.
2203bool BoolFromGTestEnv(const char* flag, bool default_val);2198bool BoolFromGTestEnv(const char* flag, bool default_val);
2204GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val);2199GTEST_API_ int32_t Int32FromGTestEnv(const char* flag, int32_t default_val);
2205std::string OutputFlagAlsoCheckEnvVar();2200std::string OutputFlagAlsoCheckEnvVar();
2206const char* StringFromGTestEnv(const char* flag, const char* default_val);2201const char* StringFromGTestEnv(const char* flag, const char* default_val);
2207 2202
@@ -2228,4 +2223,32 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val); · 20 unmodified lines
2228 2223
2229#endif // !defined(GTEST_INTERNAL_DEPRECATED)2224#endif // !defined(GTEST_INTERNAL_DEPRECATED)
2230 2225
2226#if GTEST_HAS_ABSL
2227// Always use absl::string_view for Matcher<> specializations if googletest
2228// is built with absl support.
2229# define GTEST_INTERNAL_HAS_STRING_VIEW 1
2230#include "absl/strings/string_view.h"
2231namespace testing {
2232namespace internal {
2233using StringView = ::absl::string_view;
2234} // namespace internal
2235} // namespace testing
2236#else
2237# ifdef __has_include
2238# if __has_include(<string_view>) && __cplusplus >= 201703L
2239// Otherwise for C++17 and higher use std::string_view for Matcher<>
2240// specializations.
2241# define GTEST_INTERNAL_HAS_STRING_VIEW 1
2242#include <string_view>
2243namespace testing {
2244namespace internal {
2245using StringView = ::std::string_view;
2246} // namespace internal
2247} // namespace testing
2248// The case where absl is configured NOT to alias std::string_view is not
2249// supported.
2250# endif // __has_include(<string_view>) && __cplusplus >= 201703L
2251# endif // __has_include
2252#endif // GTEST_HAS_ABSL
2253
2231#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_2254#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
third_party/googletest/src/include/gtest/internal/gtest-string.h+2−1
@@ -47,6 +47,7 @@ · 46 unmodified lines
47#endif47#endif
48 48
49#include <string.h>49#include <string.h>
50#include <cstdint>
50#include <string>51#include <string>
51 52
52#include "gtest/internal/gtest-port.h"53#include "gtest/internal/gtest-port.h"
@@ -152,7 +153,7 @@ class GTEST_API_ String { · 99 unmodified lines
152 static std::string FormatHexInt(int value);153 static std::string FormatHexInt(int value);
153 154
154 // Formats an int value as "%X".155 // Formats an int value as "%X".
155 static std::string FormatHexUInt32(UInt32 value);156 static std::string FormatHexUInt32(uint32_t value);
156 157
157 // Formats a byte as "%02X".158 // Formats a byte as "%02X".
158 static std::string FormatByte(unsigned char value);159 static std::string FormatByte(unsigned char value);
third_party/googletest/src/include/gtest/internal/gtest-type-util.h+41−3193
@@ -1,7 +1,3 @@
1// This file was GENERATED by command:
2// pump.py gtest-type-util.h.pump
3// DO NOT EDIT BY HAND!!!
4
5// Copyright 2008 Google Inc.1// Copyright 2008 Google Inc.
6// All Rights Reserved.2// All Rights Reserved.
7//3//
@@ -32,12 +28,7 @@ · 24 unmodified lines
32// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 29
34// Type utilities needed for implementing typed and type-parameterized30// Type utilities needed for implementing typed and type-parameterized
35// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!31// tests.
36//
37// Currently we support at most 50 types in a list, and at most 50
38// type-parameterized tests in one type-parameterized test suite.
39// Please contact googletestframework@googlegroups.com if you need
40// more.
41 32
42// GOOGLETEST_CM0001 DO NOT DELETE33// GOOGLETEST_CM0001 DO NOT DELETE
43 34
@@ -105,1524 +96,9 @@ std::string GetTypeName() { · 61 unmodified lines
105 96
106#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P97#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
107 98
108// A unique type used as the default value for the arguments of class99// A unique type indicating an empty node
109// template Types. This allows us to simulate variadic templates
110// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
111// support directly.
112struct None {};100struct None {};
113 101
114// The following family of struct and struct templates are used to
115// represent type lists. In particular, TypesN<T1, T2, ..., TN>
116// represents a type list with N types (T1, T2, ..., and TN) in it.
117// Except for Types0, every struct in the family has two member types:
118// Head for the first type in the list, and Tail for the rest of the
119// list.
120
121// The empty type list.
122struct Types0 {};
123
124// Type lists of length 1, 2, 3, and so on.
125
126template <typename T1>
127struct Types1 {
128 typedef T1 Head;
129 typedef Types0 Tail;
130};
131template <typename T1, typename T2>
132struct Types2 {
133 typedef T1 Head;
134 typedef Types1<T2> Tail;
135};
136
137template <typename T1, typename T2, typename T3>
138struct Types3 {
139 typedef T1 Head;
140 typedef Types2<T2, T3> Tail;
141};
142
143template <typename T1, typename T2, typename T3, typename T4>
144struct Types4 {
145 typedef T1 Head;
146 typedef Types3<T2, T3, T4> Tail;
147};
148
149template <typename T1, typename T2, typename T3, typename T4, typename T5>
150struct Types5 {
151 typedef T1 Head;
152 typedef Types4<T2, T3, T4, T5> Tail;
153};
154
155template <typename T1, typename T2, typename T3, typename T4, typename T5,
156 typename T6>
157struct Types6 {
158 typedef T1 Head;
159 typedef Types5<T2, T3, T4, T5, T6> Tail;
160};
161
162template <typename T1, typename T2, typename T3, typename T4, typename T5,
163 typename T6, typename T7>
164struct Types7 {
165 typedef T1 Head;
166 typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
167};
168
169template <typename T1, typename T2, typename T3, typename T4, typename T5,
170 typename T6, typename T7, typename T8>
171struct Types8 {
172 typedef T1 Head;
173 typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
174};
175
176template <typename T1, typename T2, typename T3, typename T4, typename T5,
177 typename T6, typename T7, typename T8, typename T9>
178struct Types9 {
179 typedef T1 Head;
180 typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
181};
182
183template <typename T1, typename T2, typename T3, typename T4, typename T5,
184 typename T6, typename T7, typename T8, typename T9, typename T10>
185struct Types10 {
186 typedef T1 Head;
187 typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
188};
189
190template <typename T1, typename T2, typename T3, typename T4, typename T5,
191 typename T6, typename T7, typename T8, typename T9, typename T10,
192 typename T11>
193struct Types11 {
194 typedef T1 Head;
195 typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
196};
197
198template <typename T1, typename T2, typename T3, typename T4, typename T5,
199 typename T6, typename T7, typename T8, typename T9, typename T10,
200 typename T11, typename T12>
201struct Types12 {
202 typedef T1 Head;
203 typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
204};
205
206template <typename T1, typename T2, typename T3, typename T4, typename T5,
207 typename T6, typename T7, typename T8, typename T9, typename T10,
208 typename T11, typename T12, typename T13>
209struct Types13 {
210 typedef T1 Head;
211 typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
212};
213
214template <typename T1, typename T2, typename T3, typename T4, typename T5,
215 typename T6, typename T7, typename T8, typename T9, typename T10,
216 typename T11, typename T12, typename T13, typename T14>
217struct Types14 {
218 typedef T1 Head;
219 typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
220};
221
222template <typename T1, typename T2, typename T3, typename T4, typename T5,
223 typename T6, typename T7, typename T8, typename T9, typename T10,
224 typename T11, typename T12, typename T13, typename T14, typename T15>
225struct Types15 {
226 typedef T1 Head;
227 typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
228 T15> Tail;
229};
230
231template <typename T1, typename T2, typename T3, typename T4, typename T5,
232 typename T6, typename T7, typename T8, typename T9, typename T10,
233 typename T11, typename T12, typename T13, typename T14, typename T15,
234 typename T16>
235struct Types16 {
236 typedef T1 Head;
237 typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
238 T16> Tail;
239};
240
241template <typename T1, typename T2, typename T3, typename T4, typename T5,
242 typename T6, typename T7, typename T8, typename T9, typename T10,
243 typename T11, typename T12, typename T13, typename T14, typename T15,
244 typename T16, typename T17>
245struct Types17 {
246 typedef T1 Head;
247 typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
248 T16, T17> Tail;
249};
250
251template <typename T1, typename T2, typename T3, typename T4, typename T5,
252 typename T6, typename T7, typename T8, typename T9, typename T10,
253 typename T11, typename T12, typename T13, typename T14, typename T15,
254 typename T16, typename T17, typename T18>
255struct Types18 {
256 typedef T1 Head;
257 typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
258 T16, T17, T18> Tail;
259};
260
261template <typename T1, typename T2, typename T3, typename T4, typename T5,
262 typename T6, typename T7, typename T8, typename T9, typename T10,
263 typename T11, typename T12, typename T13, typename T14, typename T15,
264 typename T16, typename T17, typename T18, typename T19>
265struct Types19 {
266 typedef T1 Head;
267 typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
268 T16, T17, T18, T19> Tail;
269};
270
271template <typename T1, typename T2, typename T3, typename T4, typename T5,
272 typename T6, typename T7, typename T8, typename T9, typename T10,
273 typename T11, typename T12, typename T13, typename T14, typename T15,
274 typename T16, typename T17, typename T18, typename T19, typename T20>
275struct Types20 {
276 typedef T1 Head;
277 typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
278 T16, T17, T18, T19, T20> Tail;
279};
280
281template <typename T1, typename T2, typename T3, typename T4, typename T5,
282 typename T6, typename T7, typename T8, typename T9, typename T10,
283 typename T11, typename T12, typename T13, typename T14, typename T15,
284 typename T16, typename T17, typename T18, typename T19, typename T20,
285 typename T21>
286struct Types21 {
287 typedef T1 Head;
288 typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
289 T16, T17, T18, T19, T20, T21> Tail;
290};
291
292template <typename T1, typename T2, typename T3, typename T4, typename T5,
293 typename T6, typename T7, typename T8, typename T9, typename T10,
294 typename T11, typename T12, typename T13, typename T14, typename T15,
295 typename T16, typename T17, typename T18, typename T19, typename T20,
296 typename T21, typename T22>
297struct Types22 {
298 typedef T1 Head;
299 typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
300 T16, T17, T18, T19, T20, T21, T22> Tail;
301};
302
303template <typename T1, typename T2, typename T3, typename T4, typename T5,
304 typename T6, typename T7, typename T8, typename T9, typename T10,
305 typename T11, typename T12, typename T13, typename T14, typename T15,
306 typename T16, typename T17, typename T18, typename T19, typename T20,
307 typename T21, typename T22, typename T23>
308struct Types23 {
309 typedef T1 Head;
310 typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
311 T16, T17, T18, T19, T20, T21, T22, T23> Tail;
312};
313
314template <typename T1, typename T2, typename T3, typename T4, typename T5,
315 typename T6, typename T7, typename T8, typename T9, typename T10,
316 typename T11, typename T12, typename T13, typename T14, typename T15,
317 typename T16, typename T17, typename T18, typename T19, typename T20,
318 typename T21, typename T22, typename T23, typename T24>
319struct Types24 {
320 typedef T1 Head;
321 typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
322 T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
323};
324
325template <typename T1, typename T2, typename T3, typename T4, typename T5,
326 typename T6, typename T7, typename T8, typename T9, typename T10,
327 typename T11, typename T12, typename T13, typename T14, typename T15,
328 typename T16, typename T17, typename T18, typename T19, typename T20,
329 typename T21, typename T22, typename T23, typename T24, typename T25>
330struct Types25 {
331 typedef T1 Head;
332 typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
333 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
334};
335
336template <typename T1, typename T2, typename T3, typename T4, typename T5,
337 typename T6, typename T7, typename T8, typename T9, typename T10,
338 typename T11, typename T12, typename T13, typename T14, typename T15,
339 typename T16, typename T17, typename T18, typename T19, typename T20,
340 typename T21, typename T22, typename T23, typename T24, typename T25,
341 typename T26>
342struct Types26 {
343 typedef T1 Head;
344 typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
345 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
346};
347
348template <typename T1, typename T2, typename T3, typename T4, typename T5,
349 typename T6, typename T7, typename T8, typename T9, typename T10,
350 typename T11, typename T12, typename T13, typename T14, typename T15,
351 typename T16, typename T17, typename T18, typename T19, typename T20,
352 typename T21, typename T22, typename T23, typename T24, typename T25,
353 typename T26, typename T27>
354struct Types27 {
355 typedef T1 Head;
356 typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
357 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
358};
359
360template <typename T1, typename T2, typename T3, typename T4, typename T5,
361 typename T6, typename T7, typename T8, typename T9, typename T10,
362 typename T11, typename T12, typename T13, typename T14, typename T15,
363 typename T16, typename T17, typename T18, typename T19, typename T20,
364 typename T21, typename T22, typename T23, typename T24, typename T25,
365 typename T26, typename T27, typename T28>
366struct Types28 {
367 typedef T1 Head;
368 typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
369 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
370};
371
372template <typename T1, typename T2, typename T3, typename T4, typename T5,
373 typename T6, typename T7, typename T8, typename T9, typename T10,
374 typename T11, typename T12, typename T13, typename T14, typename T15,
375 typename T16, typename T17, typename T18, typename T19, typename T20,
376 typename T21, typename T22, typename T23, typename T24, typename T25,
377 typename T26, typename T27, typename T28, typename T29>
378struct Types29 {
379 typedef T1 Head;
380 typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
381 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
382 T29> Tail;
383};
384
385template <typename T1, typename T2, typename T3, typename T4, typename T5,
386 typename T6, typename T7, typename T8, typename T9, typename T10,
387 typename T11, typename T12, typename T13, typename T14, typename T15,
388 typename T16, typename T17, typename T18, typename T19, typename T20,
389 typename T21, typename T22, typename T23, typename T24, typename T25,
390 typename T26, typename T27, typename T28, typename T29, typename T30>
391struct Types30 {
392 typedef T1 Head;
393 typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
394 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
395 T30> Tail;
396};
397
398template <typename T1, typename T2, typename T3, typename T4, typename T5,
399 typename T6, typename T7, typename T8, typename T9, typename T10,
400 typename T11, typename T12, typename T13, typename T14, typename T15,
401 typename T16, typename T17, typename T18, typename T19, typename T20,
402 typename T21, typename T22, typename T23, typename T24, typename T25,
403 typename T26, typename T27, typename T28, typename T29, typename T30,
404 typename T31>
405struct Types31 {
406 typedef T1 Head;
407 typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
408 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
409 T30, T31> Tail;
410};
411
412template <typename T1, typename T2, typename T3, typename T4, typename T5,
413 typename T6, typename T7, typename T8, typename T9, typename T10,
414 typename T11, typename T12, typename T13, typename T14, typename T15,
415 typename T16, typename T17, typename T18, typename T19, typename T20,
416 typename T21, typename T22, typename T23, typename T24, typename T25,
417 typename T26, typename T27, typename T28, typename T29, typename T30,
418 typename T31, typename T32>
419struct Types32 {
420 typedef T1 Head;
421 typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
422 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
423 T30, T31, T32> Tail;
424};
425
426template <typename T1, typename T2, typename T3, typename T4, typename T5,
427 typename T6, typename T7, typename T8, typename T9, typename T10,
428 typename T11, typename T12, typename T13, typename T14, typename T15,
429 typename T16, typename T17, typename T18, typename T19, typename T20,
430 typename T21, typename T22, typename T23, typename T24, typename T25,
431 typename T26, typename T27, typename T28, typename T29, typename T30,
432 typename T31, typename T32, typename T33>
433struct Types33 {
434 typedef T1 Head;
435 typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
436 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
437 T30, T31, T32, T33> Tail;
438};
439
440template <typename T1, typename T2, typename T3, typename T4, typename T5,
441 typename T6, typename T7, typename T8, typename T9, typename T10,
442 typename T11, typename T12, typename T13, typename T14, typename T15,
443 typename T16, typename T17, typename T18, typename T19, typename T20,
444 typename T21, typename T22, typename T23, typename T24, typename T25,
445 typename T26, typename T27, typename T28, typename T29, typename T30,
446 typename T31, typename T32, typename T33, typename T34>
447struct Types34 {
448 typedef T1 Head;
449 typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
450 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
451 T30, T31, T32, T33, T34> Tail;
452};
453
454template <typename T1, typename T2, typename T3, typename T4, typename T5,
455 typename T6, typename T7, typename T8, typename T9, typename T10,
456 typename T11, typename T12, typename T13, typename T14, typename T15,
457 typename T16, typename T17, typename T18, typename T19, typename T20,
458 typename T21, typename T22, typename T23, typename T24, typename T25,
459 typename T26, typename T27, typename T28, typename T29, typename T30,
460 typename T31, typename T32, typename T33, typename T34, typename T35>
461struct Types35 {
462 typedef T1 Head;
463 typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
464 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
465 T30, T31, T32, T33, T34, T35> Tail;
466};
467
468template <typename T1, typename T2, typename T3, typename T4, typename T5,
469 typename T6, typename T7, typename T8, typename T9, typename T10,
470 typename T11, typename T12, typename T13, typename T14, typename T15,
471 typename T16, typename T17, typename T18, typename T19, typename T20,
472 typename T21, typename T22, typename T23, typename T24, typename T25,
473 typename T26, typename T27, typename T28, typename T29, typename T30,
474 typename T31, typename T32, typename T33, typename T34, typename T35,
475 typename T36>
476struct Types36 {
477 typedef T1 Head;
478 typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
479 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
480 T30, T31, T32, T33, T34, T35, T36> Tail;
481};
482
483template <typename T1, typename T2, typename T3, typename T4, typename T5,
484 typename T6, typename T7, typename T8, typename T9, typename T10,
485 typename T11, typename T12, typename T13, typename T14, typename T15,
486 typename T16, typename T17, typename T18, typename T19, typename T20,
487 typename T21, typename T22, typename T23, typename T24, typename T25,
488 typename T26, typename T27, typename T28, typename T29, typename T30,
489 typename T31, typename T32, typename T33, typename T34, typename T35,
490 typename T36, typename T37>
491struct Types37 {
492 typedef T1 Head;
493 typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
494 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
495 T30, T31, T32, T33, T34, T35, T36, T37> Tail;
496};
497
498template <typename T1, typename T2, typename T3, typename T4, typename T5,
499 typename T6, typename T7, typename T8, typename T9, typename T10,
500 typename T11, typename T12, typename T13, typename T14, typename T15,
501 typename T16, typename T17, typename T18, typename T19, typename T20,
502 typename T21, typename T22, typename T23, typename T24, typename T25,
503 typename T26, typename T27, typename T28, typename T29, typename T30,
504 typename T31, typename T32, typename T33, typename T34, typename T35,
505 typename T36, typename T37, typename T38>
506struct Types38 {
507 typedef T1 Head;
508 typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
509 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
510 T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
511};
512
513template <typename T1, typename T2, typename T3, typename T4, typename T5,
514 typename T6, typename T7, typename T8, typename T9, typename T10,
515 typename T11, typename T12, typename T13, typename T14, typename T15,
516 typename T16, typename T17, typename T18, typename T19, typename T20,
517 typename T21, typename T22, typename T23, typename T24, typename T25,
518 typename T26, typename T27, typename T28, typename T29, typename T30,
519 typename T31, typename T32, typename T33, typename T34, typename T35,
520 typename T36, typename T37, typename T38, typename T39>
521struct Types39 {
522 typedef T1 Head;
523 typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
524 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
525 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
526};
527
528template <typename T1, typename T2, typename T3, typename T4, typename T5,
529 typename T6, typename T7, typename T8, typename T9, typename T10,
530 typename T11, typename T12, typename T13, typename T14, typename T15,
531 typename T16, typename T17, typename T18, typename T19, typename T20,
532 typename T21, typename T22, typename T23, typename T24, typename T25,
533 typename T26, typename T27, typename T28, typename T29, typename T30,
534 typename T31, typename T32, typename T33, typename T34, typename T35,
535 typename T36, typename T37, typename T38, typename T39, typename T40>
536struct Types40 {
537 typedef T1 Head;
538 typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
539 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
540 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
541};
542
543template <typename T1, typename T2, typename T3, typename T4, typename T5,
544 typename T6, typename T7, typename T8, typename T9, typename T10,
545 typename T11, typename T12, typename T13, typename T14, typename T15,
546 typename T16, typename T17, typename T18, typename T19, typename T20,
547 typename T21, typename T22, typename T23, typename T24, typename T25,
548 typename T26, typename T27, typename T28, typename T29, typename T30,
549 typename T31, typename T32, typename T33, typename T34, typename T35,
550 typename T36, typename T37, typename T38, typename T39, typename T40,
551 typename T41>
552struct Types41 {
553 typedef T1 Head;
554 typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
555 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
556 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
557};
558
559template <typename T1, typename T2, typename T3, typename T4, typename T5,
560 typename T6, typename T7, typename T8, typename T9, typename T10,
561 typename T11, typename T12, typename T13, typename T14, typename T15,
562 typename T16, typename T17, typename T18, typename T19, typename T20,
563 typename T21, typename T22, typename T23, typename T24, typename T25,
564 typename T26, typename T27, typename T28, typename T29, typename T30,
565 typename T31, typename T32, typename T33, typename T34, typename T35,
566 typename T36, typename T37, typename T38, typename T39, typename T40,
567 typename T41, typename T42>
568struct Types42 {
569 typedef T1 Head;
570 typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
571 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
572 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
573};
574
575template <typename T1, typename T2, typename T3, typename T4, typename T5,
576 typename T6, typename T7, typename T8, typename T9, typename T10,
577 typename T11, typename T12, typename T13, typename T14, typename T15,
578 typename T16, typename T17, typename T18, typename T19, typename T20,
579 typename T21, typename T22, typename T23, typename T24, typename T25,
580 typename T26, typename T27, typename T28, typename T29, typename T30,
581 typename T31, typename T32, typename T33, typename T34, typename T35,
582 typename T36, typename T37, typename T38, typename T39, typename T40,
583 typename T41, typename T42, typename T43>
584struct Types43 {
585 typedef T1 Head;
586 typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
587 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
588 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
589 T43> Tail;
590};
591
592template <typename T1, typename T2, typename T3, typename T4, typename T5,
593 typename T6, typename T7, typename T8, typename T9, typename T10,
594 typename T11, typename T12, typename T13, typename T14, typename T15,
595 typename T16, typename T17, typename T18, typename T19, typename T20,
596 typename T21, typename T22, typename T23, typename T24, typename T25,
597 typename T26, typename T27, typename T28, typename T29, typename T30,
598 typename T31, typename T32, typename T33, typename T34, typename T35,
599 typename T36, typename T37, typename T38, typename T39, typename T40,
600 typename T41, typename T42, typename T43, typename T44>
601struct Types44 {
602 typedef T1 Head;
603 typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
604 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
605 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
606 T44> Tail;
607};
608
609template <typename T1, typename T2, typename T3, typename T4, typename T5,
610 typename T6, typename T7, typename T8, typename T9, typename T10,
611 typename T11, typename T12, typename T13, typename T14, typename T15,
612 typename T16, typename T17, typename T18, typename T19, typename T20,
613 typename T21, typename T22, typename T23, typename T24, typename T25,
614 typename T26, typename T27, typename T28, typename T29, typename T30,
615 typename T31, typename T32, typename T33, typename T34, typename T35,
616 typename T36, typename T37, typename T38, typename T39, typename T40,
617 typename T41, typename T42, typename T43, typename T44, typename T45>
618struct Types45 {
619 typedef T1 Head;
620 typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
621 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
622 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
623 T44, T45> Tail;
624};
625
626template <typename T1, typename T2, typename T3, typename T4, typename T5,
627 typename T6, typename T7, typename T8, typename T9, typename T10,
628 typename T11, typename T12, typename T13, typename T14, typename T15,
629 typename T16, typename T17, typename T18, typename T19, typename T20,
630 typename T21, typename T22, typename T23, typename T24, typename T25,
631 typename T26, typename T27, typename T28, typename T29, typename T30,
632 typename T31, typename T32, typename T33, typename T34, typename T35,
633 typename T36, typename T37, typename T38, typename T39, typename T40,
634 typename T41, typename T42, typename T43, typename T44, typename T45,
635 typename T46>
636struct Types46 {
637 typedef T1 Head;
638 typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
639 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
640 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
641 T44, T45, T46> Tail;
642};
643
644template <typename T1, typename T2, typename T3, typename T4, typename T5,
645 typename T6, typename T7, typename T8, typename T9, typename T10,
646 typename T11, typename T12, typename T13, typename T14, typename T15,
647 typename T16, typename T17, typename T18, typename T19, typename T20,
648 typename T21, typename T22, typename T23, typename T24, typename T25,
649 typename T26, typename T27, typename T28, typename T29, typename T30,
650 typename T31, typename T32, typename T33, typename T34, typename T35,
651 typename T36, typename T37, typename T38, typename T39, typename T40,
652 typename T41, typename T42, typename T43, typename T44, typename T45,
653 typename T46, typename T47>
654struct Types47 {
655 typedef T1 Head;
656 typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
657 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
658 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
659 T44, T45, T46, T47> Tail;
660};
661
662template <typename T1, typename T2, typename T3, typename T4, typename T5,
663 typename T6, typename T7, typename T8, typename T9, typename T10,
664 typename T11, typename T12, typename T13, typename T14, typename T15,
665 typename T16, typename T17, typename T18, typename T19, typename T20,
666 typename T21, typename T22, typename T23, typename T24, typename T25,
667 typename T26, typename T27, typename T28, typename T29, typename T30,
668 typename T31, typename T32, typename T33, typename T34, typename T35,
669 typename T36, typename T37, typename T38, typename T39, typename T40,
670 typename T41, typename T42, typename T43, typename T44, typename T45,
671 typename T46, typename T47, typename T48>
672struct Types48 {
673 typedef T1 Head;
674 typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
675 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
676 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
677 T44, T45, T46, T47, T48> Tail;
678};
679
680template <typename T1, typename T2, typename T3, typename T4, typename T5,
681 typename T6, typename T7, typename T8, typename T9, typename T10,
682 typename T11, typename T12, typename T13, typename T14, typename T15,
683 typename T16, typename T17, typename T18, typename T19, typename T20,
684 typename T21, typename T22, typename T23, typename T24, typename T25,
685 typename T26, typename T27, typename T28, typename T29, typename T30,
686 typename T31, typename T32, typename T33, typename T34, typename T35,
687 typename T36, typename T37, typename T38, typename T39, typename T40,
688 typename T41, typename T42, typename T43, typename T44, typename T45,
689 typename T46, typename T47, typename T48, typename T49>
690struct Types49 {
691 typedef T1 Head;
692 typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
693 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
694 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
695 T44, T45, T46, T47, T48, T49> Tail;
696};
697
698template <typename T1, typename T2, typename T3, typename T4, typename T5,
699 typename T6, typename T7, typename T8, typename T9, typename T10,
700 typename T11, typename T12, typename T13, typename T14, typename T15,
701 typename T16, typename T17, typename T18, typename T19, typename T20,
702 typename T21, typename T22, typename T23, typename T24, typename T25,
703 typename T26, typename T27, typename T28, typename T29, typename T30,
704 typename T31, typename T32, typename T33, typename T34, typename T35,
705 typename T36, typename T37, typename T38, typename T39, typename T40,
706 typename T41, typename T42, typename T43, typename T44, typename T45,
707 typename T46, typename T47, typename T48, typename T49, typename T50>
708struct Types50 {
709 typedef T1 Head;
710 typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
711 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
712 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
713 T44, T45, T46, T47, T48, T49, T50> Tail;
714};
715
716
717} // namespace internal
718
719// We don't want to require the users to write TypesN<...> directly,
720// as that would require them to count the length. Types<...> is much
721// easier to write, but generates horrible messages when there is a
722// compiler error, as gcc insists on printing out each template
723// argument, even if it has the default value (this means Types<int>
724// will appear as Types<int, None, None, ..., None> in the compiler
725// errors).
726//
727// Our solution is to combine the best part of the two approaches: a
728// user would write Types<T1, ..., TN>, and Google Test will translate
729// that to TypesN<T1, ..., TN> internally to make error messages
730// readable. The translation is done by the 'type' member of the
731// Types template.
732template <typename T1 = internal::None, typename T2 = internal::None,
733 typename T3 = internal::None, typename T4 = internal::None,
734 typename T5 = internal::None, typename T6 = internal::None,
735 typename T7 = internal::None, typename T8 = internal::None,
736 typename T9 = internal::None, typename T10 = internal::None,
737 typename T11 = internal::None, typename T12 = internal::None,
738 typename T13 = internal::None, typename T14 = internal::None,
739 typename T15 = internal::None, typename T16 = internal::None,
740 typename T17 = internal::None, typename T18 = internal::None,
741 typename T19 = internal::None, typename T20 = internal::None,
742 typename T21 = internal::None, typename T22 = internal::None,
743 typename T23 = internal::None, typename T24 = internal::None,
744 typename T25 = internal::None, typename T26 = internal::None,
745 typename T27 = internal::None, typename T28 = internal::None,
746 typename T29 = internal::None, typename T30 = internal::None,
747 typename T31 = internal::None, typename T32 = internal::None,
748 typename T33 = internal::None, typename T34 = internal::None,
749 typename T35 = internal::None, typename T36 = internal::None,
750 typename T37 = internal::None, typename T38 = internal::None,
751 typename T39 = internal::None, typename T40 = internal::None,
752 typename T41 = internal::None, typename T42 = internal::None,
753 typename T43 = internal::None, typename T44 = internal::None,
754 typename T45 = internal::None, typename T46 = internal::None,
755 typename T47 = internal::None, typename T48 = internal::None,
756 typename T49 = internal::None, typename T50 = internal::None>
757struct Types {
758 typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
759 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
760 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
761 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
762};
763
764template <>
765struct Types<internal::None, internal::None, internal::None, internal::None,
766 internal::None, internal::None, internal::None, internal::None,
767 internal::None, internal::None, internal::None, internal::None,
768 internal::None, internal::None, internal::None, internal::None,
769 internal::None, internal::None, internal::None, internal::None,
770 internal::None, internal::None, internal::None, internal::None,
771 internal::None, internal::None, internal::None, internal::None,
772 internal::None, internal::None, internal::None, internal::None,
773 internal::None, internal::None, internal::None, internal::None,
774 internal::None, internal::None, internal::None, internal::None,
775 internal::None, internal::None, internal::None, internal::None,
776 internal::None, internal::None, internal::None, internal::None,
777 internal::None, internal::None> {
778 typedef internal::Types0 type;
779};
780template <typename T1>
781struct Types<T1, internal::None, internal::None, internal::None,
782 internal::None, internal::None, internal::None, internal::None,
783 internal::None, internal::None, internal::None, internal::None,
784 internal::None, internal::None, internal::None, internal::None,
785 internal::None, internal::None, internal::None, internal::None,
786 internal::None, internal::None, internal::None, internal::None,
787 internal::None, internal::None, internal::None, internal::None,
788 internal::None, internal::None, internal::None, internal::None,
789 internal::None, internal::None, internal::None, internal::None,
790 internal::None, internal::None, internal::None, internal::None,
791 internal::None, internal::None, internal::None, internal::None,
792 internal::None, internal::None, internal::None, internal::None,
793 internal::None, internal::None> {
794 typedef internal::Types1<T1> type;
795};
796template <typename T1, typename T2>
797struct Types<T1, T2, internal::None, internal::None, internal::None,
798 internal::None, internal::None, internal::None, internal::None,
799 internal::None, internal::None, internal::None, internal::None,
800 internal::None, internal::None, internal::None, internal::None,
801 internal::None, internal::None, internal::None, internal::None,
802 internal::None, internal::None, internal::None, internal::None,
803 internal::None, internal::None, internal::None, internal::None,
804 internal::None, internal::None, internal::None, internal::None,
805 internal::None, internal::None, internal::None, internal::None,
806 internal::None, internal::None, internal::None, internal::None,
807 internal::None, internal::None, internal::None, internal::None,
808 internal::None, internal::None, internal::None, internal::None,
809 internal::None> {
810 typedef internal::Types2<T1, T2> type;
811};
812template <typename T1, typename T2, typename T3>
813struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
814 internal::None, internal::None, internal::None, internal::None,
815 internal::None, internal::None, internal::None, internal::None,
816 internal::None, internal::None, internal::None, internal::None,
817 internal::None, internal::None, internal::None, internal::None,
818 internal::None, internal::None, internal::None, internal::None,
819 internal::None, internal::None, internal::None, internal::None,
820 internal::None, internal::None, internal::None, internal::None,
821 internal::None, internal::None, internal::None, internal::None,
822 internal::None, internal::None, internal::None, internal::None,
823 internal::None, internal::None, internal::None, internal::None,
824 internal::None, internal::None, internal::None, internal::None> {
825 typedef internal::Types3<T1, T2, T3> type;
826};
827template <typename T1, typename T2, typename T3, typename T4>
828struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
829 internal::None, internal::None, internal::None, internal::None,
830 internal::None, internal::None, internal::None, internal::None,
831 internal::None, internal::None, internal::None, internal::None,
832 internal::None, internal::None, internal::None, internal::None,
833 internal::None, internal::None, internal::None, internal::None,
834 internal::None, internal::None, internal::None, internal::None,
835 internal::None, internal::None, internal::None, internal::None,
836 internal::None, internal::None, internal::None, internal::None,
837 internal::None, internal::None, internal::None, internal::None,
838 internal::None, internal::None, internal::None, internal::None,
839 internal::None, internal::None, internal::None> {
840 typedef internal::Types4<T1, T2, T3, T4> type;
841};
842template <typename T1, typename T2, typename T3, typename T4, typename T5>
843struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
844 internal::None, internal::None, internal::None, internal::None,
845 internal::None, internal::None, internal::None, internal::None,
846 internal::None, internal::None, internal::None, internal::None,
847 internal::None, internal::None, internal::None, internal::None,
848 internal::None, internal::None, internal::None, internal::None,
849 internal::None, internal::None, internal::None, internal::None,
850 internal::None, internal::None, internal::None, internal::None,
851 internal::None, internal::None, internal::None, internal::None,
852 internal::None, internal::None, internal::None, internal::None,
853 internal::None, internal::None, internal::None, internal::None,
854 internal::None, internal::None, internal::None> {
855 typedef internal::Types5<T1, T2, T3, T4, T5> type;
856};
857template <typename T1, typename T2, typename T3, typename T4, typename T5,
858 typename T6>
859struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
860 internal::None, internal::None, internal::None, internal::None,
861 internal::None, internal::None, internal::None, internal::None,
862 internal::None, internal::None, internal::None, internal::None,
863 internal::None, internal::None, internal::None, internal::None,
864 internal::None, internal::None, internal::None, internal::None,
865 internal::None, internal::None, internal::None, internal::None,
866 internal::None, internal::None, internal::None, internal::None,
867 internal::None, internal::None, internal::None, internal::None,
868 internal::None, internal::None, internal::None, internal::None,
869 internal::None, internal::None, internal::None, internal::None,
870 internal::None, internal::None> {
871 typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
872};
873template <typename T1, typename T2, typename T3, typename T4, typename T5,
874 typename T6, typename T7>
875struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
876 internal::None, internal::None, internal::None, internal::None,
877 internal::None, internal::None, internal::None, internal::None,
878 internal::None, internal::None, internal::None, internal::None,
879 internal::None, internal::None, internal::None, internal::None,
880 internal::None, internal::None, internal::None, internal::None,
881 internal::None, internal::None, internal::None, internal::None,
882 internal::None, internal::None, internal::None, internal::None,
883 internal::None, internal::None, internal::None, internal::None,
884 internal::None, internal::None, internal::None, internal::None,
885 internal::None, internal::None, internal::None, internal::None,
886 internal::None> {
887 typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
888};
889template <typename T1, typename T2, typename T3, typename T4, typename T5,
890 typename T6, typename T7, typename T8>
891struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
892 internal::None, internal::None, internal::None, internal::None,
893 internal::None, internal::None, internal::None, internal::None,
894 internal::None, internal::None, internal::None, internal::None,
895 internal::None, internal::None, internal::None, internal::None,
896 internal::None, internal::None, internal::None, internal::None,
897 internal::None, internal::None, internal::None, internal::None,
898 internal::None, internal::None, internal::None, internal::None,
899 internal::None, internal::None, internal::None, internal::None,
900 internal::None, internal::None, internal::None, internal::None,
901 internal::None, internal::None, internal::None, internal::None> {
902 typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
903};
904template <typename T1, typename T2, typename T3, typename T4, typename T5,
905 typename T6, typename T7, typename T8, typename T9>
906struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
907 internal::None, internal::None, internal::None, internal::None,
908 internal::None, internal::None, internal::None, internal::None,
909 internal::None, internal::None, internal::None, internal::None,
910 internal::None, internal::None, internal::None, internal::None,
911 internal::None, internal::None, internal::None, internal::None,
912 internal::None, internal::None, internal::None, internal::None,
913 internal::None, internal::None, internal::None, internal::None,
914 internal::None, internal::None, internal::None, internal::None,
915 internal::None, internal::None, internal::None, internal::None,
916 internal::None, internal::None, internal::None, internal::None> {
917 typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
918};
919template <typename T1, typename T2, typename T3, typename T4, typename T5,
920 typename T6, typename T7, typename T8, typename T9, typename T10>
921struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
922 internal::None, internal::None, internal::None, internal::None,
923 internal::None, internal::None, internal::None, internal::None,
924 internal::None, internal::None, internal::None, internal::None,
925 internal::None, internal::None, internal::None, internal::None,
926 internal::None, internal::None, internal::None, internal::None,
927 internal::None, internal::None, internal::None, internal::None,
928 internal::None, internal::None, internal::None, internal::None,
929 internal::None, internal::None, internal::None, internal::None,
930 internal::None, internal::None, internal::None, internal::None,
931 internal::None, internal::None, internal::None> {
932 typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
933};
934template <typename T1, typename T2, typename T3, typename T4, typename T5,
935 typename T6, typename T7, typename T8, typename T9, typename T10,
936 typename T11>
937struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
938 internal::None, internal::None, internal::None, internal::None,
939 internal::None, internal::None, internal::None, internal::None,
940 internal::None, internal::None, internal::None, internal::None,
941 internal::None, internal::None, internal::None, internal::None,
942 internal::None, internal::None, internal::None, internal::None,
943 internal::None, internal::None, internal::None, internal::None,
944 internal::None, internal::None, internal::None, internal::None,
945 internal::None, internal::None, internal::None, internal::None,
946 internal::None, internal::None, internal::None, internal::None,
947 internal::None, internal::None> {
948 typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
949};
950template <typename T1, typename T2, typename T3, typename T4, typename T5,
951 typename T6, typename T7, typename T8, typename T9, typename T10,
952 typename T11, typename T12>
953struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
954 internal::None, internal::None, internal::None, internal::None,
955 internal::None, internal::None, internal::None, internal::None,
956 internal::None, internal::None, internal::None, internal::None,
957 internal::None, internal::None, internal::None, internal::None,
958 internal::None, internal::None, internal::None, internal::None,
959 internal::None, internal::None, internal::None, internal::None,
960 internal::None, internal::None, internal::None, internal::None,
961 internal::None, internal::None, internal::None, internal::None,
962 internal::None, internal::None, internal::None, internal::None,
963 internal::None> {
964 typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
965 T12> type;
966};
967template <typename T1, typename T2, typename T3, typename T4, typename T5,
968 typename T6, typename T7, typename T8, typename T9, typename T10,
969 typename T11, typename T12, typename T13>
970struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
971 internal::None, internal::None, internal::None, internal::None,
972 internal::None, internal::None, internal::None, internal::None,
973 internal::None, internal::None, internal::None, internal::None,
974 internal::None, internal::None, internal::None, internal::None,
975 internal::None, internal::None, internal::None, internal::None,
976 internal::None, internal::None, internal::None, internal::None,
977 internal::None, internal::None, internal::None, internal::None,
978 internal::None, internal::None, internal::None, internal::None,
979 internal::None, internal::None, internal::None, internal::None,
980 internal::None> {
981 typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
982 T13> type;
983};
984template <typename T1, typename T2, typename T3, typename T4, typename T5,
985 typename T6, typename T7, typename T8, typename T9, typename T10,
986 typename T11, typename T12, typename T13, typename T14>
987struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
988 internal::None, internal::None, internal::None, internal::None,
989 internal::None, internal::None, internal::None, internal::None,
990 internal::None, internal::None, internal::None, internal::None,
991 internal::None, internal::None, internal::None, internal::None,
992 internal::None, internal::None, internal::None, internal::None,
993 internal::None, internal::None, internal::None, internal::None,
994 internal::None, internal::None, internal::None, internal::None,
995 internal::None, internal::None, internal::None, internal::None,
996 internal::None, internal::None, internal::None, internal::None> {
997 typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
998 T13, T14> type;
999};
1000template <typename T1, typename T2, typename T3, typename T4, typename T5,
1001 typename T6, typename T7, typename T8, typename T9, typename T10,
1002 typename T11, typename T12, typename T13, typename T14, typename T15>
1003struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1004 internal::None, internal::None, internal::None, internal::None,
1005 internal::None, internal::None, internal::None, internal::None,
1006 internal::None, internal::None, internal::None, internal::None,
1007 internal::None, internal::None, internal::None, internal::None,
1008 internal::None, internal::None, internal::None, internal::None,
1009 internal::None, internal::None, internal::None, internal::None,
1010 internal::None, internal::None, internal::None, internal::None,
1011 internal::None, internal::None, internal::None, internal::None,
1012 internal::None, internal::None, internal::None> {
1013 typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1014 T13, T14, T15> type;
1015};
1016template <typename T1, typename T2, typename T3, typename T4, typename T5,
1017 typename T6, typename T7, typename T8, typename T9, typename T10,
1018 typename T11, typename T12, typename T13, typename T14, typename T15,
1019 typename T16>
1020struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1021 T16, internal::None, internal::None, internal::None, internal::None,
1022 internal::None, internal::None, internal::None, internal::None,
1023 internal::None, internal::None, internal::None, internal::None,
1024 internal::None, internal::None, internal::None, internal::None,
1025 internal::None, internal::None, internal::None, internal::None,
1026 internal::None, internal::None, internal::None, internal::None,
1027 internal::None, internal::None, internal::None, internal::None,
1028 internal::None, internal::None, internal::None, internal::None,
1029 internal::None, internal::None> {
1030 typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1031 T13, T14, T15, T16> type;
1032};
1033template <typename T1, typename T2, typename T3, typename T4, typename T5,
1034 typename T6, typename T7, typename T8, typename T9, typename T10,
1035 typename T11, typename T12, typename T13, typename T14, typename T15,
1036 typename T16, typename T17>
1037struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1038 T16, T17, internal::None, internal::None, internal::None, internal::None,
1039 internal::None, internal::None, internal::None, internal::None,
1040 internal::None, internal::None, internal::None, internal::None,
1041 internal::None, internal::None, internal::None, internal::None,
1042 internal::None, internal::None, internal::None, internal::None,
1043 internal::None, internal::None, internal::None, internal::None,
1044 internal::None, internal::None, internal::None, internal::None,
1045 internal::None, internal::None, internal::None, internal::None,
1046 internal::None> {
1047 typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1048 T13, T14, T15, T16, T17> type;
1049};
1050template <typename T1, typename T2, typename T3, typename T4, typename T5,
1051 typename T6, typename T7, typename T8, typename T9, typename T10,
1052 typename T11, typename T12, typename T13, typename T14, typename T15,
1053 typename T16, typename T17, typename T18>
1054struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1055 T16, T17, T18, internal::None, internal::None, internal::None,
1056 internal::None, internal::None, internal::None, internal::None,
1057 internal::None, internal::None, internal::None, internal::None,
1058 internal::None, internal::None, internal::None, internal::None,
1059 internal::None, internal::None, internal::None, internal::None,
1060 internal::None, internal::None, internal::None, internal::None,
1061 internal::None, internal::None, internal::None, internal::None,
1062 internal::None, internal::None, internal::None, internal::None,
1063 internal::None> {
1064 typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1065 T13, T14, T15, T16, T17, T18> type;
1066};
1067template <typename T1, typename T2, typename T3, typename T4, typename T5,
1068 typename T6, typename T7, typename T8, typename T9, typename T10,
1069 typename T11, typename T12, typename T13, typename T14, typename T15,
1070 typename T16, typename T17, typename T18, typename T19>
1071struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1072 T16, T17, T18, T19, internal::None, internal::None, internal::None,
1073 internal::None, internal::None, internal::None, internal::None,
1074 internal::None, internal::None, internal::None, internal::None,
1075 internal::None, internal::None, internal::None, internal::None,
1076 internal::None, internal::None, internal::None, internal::None,
1077 internal::None, internal::None, internal::None, internal::None,
1078 internal::None, internal::None, internal::None, internal::None,
1079 internal::None, internal::None, internal::None, internal::None> {
1080 typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1081 T13, T14, T15, T16, T17, T18, T19> type;
1082};
1083template <typename T1, typename T2, typename T3, typename T4, typename T5,
1084 typename T6, typename T7, typename T8, typename T9, typename T10,
1085 typename T11, typename T12, typename T13, typename T14, typename T15,
1086 typename T16, typename T17, typename T18, typename T19, typename T20>
1087struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1088 T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
1089 internal::None, internal::None, internal::None, internal::None,
1090 internal::None, internal::None, internal::None, internal::None,
1091 internal::None, internal::None, internal::None, internal::None,
1092 internal::None, internal::None, internal::None, internal::None,
1093 internal::None, internal::None, internal::None, internal::None,
1094 internal::None, internal::None, internal::None, internal::None,
1095 internal::None, internal::None, internal::None> {
1096 typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1097 T13, T14, T15, T16, T17, T18, T19, T20> type;
1098};
1099template <typename T1, typename T2, typename T3, typename T4, typename T5,
1100 typename T6, typename T7, typename T8, typename T9, typename T10,
1101 typename T11, typename T12, typename T13, typename T14, typename T15,
1102 typename T16, typename T17, typename T18, typename T19, typename T20,
1103 typename T21>
1104struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1105 T16, T17, T18, T19, T20, T21, internal::None, internal::None,
1106 internal::None, internal::None, internal::None, internal::None,
1107 internal::None, internal::None, internal::None, internal::None,
1108 internal::None, internal::None, internal::None, internal::None,
1109 internal::None, internal::None, internal::None, internal::None,
1110 internal::None, internal::None, internal::None, internal::None,
1111 internal::None, internal::None, internal::None, internal::None,
1112 internal::None, internal::None, internal::None> {
1113 typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1114 T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
1115};
1116template <typename T1, typename T2, typename T3, typename T4, typename T5,
1117 typename T6, typename T7, typename T8, typename T9, typename T10,
1118 typename T11, typename T12, typename T13, typename T14, typename T15,
1119 typename T16, typename T17, typename T18, typename T19, typename T20,
1120 typename T21, typename T22>
1121struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1122 T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
1123 internal::None, internal::None, internal::None, internal::None,
1124 internal::None, internal::None, internal::None, internal::None,
1125 internal::None, internal::None, internal::None, internal::None,
1126 internal::None, internal::None, internal::None, internal::None,
1127 internal::None, internal::None, internal::None, internal::None,
1128 internal::None, internal::None, internal::None, internal::None,
1129 internal::None, internal::None> {
1130 typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1131 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
1132};
1133template <typename T1, typename T2, typename T3, typename T4, typename T5,
1134 typename T6, typename T7, typename T8, typename T9, typename T10,
1135 typename T11, typename T12, typename T13, typename T14, typename T15,
1136 typename T16, typename T17, typename T18, typename T19, typename T20,
1137 typename T21, typename T22, typename T23>
1138struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1139 T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
1140 internal::None, internal::None, internal::None, internal::None,
1141 internal::None, internal::None, internal::None, internal::None,
1142 internal::None, internal::None, internal::None, internal::None,
1143 internal::None, internal::None, internal::None, internal::None,
1144 internal::None, internal::None, internal::None, internal::None,
1145 internal::None, internal::None, internal::None, internal::None,
1146 internal::None> {
1147 typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1148 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
1149};
1150template <typename T1, typename T2, typename T3, typename T4, typename T5,
1151 typename T6, typename T7, typename T8, typename T9, typename T10,
1152 typename T11, typename T12, typename T13, typename T14, typename T15,
1153 typename T16, typename T17, typename T18, typename T19, typename T20,
1154 typename T21, typename T22, typename T23, typename T24>
1155struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1156 T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
1157 internal::None, internal::None, internal::None, internal::None,
1158 internal::None, internal::None, internal::None, internal::None,
1159 internal::None, internal::None, internal::None, internal::None,
1160 internal::None, internal::None, internal::None, internal::None,
1161 internal::None, internal::None, internal::None, internal::None,
1162 internal::None, internal::None, internal::None, internal::None,
1163 internal::None> {
1164 typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1165 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
1166};
1167template <typename T1, typename T2, typename T3, typename T4, typename T5,
1168 typename T6, typename T7, typename T8, typename T9, typename T10,
1169 typename T11, typename T12, typename T13, typename T14, typename T15,
1170 typename T16, typename T17, typename T18, typename T19, typename T20,
1171 typename T21, typename T22, typename T23, typename T24, typename T25>
1172struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1173 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
1174 internal::None, internal::None, internal::None, internal::None,
1175 internal::None, internal::None, internal::None, internal::None,
1176 internal::None, internal::None, internal::None, internal::None,
1177 internal::None, internal::None, internal::None, internal::None,
1178 internal::None, internal::None, internal::None, internal::None,
1179 internal::None, internal::None, internal::None, internal::None> {
1180 typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1181 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
1182};
1183template <typename T1, typename T2, typename T3, typename T4, typename T5,
1184 typename T6, typename T7, typename T8, typename T9, typename T10,
1185 typename T11, typename T12, typename T13, typename T14, typename T15,
1186 typename T16, typename T17, typename T18, typename T19, typename T20,
1187 typename T21, typename T22, typename T23, typename T24, typename T25,
1188 typename T26>
1189struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1190 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
1191 internal::None, internal::None, internal::None, internal::None,
1192 internal::None, internal::None, internal::None, internal::None,
1193 internal::None, internal::None, internal::None, internal::None,
1194 internal::None, internal::None, internal::None, internal::None,
1195 internal::None, internal::None, internal::None, internal::None,
1196 internal::None, internal::None, internal::None> {
1197 typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1198 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
1199 T26> type;
1200};
1201template <typename T1, typename T2, typename T3, typename T4, typename T5,
1202 typename T6, typename T7, typename T8, typename T9, typename T10,
1203 typename T11, typename T12, typename T13, typename T14, typename T15,
1204 typename T16, typename T17, typename T18, typename T19, typename T20,
1205 typename T21, typename T22, typename T23, typename T24, typename T25,
1206 typename T26, typename T27>
1207struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1208 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
1209 internal::None, internal::None, internal::None, internal::None,
1210 internal::None, internal::None, internal::None, internal::None,
1211 internal::None, internal::None, internal::None, internal::None,
1212 internal::None, internal::None, internal::None, internal::None,
1213 internal::None, internal::None, internal::None, internal::None,
1214 internal::None, internal::None> {
1215 typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1216 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1217 T27> type;
1218};
1219template <typename T1, typename T2, typename T3, typename T4, typename T5,
1220 typename T6, typename T7, typename T8, typename T9, typename T10,
1221 typename T11, typename T12, typename T13, typename T14, typename T15,
1222 typename T16, typename T17, typename T18, typename T19, typename T20,
1223 typename T21, typename T22, typename T23, typename T24, typename T25,
1224 typename T26, typename T27, typename T28>
1225struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1226 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1227 internal::None, internal::None, internal::None, internal::None,
1228 internal::None, internal::None, internal::None, internal::None,
1229 internal::None, internal::None, internal::None, internal::None,
1230 internal::None, internal::None, internal::None, internal::None,
1231 internal::None, internal::None, internal::None, internal::None,
1232 internal::None, internal::None> {
1233 typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1234 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1235 T27, T28> type;
1236};
1237template <typename T1, typename T2, typename T3, typename T4, typename T5,
1238 typename T6, typename T7, typename T8, typename T9, typename T10,
1239 typename T11, typename T12, typename T13, typename T14, typename T15,
1240 typename T16, typename T17, typename T18, typename T19, typename T20,
1241 typename T21, typename T22, typename T23, typename T24, typename T25,
1242 typename T26, typename T27, typename T28, typename T29>
1243struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1244 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
1245 internal::None, internal::None, internal::None, internal::None,
1246 internal::None, internal::None, internal::None, internal::None,
1247 internal::None, internal::None, internal::None, internal::None,
1248 internal::None, internal::None, internal::None, internal::None,
1249 internal::None, internal::None, internal::None, internal::None,
1250 internal::None> {
1251 typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1252 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1253 T27, T28, T29> type;
1254};
1255template <typename T1, typename T2, typename T3, typename T4, typename T5,
1256 typename T6, typename T7, typename T8, typename T9, typename T10,
1257 typename T11, typename T12, typename T13, typename T14, typename T15,
1258 typename T16, typename T17, typename T18, typename T19, typename T20,
1259 typename T21, typename T22, typename T23, typename T24, typename T25,
1260 typename T26, typename T27, typename T28, typename T29, typename T30>
1261struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1262 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1263 internal::None, internal::None, internal::None, internal::None,
1264 internal::None, internal::None, internal::None, internal::None,
1265 internal::None, internal::None, internal::None, internal::None,
1266 internal::None, internal::None, internal::None, internal::None,
1267 internal::None, internal::None, internal::None, internal::None> {
1268 typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1269 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1270 T27, T28, T29, T30> type;
1271};
1272template <typename T1, typename T2, typename T3, typename T4, typename T5,
1273 typename T6, typename T7, typename T8, typename T9, typename T10,
1274 typename T11, typename T12, typename T13, typename T14, typename T15,
1275 typename T16, typename T17, typename T18, typename T19, typename T20,
1276 typename T21, typename T22, typename T23, typename T24, typename T25,
1277 typename T26, typename T27, typename T28, typename T29, typename T30,
1278 typename T31>
1279struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1280 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1281 T31, internal::None, internal::None, internal::None, internal::None,
1282 internal::None, internal::None, internal::None, internal::None,
1283 internal::None, internal::None, internal::None, internal::None,
1284 internal::None, internal::None, internal::None, internal::None,
1285 internal::None, internal::None, internal::None> {
1286 typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1287 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1288 T27, T28, T29, T30, T31> type;
1289};
1290template <typename T1, typename T2, typename T3, typename T4, typename T5,
1291 typename T6, typename T7, typename T8, typename T9, typename T10,
1292 typename T11, typename T12, typename T13, typename T14, typename T15,
1293 typename T16, typename T17, typename T18, typename T19, typename T20,
1294 typename T21, typename T22, typename T23, typename T24, typename T25,
1295 typename T26, typename T27, typename T28, typename T29, typename T30,
1296 typename T31, typename T32>
1297struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1298 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1299 T31, T32, internal::None, internal::None, internal::None, internal::None,
1300 internal::None, internal::None, internal::None, internal::None,
1301 internal::None, internal::None, internal::None, internal::None,
1302 internal::None, internal::None, internal::None, internal::None,
1303 internal::None, internal::None> {
1304 typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1305 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1306 T27, T28, T29, T30, T31, T32> type;
1307};
1308template <typename T1, typename T2, typename T3, typename T4, typename T5,
1309 typename T6, typename T7, typename T8, typename T9, typename T10,
1310 typename T11, typename T12, typename T13, typename T14, typename T15,
1311 typename T16, typename T17, typename T18, typename T19, typename T20,
1312 typename T21, typename T22, typename T23, typename T24, typename T25,
1313 typename T26, typename T27, typename T28, typename T29, typename T30,
1314 typename T31, typename T32, typename T33>
1315struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1316 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1317 T31, T32, T33, internal::None, internal::None, internal::None,
1318 internal::None, internal::None, internal::None, internal::None,
1319 internal::None, internal::None, internal::None, internal::None,
1320 internal::None, internal::None, internal::None, internal::None,
1321 internal::None, internal::None> {
1322 typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1323 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1324 T27, T28, T29, T30, T31, T32, T33> type;
1325};
1326template <typename T1, typename T2, typename T3, typename T4, typename T5,
1327 typename T6, typename T7, typename T8, typename T9, typename T10,
1328 typename T11, typename T12, typename T13, typename T14, typename T15,
1329 typename T16, typename T17, typename T18, typename T19, typename T20,
1330 typename T21, typename T22, typename T23, typename T24, typename T25,
1331 typename T26, typename T27, typename T28, typename T29, typename T30,
1332 typename T31, typename T32, typename T33, typename T34>
1333struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1334 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1335 T31, T32, T33, T34, internal::None, internal::None, internal::None,
1336 internal::None, internal::None, internal::None, internal::None,
1337 internal::None, internal::None, internal::None, internal::None,
1338 internal::None, internal::None, internal::None, internal::None,
1339 internal::None> {
1340 typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1341 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1342 T27, T28, T29, T30, T31, T32, T33, T34> type;
1343};
1344template <typename T1, typename T2, typename T3, typename T4, typename T5,
1345 typename T6, typename T7, typename T8, typename T9, typename T10,
1346 typename T11, typename T12, typename T13, typename T14, typename T15,
1347 typename T16, typename T17, typename T18, typename T19, typename T20,
1348 typename T21, typename T22, typename T23, typename T24, typename T25,
1349 typename T26, typename T27, typename T28, typename T29, typename T30,
1350 typename T31, typename T32, typename T33, typename T34, typename T35>
1351struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1352 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1353 T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
1354 internal::None, internal::None, internal::None, internal::None,
1355 internal::None, internal::None, internal::None, internal::None,
1356 internal::None, internal::None, internal::None, internal::None> {
1357 typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1358 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1359 T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
1360};
1361template <typename T1, typename T2, typename T3, typename T4, typename T5,
1362 typename T6, typename T7, typename T8, typename T9, typename T10,
1363 typename T11, typename T12, typename T13, typename T14, typename T15,
1364 typename T16, typename T17, typename T18, typename T19, typename T20,
1365 typename T21, typename T22, typename T23, typename T24, typename T25,
1366 typename T26, typename T27, typename T28, typename T29, typename T30,
1367 typename T31, typename T32, typename T33, typename T34, typename T35,
1368 typename T36>
1369struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1370 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1371 T31, T32, T33, T34, T35, T36, internal::None, internal::None,
1372 internal::None, internal::None, internal::None, internal::None,
1373 internal::None, internal::None, internal::None, internal::None,
1374 internal::None, internal::None, internal::None, internal::None> {
1375 typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1376 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1377 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
1378};
1379template <typename T1, typename T2, typename T3, typename T4, typename T5,
1380 typename T6, typename T7, typename T8, typename T9, typename T10,
1381 typename T11, typename T12, typename T13, typename T14, typename T15,
1382 typename T16, typename T17, typename T18, typename T19, typename T20,
1383 typename T21, typename T22, typename T23, typename T24, typename T25,
1384 typename T26, typename T27, typename T28, typename T29, typename T30,
1385 typename T31, typename T32, typename T33, typename T34, typename T35,
1386 typename T36, typename T37>
1387struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1388 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1389 T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
1390 internal::None, internal::None, internal::None, internal::None,
1391 internal::None, internal::None, internal::None, internal::None,
1392 internal::None, internal::None, internal::None> {
1393 typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1394 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1395 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
1396};
1397template <typename T1, typename T2, typename T3, typename T4, typename T5,
1398 typename T6, typename T7, typename T8, typename T9, typename T10,
1399 typename T11, typename T12, typename T13, typename T14, typename T15,
1400 typename T16, typename T17, typename T18, typename T19, typename T20,
1401 typename T21, typename T22, typename T23, typename T24, typename T25,
1402 typename T26, typename T27, typename T28, typename T29, typename T30,
1403 typename T31, typename T32, typename T33, typename T34, typename T35,
1404 typename T36, typename T37, typename T38>
1405struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1406 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1407 T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
1408 internal::None, internal::None, internal::None, internal::None,
1409 internal::None, internal::None, internal::None, internal::None,
1410 internal::None, internal::None> {
1411 typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1412 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1413 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
1414};
1415template <typename T1, typename T2, typename T3, typename T4, typename T5,
1416 typename T6, typename T7, typename T8, typename T9, typename T10,
1417 typename T11, typename T12, typename T13, typename T14, typename T15,
1418 typename T16, typename T17, typename T18, typename T19, typename T20,
1419 typename T21, typename T22, typename T23, typename T24, typename T25,
1420 typename T26, typename T27, typename T28, typename T29, typename T30,
1421 typename T31, typename T32, typename T33, typename T34, typename T35,
1422 typename T36, typename T37, typename T38, typename T39>
1423struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1424 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1425 T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
1426 internal::None, internal::None, internal::None, internal::None,
1427 internal::None, internal::None, internal::None, internal::None,
1428 internal::None, internal::None> {
1429 typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1430 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1431 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
1432};
1433template <typename T1, typename T2, typename T3, typename T4, typename T5,
1434 typename T6, typename T7, typename T8, typename T9, typename T10,
1435 typename T11, typename T12, typename T13, typename T14, typename T15,
1436 typename T16, typename T17, typename T18, typename T19, typename T20,
1437 typename T21, typename T22, typename T23, typename T24, typename T25,
1438 typename T26, typename T27, typename T28, typename T29, typename T30,
1439 typename T31, typename T32, typename T33, typename T34, typename T35,
1440 typename T36, typename T37, typename T38, typename T39, typename T40>
1441struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1442 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1443 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
1444 internal::None, internal::None, internal::None, internal::None,
1445 internal::None, internal::None, internal::None, internal::None,
1446 internal::None> {
1447 typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1448 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1449 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
1450 T40> type;
1451};
1452template <typename T1, typename T2, typename T3, typename T4, typename T5,
1453 typename T6, typename T7, typename T8, typename T9, typename T10,
1454 typename T11, typename T12, typename T13, typename T14, typename T15,
1455 typename T16, typename T17, typename T18, typename T19, typename T20,
1456 typename T21, typename T22, typename T23, typename T24, typename T25,
1457 typename T26, typename T27, typename T28, typename T29, typename T30,
1458 typename T31, typename T32, typename T33, typename T34, typename T35,
1459 typename T36, typename T37, typename T38, typename T39, typename T40,
1460 typename T41>
1461struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1462 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1463 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
1464 internal::None, internal::None, internal::None, internal::None,
1465 internal::None, internal::None, internal::None, internal::None> {
1466 typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1467 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1468 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1469 T41> type;
1470};
1471template <typename T1, typename T2, typename T3, typename T4, typename T5,
1472 typename T6, typename T7, typename T8, typename T9, typename T10,
1473 typename T11, typename T12, typename T13, typename T14, typename T15,
1474 typename T16, typename T17, typename T18, typename T19, typename T20,
1475 typename T21, typename T22, typename T23, typename T24, typename T25,
1476 typename T26, typename T27, typename T28, typename T29, typename T30,
1477 typename T31, typename T32, typename T33, typename T34, typename T35,
1478 typename T36, typename T37, typename T38, typename T39, typename T40,
1479 typename T41, typename T42>
1480struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1481 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1482 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
1483 internal::None, internal::None, internal::None, internal::None,
1484 internal::None, internal::None, internal::None> {
1485 typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1486 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1487 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1488 T41, T42> type;
1489};
1490template <typename T1, typename T2, typename T3, typename T4, typename T5,
1491 typename T6, typename T7, typename T8, typename T9, typename T10,
1492 typename T11, typename T12, typename T13, typename T14, typename T15,
1493 typename T16, typename T17, typename T18, typename T19, typename T20,
1494 typename T21, typename T22, typename T23, typename T24, typename T25,
1495 typename T26, typename T27, typename T28, typename T29, typename T30,
1496 typename T31, typename T32, typename T33, typename T34, typename T35,
1497 typename T36, typename T37, typename T38, typename T39, typename T40,
1498 typename T41, typename T42, typename T43>
1499struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1500 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1501 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
1502 internal::None, internal::None, internal::None, internal::None,
1503 internal::None, internal::None, internal::None> {
1504 typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1505 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1506 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1507 T41, T42, T43> type;
1508};
1509template <typename T1, typename T2, typename T3, typename T4, typename T5,
1510 typename T6, typename T7, typename T8, typename T9, typename T10,
1511 typename T11, typename T12, typename T13, typename T14, typename T15,
1512 typename T16, typename T17, typename T18, typename T19, typename T20,
1513 typename T21, typename T22, typename T23, typename T24, typename T25,
1514 typename T26, typename T27, typename T28, typename T29, typename T30,
1515 typename T31, typename T32, typename T33, typename T34, typename T35,
1516 typename T36, typename T37, typename T38, typename T39, typename T40,
1517 typename T41, typename T42, typename T43, typename T44>
1518struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1519 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1520 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
1521 internal::None, internal::None, internal::None, internal::None,
1522 internal::None, internal::None> {
1523 typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1524 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1525 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1526 T41, T42, T43, T44> type;
1527};
1528template <typename T1, typename T2, typename T3, typename T4, typename T5,
1529 typename T6, typename T7, typename T8, typename T9, typename T10,
1530 typename T11, typename T12, typename T13, typename T14, typename T15,
1531 typename T16, typename T17, typename T18, typename T19, typename T20,
1532 typename T21, typename T22, typename T23, typename T24, typename T25,
1533 typename T26, typename T27, typename T28, typename T29, typename T30,
1534 typename T31, typename T32, typename T33, typename T34, typename T35,
1535 typename T36, typename T37, typename T38, typename T39, typename T40,
1536 typename T41, typename T42, typename T43, typename T44, typename T45>
1537struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1538 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1539 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1540 internal::None, internal::None, internal::None, internal::None,
1541 internal::None> {
1542 typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1543 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1544 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1545 T41, T42, T43, T44, T45> type;
1546};
1547template <typename T1, typename T2, typename T3, typename T4, typename T5,
1548 typename T6, typename T7, typename T8, typename T9, typename T10,
1549 typename T11, typename T12, typename T13, typename T14, typename T15,
1550 typename T16, typename T17, typename T18, typename T19, typename T20,
1551 typename T21, typename T22, typename T23, typename T24, typename T25,
1552 typename T26, typename T27, typename T28, typename T29, typename T30,
1553 typename T31, typename T32, typename T33, typename T34, typename T35,
1554 typename T36, typename T37, typename T38, typename T39, typename T40,
1555 typename T41, typename T42, typename T43, typename T44, typename T45,
1556 typename T46>
1557struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1558 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1559 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1560 T46, internal::None, internal::None, internal::None, internal::None> {
1561 typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1562 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1563 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1564 T41, T42, T43, T44, T45, T46> type;
1565};
1566template <typename T1, typename T2, typename T3, typename T4, typename T5,
1567 typename T6, typename T7, typename T8, typename T9, typename T10,
1568 typename T11, typename T12, typename T13, typename T14, typename T15,
1569 typename T16, typename T17, typename T18, typename T19, typename T20,
1570 typename T21, typename T22, typename T23, typename T24, typename T25,
1571 typename T26, typename T27, typename T28, typename T29, typename T30,
1572 typename T31, typename T32, typename T33, typename T34, typename T35,
1573 typename T36, typename T37, typename T38, typename T39, typename T40,
1574 typename T41, typename T42, typename T43, typename T44, typename T45,
1575 typename T46, typename T47>
1576struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1577 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1578 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1579 T46, T47, internal::None, internal::None, internal::None> {
1580 typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1581 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1582 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1583 T41, T42, T43, T44, T45, T46, T47> type;
1584};
1585template <typename T1, typename T2, typename T3, typename T4, typename T5,
1586 typename T6, typename T7, typename T8, typename T9, typename T10,
1587 typename T11, typename T12, typename T13, typename T14, typename T15,
1588 typename T16, typename T17, typename T18, typename T19, typename T20,
1589 typename T21, typename T22, typename T23, typename T24, typename T25,
1590 typename T26, typename T27, typename T28, typename T29, typename T30,
1591 typename T31, typename T32, typename T33, typename T34, typename T35,
1592 typename T36, typename T37, typename T38, typename T39, typename T40,
1593 typename T41, typename T42, typename T43, typename T44, typename T45,
1594 typename T46, typename T47, typename T48>
1595struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1596 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1597 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1598 T46, T47, T48, internal::None, internal::None> {
1599 typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1600 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1601 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1602 T41, T42, T43, T44, T45, T46, T47, T48> type;
1603};
1604template <typename T1, typename T2, typename T3, typename T4, typename T5,
1605 typename T6, typename T7, typename T8, typename T9, typename T10,
1606 typename T11, typename T12, typename T13, typename T14, typename T15,
1607 typename T16, typename T17, typename T18, typename T19, typename T20,
1608 typename T21, typename T22, typename T23, typename T24, typename T25,
1609 typename T26, typename T27, typename T28, typename T29, typename T30,
1610 typename T31, typename T32, typename T33, typename T34, typename T35,
1611 typename T36, typename T37, typename T38, typename T39, typename T40,
1612 typename T41, typename T42, typename T43, typename T44, typename T45,
1613 typename T46, typename T47, typename T48, typename T49>
1614struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
1615 T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
1616 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
1617 T46, T47, T48, T49, internal::None> {
1618 typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
1619 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
1620 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
1621 T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
1622};
1623
1624namespace internal {
1625
1626# define GTEST_TEMPLATE_ template <typename T> class102# define GTEST_TEMPLATE_ template <typename T> class
1627 103
1628// The template "selector" struct TemplateSel<Tmpl> is used to104// The template "selector" struct TemplateSel<Tmpl> is used to
@@ -1644,1692 +120,64 @@ struct TemplateSel { · 15 unmodified lines
1644# define GTEST_BIND_(TmplSel, T) \120# define GTEST_BIND_(TmplSel, T) \
1645 TmplSel::template Bind<T>::type121 TmplSel::template Bind<T>::type
1646 122
1647// A unique struct template used as the default value for the123template <GTEST_TEMPLATE_ Head_, GTEST_TEMPLATE_... Tail_>
1648// arguments of class template Templates. This allows us to simulate124struct Templates {
1649// variadic templates (e.g. Templates<int>, Templates<int, double>,125 using Head = TemplateSel<Head_>;
1650// and etc), which C++ doesn't support directly.126 using Tail = Templates<Tail_...>;
1651template <typename T>
1652struct NoneT {};
1653
1654// The following family of struct and struct templates are used to
1655// represent template lists. In particular, TemplatesN<T1, T2, ...,
1656// TN> represents a list of N templates (T1, T2, ..., and TN). Except
1657// for Templates0, every struct in the family has two member types:
1658// Head for the selector of the first template in the list, and Tail
1659// for the rest of the list.
1660
1661// The empty template list.
1662struct Templates0 {};
1663
1664// Template lists of length 1, 2, 3, and so on.
1665
1666template <GTEST_TEMPLATE_ T1>
1667struct Templates1 {
1668 typedef TemplateSel<T1> Head;
1669 typedef Templates0 Tail;
1670};
1671template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
1672struct Templates2 {
1673 typedef TemplateSel<T1> Head;
1674 typedef Templates1<T2> Tail;
1675};
1676
1677template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
1678struct Templates3 {
1679 typedef TemplateSel<T1> Head;
1680 typedef Templates2<T2, T3> Tail;
1681};
1682
1683template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1684 GTEST_TEMPLATE_ T4>
1685struct Templates4 {
1686 typedef TemplateSel<T1> Head;
1687 typedef Templates3<T2, T3, T4> Tail;
1688};
1689
1690template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1691 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
1692struct Templates5 {
1693 typedef TemplateSel<T1> Head;
1694 typedef Templates4<T2, T3, T4, T5> Tail;
1695};
1696
1697template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1698 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
1699struct Templates6 {
1700 typedef TemplateSel<T1> Head;
1701 typedef Templates5<T2, T3, T4, T5, T6> Tail;
1702};
1703
1704template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1705 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1706 GTEST_TEMPLATE_ T7>
1707struct Templates7 {
1708 typedef TemplateSel<T1> Head;
1709 typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
1710};
1711
1712template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1713 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1714 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
1715struct Templates8 {
1716 typedef TemplateSel<T1> Head;
1717 typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
1718};
1719
1720template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1721 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1722 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
1723struct Templates9 {
1724 typedef TemplateSel<T1> Head;
1725 typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
1726};
1727
1728template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1729 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1730 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1731 GTEST_TEMPLATE_ T10>
1732struct Templates10 {
1733 typedef TemplateSel<T1> Head;
1734 typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
1735};
1736
1737template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1738 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1739 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1740 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
1741struct Templates11 {
1742 typedef TemplateSel<T1> Head;
1743 typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
1744};
1745
1746template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1747 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1748 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1749 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
1750struct Templates12 {
1751 typedef TemplateSel<T1> Head;
1752 typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
1753};
1754
1755template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1756 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1757 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1758 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1759 GTEST_TEMPLATE_ T13>
1760struct Templates13 {
1761 typedef TemplateSel<T1> Head;
1762 typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
1763};
1764
1765template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1766 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1767 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1768 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1769 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
1770struct Templates14 {
1771 typedef TemplateSel<T1> Head;
1772 typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
1773 T14> Tail;
1774};
1775
1776template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1777 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1778 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1779 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1780 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
1781struct Templates15 {
1782 typedef TemplateSel<T1> Head;
1783 typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1784 T15> Tail;
1785};
1786
1787template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1788 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1789 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1790 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1791 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1792 GTEST_TEMPLATE_ T16>
1793struct Templates16 {
1794 typedef TemplateSel<T1> Head;
1795 typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1796 T15, T16> Tail;
1797};
1798
1799template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1800 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1801 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1802 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1803 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1804 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
1805struct Templates17 {
1806 typedef TemplateSel<T1> Head;
1807 typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1808 T15, T16, T17> Tail;
1809};
1810
1811template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1812 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1813 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1814 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1815 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1816 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
1817struct Templates18 {
1818 typedef TemplateSel<T1> Head;
1819 typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1820 T15, T16, T17, T18> Tail;
1821};
1822
1823template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1824 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1825 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1826 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1827 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1828 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1829 GTEST_TEMPLATE_ T19>
1830struct Templates19 {
1831 typedef TemplateSel<T1> Head;
1832 typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1833 T15, T16, T17, T18, T19> Tail;
1834};
1835
1836template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1837 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1838 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1839 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1840 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1841 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1842 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
1843struct Templates20 {
1844 typedef TemplateSel<T1> Head;
1845 typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1846 T15, T16, T17, T18, T19, T20> Tail;
1847};
1848
1849template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1850 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1851 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1852 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1853 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1854 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1855 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
1856struct Templates21 {
1857 typedef TemplateSel<T1> Head;
1858 typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1859 T15, T16, T17, T18, T19, T20, T21> Tail;
1860};
1861
1862template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1863 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1864 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1865 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1866 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1867 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1868 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1869 GTEST_TEMPLATE_ T22>
1870struct Templates22 {
1871 typedef TemplateSel<T1> Head;
1872 typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1873 T15, T16, T17, T18, T19, T20, T21, T22> Tail;
1874};
1875
1876template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1877 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1878 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1879 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1880 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1881 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1882 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1883 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
1884struct Templates23 {
1885 typedef TemplateSel<T1> Head;
1886 typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1887 T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
1888};
1889
1890template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1891 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1892 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1893 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1894 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1895 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1896 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1897 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
1898struct Templates24 {
1899 typedef TemplateSel<T1> Head;
1900 typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1901 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
1902};
1903
1904template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1905 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1906 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1907 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1908 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1909 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1910 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1911 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1912 GTEST_TEMPLATE_ T25>
1913struct Templates25 {
1914 typedef TemplateSel<T1> Head;
1915 typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1916 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
1917};
1918
1919template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1920 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1921 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1922 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1923 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1924 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1925 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1926 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1927 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
1928struct Templates26 {
1929 typedef TemplateSel<T1> Head;
1930 typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1931 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
1932};
1933
1934template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1935 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1936 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1937 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1938 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1939 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1940 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1941 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1942 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
1943struct Templates27 {
1944 typedef TemplateSel<T1> Head;
1945 typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1946 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
1947};
1948
1949template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1950 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1951 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1952 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1953 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1954 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1955 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1956 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1957 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1958 GTEST_TEMPLATE_ T28>
1959struct Templates28 {
1960 typedef TemplateSel<T1> Head;
1961 typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1962 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
1963 T28> Tail;
1964};
1965
1966template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1967 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1968 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1969 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1970 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1971 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1972 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1973 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1974 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1975 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
1976struct Templates29 {
1977 typedef TemplateSel<T1> Head;
1978 typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1979 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1980 T29> Tail;
1981};
1982
1983template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1984 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1985 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
1986 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
1987 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
1988 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
1989 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
1990 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
1991 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
1992 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
1993struct Templates30 {
1994 typedef TemplateSel<T1> Head;
1995 typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
1996 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
1997 T29, T30> Tail;
1998};
1999
2000template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2001 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2002 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2003 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2004 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2005 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2006 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2007 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2008 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2009 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2010 GTEST_TEMPLATE_ T31>
2011struct Templates31 {
2012 typedef TemplateSel<T1> Head;
2013 typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2014 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2015 T29, T30, T31> Tail;
2016};
2017
2018template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2019 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2020 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2021 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2022 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2023 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2024 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2025 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2026 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2027 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2028 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
2029struct Templates32 {
2030 typedef TemplateSel<T1> Head;
2031 typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2032 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2033 T29, T30, T31, T32> Tail;
2034};
2035
2036template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2037 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2038 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2039 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2040 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2041 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2042 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2043 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2044 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2045 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2046 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
2047struct Templates33 {
2048 typedef TemplateSel<T1> Head;
2049 typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2050 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2051 T29, T30, T31, T32, T33> Tail;
2052};
2053
2054template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2055 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2056 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2057 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2058 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2059 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2060 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2061 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2062 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2063 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2064 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2065 GTEST_TEMPLATE_ T34>
2066struct Templates34 {
2067 typedef TemplateSel<T1> Head;
2068 typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2069 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2070 T29, T30, T31, T32, T33, T34> Tail;
2071};
2072
2073template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2074 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2075 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2076 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2077 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2078 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2079 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2080 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2081 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2082 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2083 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2084 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
2085struct Templates35 {
2086 typedef TemplateSel<T1> Head;
2087 typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2088 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2089 T29, T30, T31, T32, T33, T34, T35> Tail;
2090};
2091
2092template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2093 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2094 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2095 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2096 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2097 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2098 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2099 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2100 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2101 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2102 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2103 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
2104struct Templates36 {
2105 typedef TemplateSel<T1> Head;
2106 typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2107 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2108 T29, T30, T31, T32, T33, T34, T35, T36> Tail;
2109};
2110
2111template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2112 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2113 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2114 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2115 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2116 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2117 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2118 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2119 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2120 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2121 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2122 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2123 GTEST_TEMPLATE_ T37>
2124struct Templates37 {
2125 typedef TemplateSel<T1> Head;
2126 typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2127 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2128 T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
2129};
2130
2131template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2132 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2133 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2134 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2135 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2136 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2137 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2138 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2139 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2140 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2141 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2142 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2143 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
2144struct Templates38 {
2145 typedef TemplateSel<T1> Head;
2146 typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2147 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2148 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
2149};
2150
2151template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2152 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2153 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2154 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2155 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2156 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2157 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2158 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2159 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2160 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2161 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2162 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2163 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
2164struct Templates39 {
2165 typedef TemplateSel<T1> Head;
2166 typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2167 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2168 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
2169};
2170
2171template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2172 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2173 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2174 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2175 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2176 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2177 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2178 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2179 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2180 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2181 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2182 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2183 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2184 GTEST_TEMPLATE_ T40>
2185struct Templates40 {
2186 typedef TemplateSel<T1> Head;
2187 typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2188 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2189 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
2190};
2191
2192template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2193 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2194 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2195 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2196 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2197 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2198 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2199 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2200 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2201 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2202 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2203 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2204 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2205 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
2206struct Templates41 {
2207 typedef TemplateSel<T1> Head;
2208 typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2209 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2210 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
2211};
2212
2213template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2214 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2215 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2216 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2217 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2218 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2219 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2220 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2221 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2222 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2223 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2224 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2225 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2226 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
2227struct Templates42 {
2228 typedef TemplateSel<T1> Head;
2229 typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2230 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2231 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
2232 T42> Tail;
2233};
2234
2235template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2236 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2237 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2238 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2239 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2240 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2241 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2242 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2243 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2244 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2245 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2246 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2247 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2248 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2249 GTEST_TEMPLATE_ T43>
2250struct Templates43 {
2251 typedef TemplateSel<T1> Head;
2252 typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2253 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2254 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2255 T43> Tail;
2256};
2257
2258template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2259 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2260 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2261 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2262 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2263 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2264 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2265 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2266 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2267 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2268 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2269 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2270 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2271 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2272 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
2273struct Templates44 {
2274 typedef TemplateSel<T1> Head;
2275 typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2276 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2277 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2278 T43, T44> Tail;
2279};
2280
2281template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2282 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2283 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2284 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2285 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2286 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2287 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2288 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2289 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2290 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2291 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2292 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2293 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2294 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2295 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
2296struct Templates45 {
2297 typedef TemplateSel<T1> Head;
2298 typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2299 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2300 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2301 T43, T44, T45> Tail;
2302};
2303
2304template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2305 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2306 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2307 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2308 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2309 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2310 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2311 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2312 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2313 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2314 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2315 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2316 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2317 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2318 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2319 GTEST_TEMPLATE_ T46>
2320struct Templates46 {
2321 typedef TemplateSel<T1> Head;
2322 typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2323 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2324 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2325 T43, T44, T45, T46> Tail;
2326};127};
2327 128
2328template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,129template <GTEST_TEMPLATE_ Head_>
2329 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,130struct Templates<Head_> {
2330 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,131 using Head = TemplateSel<Head_>;
2331 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,132 using Tail = None;
2332 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2333 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2334 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2335 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2336 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2337 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2338 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2339 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2340 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2341 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2342 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2343 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
2344struct Templates47 {
2345 typedef TemplateSel<T1> Head;
2346 typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2347 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2348 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2349 T43, T44, T45, T46, T47> Tail;
2350};133};
2351 134
2352template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,135// Tuple-like type lists
2353 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,136template <typename Head_, typename... Tail_>
2354 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,137struct Types {
2355 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,138 using Head = Head_;
2356 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,139 using Tail = Types<Tail_...>;
2357 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2358 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2359 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2360 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2361 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2362 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2363 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2364 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2365 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2366 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2367 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
2368struct Templates48 {
2369 typedef TemplateSel<T1> Head;
2370 typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2371 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2372 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2373 T43, T44, T45, T46, T47, T48> Tail;
2374};140};
2375 141
2376template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,142template <typename Head_>
2377 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,143struct Types<Head_> {
2378 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,144 using Head = Head_;
2379 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,145 using Tail = None;
2380 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2381 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2382 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2383 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2384 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2385 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2386 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2387 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2388 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2389 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2390 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2391 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
2392 GTEST_TEMPLATE_ T49>
2393struct Templates49 {
2394 typedef TemplateSel<T1> Head;
2395 typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2396 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2397 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2398 T43, T44, T45, T46, T47, T48, T49> Tail;
2399};146};
2400 147
2401template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,148// Helper metafunctions to tell apart a single type from types
2402 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,149// generated by ::testing::Types
2403 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,150template <typename... Ts>
2404 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,151struct ProxyTypeList {
2405 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,152 using type = Types<Ts...>;
2406 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2407 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2408 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2409 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2410 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2411 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2412 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
2413 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
2414 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
2415 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
2416 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
2417 GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
2418struct Templates50 {
2419 typedef TemplateSel<T1> Head;
2420 typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2421 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2422 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
2423 T43, T44, T45, T46, T47, T48, T49, T50> Tail;
2424};153};
2425 154
155template <typename>
156struct is_proxy_type_list : std::false_type {};
2426 157
2427// We don't want to require the users to write TemplatesN<...> directly,158template <typename... Ts>
2428// as that would require them to count the length. Templates<...> is much159struct is_proxy_type_list<ProxyTypeList<Ts...>> : std::true_type {};
2429// easier to write, but generates horrible messages when there is a
2430// compiler error, as gcc insists on printing out each template
2431// argument, even if it has the default value (this means Templates<list>
2432// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
2433// errors).
2434//
2435// Our solution is to combine the best part of the two approaches: a
2436// user would write Templates<T1, ..., TN>, and Google Test will translate
2437// that to TemplatesN<T1, ..., TN> internally to make error messages
2438// readable. The translation is done by the 'type' member of the
2439// Templates template.
2440template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
2441 GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
2442 GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
2443 GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
2444 GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
2445 GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
2446 GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
2447 GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
2448 GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
2449 GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
2450 GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
2451 GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
2452 GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
2453 GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
2454 GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
2455 GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
2456 GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
2457 GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
2458 GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
2459 GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
2460 GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
2461 GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
2462 GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
2463 GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
2464 GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
2465struct Templates {
2466 typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2467 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2468 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
2469 T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
2470};
2471
2472template <>
2473struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2474 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2475 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2476 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2477 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2478 NoneT> {
2479 typedef Templates0 type;
2480};
2481template <GTEST_TEMPLATE_ T1>
2482struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2483 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2484 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2485 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2486 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2487 NoneT> {
2488 typedef Templates1<T1> type;
2489};
2490template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
2491struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2492 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2493 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2494 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2495 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2496 NoneT> {
2497 typedef Templates2<T1, T2> type;
2498};
2499template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
2500struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2501 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2502 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2503 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2504 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2505 typedef Templates3<T1, T2, T3> type;
2506};
2507template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2508 GTEST_TEMPLATE_ T4>
2509struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2510 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2511 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2512 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2513 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2514 typedef Templates4<T1, T2, T3, T4> type;
2515};
2516template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2517 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
2518struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2519 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2520 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2521 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2522 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2523 typedef Templates5<T1, T2, T3, T4, T5> type;
2524};
2525template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2526 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
2527struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
2528 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2529 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2530 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2531 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2532 typedef Templates6<T1, T2, T3, T4, T5, T6> type;
2533};
2534template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2535 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2536 GTEST_TEMPLATE_ T7>
2537struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
2538 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2539 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2540 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2541 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2542 typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
2543};
2544template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2545 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2546 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
2547struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
2548 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2549 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2550 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2551 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2552 typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
2553};
2554template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2555 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2556 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
2557struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
2558 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2559 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2560 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2561 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2562 typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
2563};
2564template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2565 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2566 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2567 GTEST_TEMPLATE_ T10>
2568struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
2569 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2570 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2571 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2572 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2573 typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
2574};
2575template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2576 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2577 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2578 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
2579struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
2580 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2581 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2582 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2583 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2584 typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
2585};
2586template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2587 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2588 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2589 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
2590struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
2591 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2592 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2593 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2594 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2595 typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
2596};
2597template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2598 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2599 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2600 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2601 GTEST_TEMPLATE_ T13>
2602struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
2603 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2604 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2605 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2606 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2607 typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
2608 T13> type;
2609};
2610template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2611 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2612 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2613 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2614 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
2615struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2616 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2617 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2618 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2619 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2620 typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2621 T14> type;
2622};
2623template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2624 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2625 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2626 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2627 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
2628struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2629 T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2630 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2631 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2632 NoneT, NoneT, NoneT, NoneT, NoneT> {
2633 typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2634 T14, T15> type;
2635};
2636template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2637 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2638 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2639 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2640 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2641 GTEST_TEMPLATE_ T16>
2642struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2643 T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2644 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2645 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2646 NoneT, NoneT, NoneT, NoneT, NoneT> {
2647 typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2648 T14, T15, T16> type;
2649};
2650template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2651 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2652 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2653 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2654 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2655 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
2656struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2657 T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2658 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2659 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2660 NoneT, NoneT, NoneT, NoneT, NoneT> {
2661 typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2662 T14, T15, T16, T17> type;
2663};
2664template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2665 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2666 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2667 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2668 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2669 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
2670struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2671 T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2672 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2673 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2674 NoneT, NoneT, NoneT, NoneT> {
2675 typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2676 T14, T15, T16, T17, T18> type;
2677};
2678template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2679 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2680 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2681 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2682 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2683 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2684 GTEST_TEMPLATE_ T19>
2685struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2686 T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2687 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2688 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2689 NoneT, NoneT, NoneT, NoneT> {
2690 typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2691 T14, T15, T16, T17, T18, T19> type;
2692};
2693template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2694 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2695 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2696 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2697 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2698 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2699 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
2700struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2701 T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2702 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2703 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2704 NoneT, NoneT, NoneT, NoneT> {
2705 typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2706 T14, T15, T16, T17, T18, T19, T20> type;
2707};
2708template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2709 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2710 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2711 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2712 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2713 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2714 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
2715struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2716 T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
2717 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2718 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2719 NoneT, NoneT, NoneT, NoneT> {
2720 typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2721 T14, T15, T16, T17, T18, T19, T20, T21> type;
2722};
2723template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2724 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2725 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2726 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2727 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2728 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2729 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2730 GTEST_TEMPLATE_ T22>
2731struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2732 T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
2733 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2734 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2735 NoneT, NoneT, NoneT> {
2736 typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2737 T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
2738};
2739template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2740 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2741 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2742 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2743 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2744 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2745 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2746 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
2747struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2748 T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
2749 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2750 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2751 NoneT, NoneT, NoneT> {
2752 typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2753 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
2754};
2755template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2756 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2757 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2758 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2759 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2760 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2761 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2762 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
2763struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2764 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
2765 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2766 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2767 NoneT, NoneT, NoneT> {
2768 typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2769 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
2770};
2771template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2772 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2773 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2774 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2775 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2776 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2777 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2778 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2779 GTEST_TEMPLATE_ T25>
2780struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2781 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
2782 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2783 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2784 NoneT, NoneT> {
2785 typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2786 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
2787};
2788template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2789 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2790 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2791 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2792 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2793 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2794 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2795 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2796 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
2797struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2798 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
2799 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2800 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2801 NoneT, NoneT> {
2802 typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2803 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
2804};
2805template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2806 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2807 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2808 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2809 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2810 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2811 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2812 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2813 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
2814struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2815 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
2816 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2817 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2818 NoneT, NoneT> {
2819 typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2820 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
2821 T27> type;
2822};
2823template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2824 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2825 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2826 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2827 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2828 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2829 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2830 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2831 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2832 GTEST_TEMPLATE_ T28>
2833struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2834 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
2835 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2836 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2837 NoneT, NoneT> {
2838 typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2839 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2840 T28> type;
2841};
2842template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2843 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2844 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2845 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2846 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2847 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2848 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2849 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2850 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2851 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
2852struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2853 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2854 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2855 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2856 NoneT> {
2857 typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2858 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2859 T28, T29> type;
2860};
2861template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2862 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2863 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2864 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2865 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2866 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2867 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2868 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2869 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2870 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
2871struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2872 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2873 T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2874 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2875 typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2876 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2877 T28, T29, T30> type;
2878};
2879template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2880 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2881 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2882 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2883 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2884 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2885 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2886 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2887 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2888 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2889 GTEST_TEMPLATE_ T31>
2890struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2891 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2892 T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2893 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2894 typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2895 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2896 T28, T29, T30, T31> type;
2897};
2898template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2899 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2900 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2901 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2902 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2903 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2904 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2905 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2906 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2907 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2908 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
2909struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2910 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2911 T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2912 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2913 typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2914 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2915 T28, T29, T30, T31, T32> type;
2916};
2917template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2918 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2919 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2920 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2921 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2922 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2923 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2924 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2925 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2926 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2927 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
2928struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2929 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2930 T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2931 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2932 typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2933 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2934 T28, T29, T30, T31, T32, T33> type;
2935};
2936template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2937 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2938 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2939 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2940 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2941 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2942 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2943 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2944 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2945 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2946 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2947 GTEST_TEMPLATE_ T34>
2948struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2949 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2950 T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2951 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2952 typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2953 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2954 T28, T29, T30, T31, T32, T33, T34> type;
2955};
2956template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2957 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2958 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2959 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2960 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2961 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2962 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2963 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2964 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2965 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2966 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2967 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
2968struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2969 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2970 T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
2971 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2972 typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2973 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2974 T28, T29, T30, T31, T32, T33, T34, T35> type;
2975};
2976template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2977 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2978 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2979 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2980 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
2981 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
2982 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
2983 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
2984 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
2985 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
2986 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
2987 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
2988struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
2989 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
2990 T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
2991 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
2992 typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
2993 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
2994 T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
2995};
2996template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2997 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2998 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2999 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3000 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3001 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3002 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3003 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3004 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3005 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3006 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3007 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3008 GTEST_TEMPLATE_ T37>
3009struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3010 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3011 T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
3012 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3013 typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3014 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3015 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
3016};
3017template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3018 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3019 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3020 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3021 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3022 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3023 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3024 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3025 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3026 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3027 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3028 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3029 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
3030struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3031 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3032 T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
3033 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3034 typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3035 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3036 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
3037};
3038template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3039 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3040 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3041 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3042 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3043 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3044 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3045 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3046 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3047 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3048 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3049 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3050 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
3051struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3052 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3053 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
3054 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3055 typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3056 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3057 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
3058};
3059template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3060 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3061 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3062 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3063 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3064 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3065 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3066 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3067 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3068 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3069 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3070 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3071 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3072 GTEST_TEMPLATE_ T40>
3073struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3074 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3075 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
3076 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3077 typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3078 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3079 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
3080};
3081template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3082 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3083 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3084 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3085 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3086 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3087 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3088 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3089 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3090 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3091 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3092 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3093 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3094 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
3095struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3096 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3097 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
3098 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3099 typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3100 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3101 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3102 T41> type;
3103};
3104template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3105 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3106 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3107 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3108 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3109 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3110 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3111 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3112 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3113 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3114 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3115 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3116 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3117 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
3118struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3119 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3120 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
3121 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3122 typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3123 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3124 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3125 T42> type;
3126};
3127template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3128 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3129 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3130 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3131 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3132 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3133 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3134 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3135 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3136 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3137 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3138 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3139 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3140 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3141 GTEST_TEMPLATE_ T43>
3142struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3143 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3144 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3145 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3146 typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3147 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3148 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3149 T42, T43> type;
3150};
3151template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3152 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3153 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3154 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3155 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3156 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3157 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3158 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3159 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3160 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3161 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3162 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3163 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3164 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3165 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
3166struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3167 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3168 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3169 NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
3170 typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3171 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3172 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3173 T42, T43, T44> type;
3174};
3175template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3176 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3177 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3178 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3179 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3180 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3181 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3182 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3183 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3184 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3185 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3186 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3187 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3188 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3189 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
3190struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3191 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3192 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3193 T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
3194 typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3195 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3196 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3197 T42, T43, T44, T45> type;
3198};
3199template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3200 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3201 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3202 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3203 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3204 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3205 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3206 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3207 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3208 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3209 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3210 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3211 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3212 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3213 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3214 GTEST_TEMPLATE_ T46>
3215struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3216 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3217 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3218 T45, T46, NoneT, NoneT, NoneT, NoneT> {
3219 typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3220 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3221 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3222 T42, T43, T44, T45, T46> type;
3223};
3224template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3225 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3226 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3227 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3228 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3229 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3230 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3231 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3232 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3233 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3234 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3235 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3236 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3237 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3238 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3239 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
3240struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3241 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3242 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3243 T45, T46, T47, NoneT, NoneT, NoneT> {
3244 typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3245 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3246 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3247 T42, T43, T44, T45, T46, T47> type;
3248};
3249template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3250 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3251 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3252 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3253 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3254 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3255 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3256 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3257 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3258 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3259 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3260 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3261 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3262 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3263 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3264 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
3265struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3266 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3267 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3268 T45, T46, T47, T48, NoneT, NoneT> {
3269 typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3270 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3271 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3272 T42, T43, T44, T45, T46, T47, T48> type;
3273};
3274template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
3275 GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
3276 GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
3277 GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
3278 GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
3279 GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
3280 GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
3281 GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
3282 GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
3283 GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
3284 GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
3285 GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
3286 GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
3287 GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
3288 GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
3289 GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
3290 GTEST_TEMPLATE_ T49>
3291struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
3292 T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
3293 T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
3294 T45, T46, T47, T48, T49, NoneT> {
3295 typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3296 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
3297 T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
3298 T42, T43, T44, T45, T46, T47, T48, T49> type;
3299};
3300
3301// The TypeList template makes it possible to use either a single type
3302// or a Types<...> list in TYPED_TEST_SUITE() and
3303// INSTANTIATE_TYPED_TEST_SUITE_P().
3304 160
161// Generator which conditionally creates type lists.
162// It recognizes if a requested type list should be created
163// and prevents creating a new type list nested within another one.
3305template <typename T>164template <typename T>
3306struct TypeList {165struct GenerateTypeList {
3307 typedef Types1<T> type;166 private:
3308};167 using proxy = typename std::conditional<is_proxy_type_list<T>::value, T,
168 ProxyTypeList<T>>::type;
3309 169
3310template <typename T1, typename T2, typename T3, typename T4, typename T5,170 public:
3311 typename T6, typename T7, typename T8, typename T9, typename T10,171 using type = typename proxy::type;
3312 typename T11, typename T12, typename T13, typename T14, typename T15,
3313 typename T16, typename T17, typename T18, typename T19, typename T20,
3314 typename T21, typename T22, typename T23, typename T24, typename T25,
3315 typename T26, typename T27, typename T28, typename T29, typename T30,
3316 typename T31, typename T32, typename T33, typename T34, typename T35,
3317 typename T36, typename T37, typename T38, typename T39, typename T40,
3318 typename T41, typename T42, typename T43, typename T44, typename T45,
3319 typename T46, typename T47, typename T48, typename T49, typename T50>
3320struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
3321 T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
3322 T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
3323 T44, T45, T46, T47, T48, T49, T50> > {
3324 typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
3325 T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
3326 T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
3327 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
3328};172};
3329 173
3330#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P174#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3331 175
3332} // namespace internal176} // namespace internal
177
178template <typename... Ts>
179using Types = internal::ProxyTypeList<Ts...>;
180
3333} // namespace testing181} // namespace testing
3334 182
3335#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_183#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
third_party/googletest/src/include/gtest/internal/gtest-type-util.h.pump+0−302
@@ -1,302 +0,0 @@
1$$ -*- mode: c++; -*-
2$var n = 50 $$ Maximum length of type lists we want to support.
3// Copyright 2008 Google Inc.
4// All Rights Reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// * Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12// * Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16// * Neither the name of Google Inc. nor the names of its
17// contributors may be used to endorse or promote products derived from
18// this software without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32
33// Type utilities needed for implementing typed and type-parameterized
34// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
35//
36// Currently we support at most $n types in a list, and at most $n
37// type-parameterized tests in one type-parameterized test suite.
38// Please contact googletestframework@googlegroups.com if you need
39// more.
40
41// GOOGLETEST_CM0001 DO NOT DELETE
42
43#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
44#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
45
46#include "gtest/internal/gtest-port.h"
47
48// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
49// libstdc++ (which is where cxxabi.h comes from).
50# if GTEST_HAS_CXXABI_H_
51# include <cxxabi.h>
52# elif defined(__HP_aCC)
53# include <acxx_demangle.h>
54# endif // GTEST_HASH_CXXABI_H_
55
56namespace testing {
57namespace internal {
58
59// Canonicalizes a given name with respect to the Standard C++ Library.
60// This handles removing the inline namespace within `std` that is
61// used by various standard libraries (e.g., `std::__1`). Names outside
62// of namespace std are returned unmodified.
63inline std::string CanonicalizeForStdLibVersioning(std::string s) {
64 static const char prefix[] = "std::__";
65 if (s.compare(0, strlen(prefix), prefix) == 0) {
66 std::string::size_type end = s.find("::", strlen(prefix));
67 if (end != s.npos) {
68 // Erase everything between the initial `std` and the second `::`.
69 s.erase(strlen("std"), end - strlen("std"));
70 }
71 }
72 return s;
73}
74
75// GetTypeName<T>() returns a human-readable name of type T.
76// NB: This function is also used in Google Mock, so don't move it inside of
77// the typed-test-only section below.
78template <typename T>
79std::string GetTypeName() {
80# if GTEST_HAS_RTTI
81
82 const char* const name = typeid(T).name();
83# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
84 int status = 0;
85 // gcc's implementation of typeid(T).name() mangles the type name,
86 // so we have to demangle it.
87# if GTEST_HAS_CXXABI_H_
88 using abi::__cxa_demangle;
89# endif // GTEST_HAS_CXXABI_H_
90 char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status);
91 const std::string name_str(status == 0 ? readable_name : name);
92 free(readable_name);
93 return CanonicalizeForStdLibVersioning(name_str);
94# else
95 return name;
96# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
97
98# else
99
100 return "<type>";
101
102# endif // GTEST_HAS_RTTI
103}
104
105#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
106
107// A unique type used as the default value for the arguments of class
108// template Types. This allows us to simulate variadic templates
109// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
110// support directly.
111struct None {};
112
113// The following family of struct and struct templates are used to
114// represent type lists. In particular, TypesN<T1, T2, ..., TN>
115// represents a type list with N types (T1, T2, ..., and TN) in it.
116// Except for Types0, every struct in the family has two member types:
117// Head for the first type in the list, and Tail for the rest of the
118// list.
119
120// The empty type list.
121struct Types0 {};
122
123// Type lists of length 1, 2, 3, and so on.
124
125template <typename T1>
126struct Types1 {
127 typedef T1 Head;
128 typedef Types0 Tail;
129};
130
131$range i 2..n
132
133$for i [[
134$range j 1..i
135$range k 2..i
136template <$for j, [[typename T$j]]>
137struct Types$i {
138 typedef T1 Head;
139 typedef Types$(i-1)<$for k, [[T$k]]> Tail;
140};
141
142
143]]
144
145} // namespace internal
146
147// We don't want to require the users to write TypesN<...> directly,
148// as that would require them to count the length. Types<...> is much
149// easier to write, but generates horrible messages when there is a
150// compiler error, as gcc insists on printing out each template
151// argument, even if it has the default value (this means Types<int>
152// will appear as Types<int, None, None, ..., None> in the compiler
153// errors).
154//
155// Our solution is to combine the best part of the two approaches: a
156// user would write Types<T1, ..., TN>, and Google Test will translate
157// that to TypesN<T1, ..., TN> internally to make error messages
158// readable. The translation is done by the 'type' member of the
159// Types template.
160
161$range i 1..n
162template <$for i, [[typename T$i = internal::None]]>
163struct Types {
164 typedef internal::Types$n<$for i, [[T$i]]> type;
165};
166
167template <>
168struct Types<$for i, [[internal::None]]> {
169 typedef internal::Types0 type;
170};
171
172$range i 1..n-1
173$for i [[
174$range j 1..i
175$range k i+1..n
176template <$for j, [[typename T$j]]>
177struct Types<$for j, [[T$j]]$for k[[, internal::None]]> {
178 typedef internal::Types$i<$for j, [[T$j]]> type;
179};
180
181]]
182
183namespace internal {
184
185# define GTEST_TEMPLATE_ template <typename T> class
186
187// The template "selector" struct TemplateSel<Tmpl> is used to
188// represent Tmpl, which must be a class template with one type
189// parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined
190// as the type Tmpl<T>. This allows us to actually instantiate the
191// template "selected" by TemplateSel<Tmpl>.
192//
193// This trick is necessary for simulating typedef for class templates,
194// which C++ doesn't support directly.
195template <GTEST_TEMPLATE_ Tmpl>
196struct TemplateSel {
197 template <typename T>
198 struct Bind {
199 typedef Tmpl<T> type;
200 };
201};
202
203# define GTEST_BIND_(TmplSel, T) \
204 TmplSel::template Bind<T>::type
205
206// A unique struct template used as the default value for the
207// arguments of class template Templates. This allows us to simulate
208// variadic templates (e.g. Templates<int>, Templates<int, double>,
209// and etc), which C++ doesn't support directly.
210template <typename T>
211struct NoneT {};
212
213// The following family of struct and struct templates are used to
214// represent template lists. In particular, TemplatesN<T1, T2, ...,
215// TN> represents a list of N templates (T1, T2, ..., and TN). Except
216// for Templates0, every struct in the family has two member types:
217// Head for the selector of the first template in the list, and Tail
218// for the rest of the list.
219
220// The empty template list.
221struct Templates0 {};
222
223// Template lists of length 1, 2, 3, and so on.
224
225template <GTEST_TEMPLATE_ T1>
226struct Templates1 {
227 typedef TemplateSel<T1> Head;
228 typedef Templates0 Tail;
229};
230
231$range i 2..n
232
233$for i [[
234$range j 1..i
235$range k 2..i
236template <$for j, [[GTEST_TEMPLATE_ T$j]]>
237struct Templates$i {
238 typedef TemplateSel<T1> Head;
239 typedef Templates$(i-1)<$for k, [[T$k]]> Tail;
240};
241
242
243]]
244
245// We don't want to require the users to write TemplatesN<...> directly,
246// as that would require them to count the length. Templates<...> is much
247// easier to write, but generates horrible messages when there is a
248// compiler error, as gcc insists on printing out each template
249// argument, even if it has the default value (this means Templates<list>
250// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
251// errors).
252//
253// Our solution is to combine the best part of the two approaches: a
254// user would write Templates<T1, ..., TN>, and Google Test will translate
255// that to TemplatesN<T1, ..., TN> internally to make error messages
256// readable. The translation is done by the 'type' member of the
257// Templates template.
258
259$range i 1..n
260template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]>
261struct Templates {
262 typedef Templates$n<$for i, [[T$i]]> type;
263};
264
265template <>
266struct Templates<$for i, [[NoneT]]> {
267 typedef Templates0 type;
268};
269
270$range i 1..n-1
271$for i [[
272$range j 1..i
273$range k i+1..n
274template <$for j, [[GTEST_TEMPLATE_ T$j]]>
275struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> {
276 typedef Templates$i<$for j, [[T$j]]> type;
277};
278
279]]
280
281// The TypeList template makes it possible to use either a single type
282// or a Types<...> list in TYPED_TEST_SUITE() and
283// INSTANTIATE_TYPED_TEST_SUITE_P().
284
285template <typename T>
286struct TypeList {
287 typedef Types1<T> type;
288};
289
290
291$range i 1..n
292template <$for i, [[typename T$i]]>
293struct TypeList<Types<$for i, [[T$i]]> > {
294 typedef typename Types<$for i, [[T$i]]>::type type;
295};
296
297#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
298
299} // namespace internal
300} // namespace testing
301
302#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
third_party/googletest/src/src/gtest-death-test.cc+1−1
@@ -1364,7 +1364,7 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { · 1363 unmodified lines
1364 1364
1365 if (!use_fork) {1365 if (!use_fork) {
1366 static const bool stack_grows_down = StackGrowsDown();1366 static const bool stack_grows_down = StackGrowsDown();
1367 const auto stack_size = static_cast<size_t>(getpagesize());1367 const auto stack_size = static_cast<size_t>(getpagesize() * 2);
1368 // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.1368 // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.
1369 void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE,1369 void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE,
1370 MAP_ANON | MAP_PRIVATE, -1, 0);1370 MAP_ANON | MAP_PRIVATE, -1, 0);
third_party/googletest/src/src/gtest-filepath.cc+4−1
@@ -93,7 +93,7 @@ static bool IsPathSeparator(char c) { · 92 unmodified lines
93// Returns the current working directory, or "" if unsuccessful.93// Returns the current working directory, or "" if unsuccessful.
94FilePath FilePath::GetCurrentDir() {94FilePath FilePath::GetCurrentDir() {
95#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \95#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
96 GTEST_OS_WINDOWS_RT || ARDUINO || defined(ESP_PLATFORM)96 GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_ESP32
97 // These platforms do not have a current directory, so we just return97 // These platforms do not have a current directory, so we just return
98 // something reasonable.98 // something reasonable.
99 return FilePath(kCurrentDirectoryString);99 return FilePath(kCurrentDirectoryString);
@@ -323,6 +323,9 @@ bool FilePath::CreateFolder() const { · 223 unmodified lines
323 delete [] unicode;323 delete [] unicode;
324#elif GTEST_OS_WINDOWS324#elif GTEST_OS_WINDOWS
325 int result = _mkdir(pathname_.c_str());325 int result = _mkdir(pathname_.c_str());
326#elif GTEST_OS_ESP8266
327 // do nothing
328 int result = 0;
326#else329#else
327 int result = mkdir(pathname_.c_str(), 0777);330 int result = mkdir(pathname_.c_str(), 0777);
328#endif // GTEST_OS_WINDOWS_MOBILE331#endif // GTEST_OS_WINDOWS_MOBILE
third_party/googletest/src/src/gtest-internal-inl.h+30−23
@@ -42,6 +42,7 @@ · 41 unmodified lines
42#include <string.h> // For memmove.42#include <string.h> // For memmove.
43 43
44#include <algorithm>44#include <algorithm>
45#include <cstdint>
45#include <memory>46#include <memory>
46#include <string>47#include <string>
47#include <vector>48#include <vector>
@@ -123,11 +124,11 @@ GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); · 75 unmodified lines
123// On success, stores the value of the flag in *value, and returns124// On success, stores the value of the flag in *value, and returns
124// true. On failure, returns false without changing *value.125// true. On failure, returns false without changing *value.
125GTEST_API_ bool ParseInt32Flag(126GTEST_API_ bool ParseInt32Flag(
126 const char* str, const char* flag, Int32* value);127 const char* str, const char* flag, int32_t* value);
127 128
128// Returns a random seed in range [1, kMaxRandomSeed] based on the129// Returns a random seed in range [1, kMaxRandomSeed] based on the
129// given --gtest_random_seed flag value.130// given --gtest_random_seed flag value.
130inline int GetRandomSeedFromFlag(Int32 random_seed_flag) {131inline int GetRandomSeedFromFlag(int32_t random_seed_flag) {
131 const unsigned int raw_seed = (random_seed_flag == 0) ?132 const unsigned int raw_seed = (random_seed_flag == 0) ?
132 static_cast<unsigned int>(GetTimeInMillis()) :133 static_cast<unsigned int>(GetTimeInMillis()) :
133 static_cast<unsigned int>(random_seed_flag);134 static_cast<unsigned int>(random_seed_flag);
@@ -213,10 +214,10 @@ class GTestFlagSaver { · 79 unmodified lines
213 std::string output_;214 std::string output_;
214 bool print_time_;215 bool print_time_;
215 bool print_utf8_;216 bool print_utf8_;
216 internal::Int32 random_seed_;217 int32_t random_seed_;
217 internal::Int32 repeat_;218 int32_t repeat_;
218 bool shuffle_;219 bool shuffle_;
219 internal::Int32 stack_trace_depth_;220 int32_t stack_trace_depth_;
220 std::string stream_result_to_;221 std::string stream_result_to_;
221 bool throw_on_failure_;222 bool throw_on_failure_;
222} GTEST_ATTRIBUTE_UNUSED_;223} GTEST_ATTRIBUTE_UNUSED_;
@@ -227,7 +228,7 @@ class GTestFlagSaver { · 4 unmodified lines
227// If the code_point is not a valid Unicode code point228// If the code_point is not a valid Unicode code point
228// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted229// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted
229// to "(Invalid Unicode 0xXXXXXXXX)".230// to "(Invalid Unicode 0xXXXXXXXX)".
230GTEST_API_ std::string CodePointToUtf8(UInt32 code_point);231GTEST_API_ std::string CodePointToUtf8(uint32_t code_point);
231 232
232// Converts a wide string to a narrow string in UTF-8 encoding.233// Converts a wide string to a narrow string in UTF-8 encoding.
233// The wide string is assumed to have the following encoding:234// The wide string is assumed to have the following encoding:
@@ -260,10 +261,10 @@ GTEST_API_ bool ShouldShard(const char* total_shards_str, · 26 unmodified lines
260 const char* shard_index_str,261 const char* shard_index_str,
261 bool in_subprocess_for_death_test);262 bool in_subprocess_for_death_test);
262 263
263// Parses the environment variable var as an Int32. If it is unset,264// Parses the environment variable var as a 32-bit integer. If it is unset,
264// returns default_val. If it is not an Int32, prints an error and265// returns default_val. If it is not a 32-bit integer, prints an error and
265// and aborts.266// and aborts.
266GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val);267GTEST_API_ int32_t Int32FromEnvOrDie(const char* env_var, int32_t default_val);
267 268
268// Given the total number of shards, the shard index, and the test id,269// Given the total number of shards, the shard index, and the test id,
269// returns true if and only if the test should be run on this shard. The test id270// returns true if and only if the test should be run on this shard. The test id
@@ -323,7 +324,7 @@ void ShuffleRange(internal::Random* random, int begin, int end, · 53 unmodified lines
323 const int last_in_range = begin + range_width - 1;324 const int last_in_range = begin + range_width - 1;
324 const int selected =325 const int selected =
325 begin +326 begin +
326 static_cast<int>(random->Generate(static_cast<UInt32>(range_width)));327 static_cast<int>(random->Generate(static_cast<uint32_t>(range_width)));
327 std::swap((*v)[static_cast<size_t>(selected)],328 std::swap((*v)[static_cast<size_t>(selected)],
328 (*v)[static_cast<size_t>(last_in_range)]);329 (*v)[static_cast<size_t>(last_in_range)]);
329 }330 }
@@ -697,6 +698,17 @@ class GTEST_API_ UnitTestImpl { · 367 unmodified lines
697 return parameterized_test_registry_;698 return parameterized_test_registry_;
698 }699 }
699 700
701 std::set<std::string>* ignored_parameterized_test_suites() {
702 return &ignored_parameterized_test_suites_;
703 }
704
705 // Returns TypeParameterizedTestSuiteRegistry object used to keep track of
706 // type-parameterized tests and instantiations of them.
707 internal::TypeParameterizedTestSuiteRegistry&
708 type_parameterized_test_registry() {
709 return type_parameterized_test_registry_;
710 }
711
700 // Sets the TestSuite object for the test that's currently running.712 // Sets the TestSuite object for the test that's currently running.
701 void set_current_test_suite(TestSuite* a_current_test_suite) {713 void set_current_test_suite(TestSuite* a_current_test_suite) {
702 current_test_suite_ = a_current_test_suite;714 current_test_suite_ = a_current_test_suite;
@@ -873,6 +885,12 @@ class GTEST_API_ UnitTestImpl { · 170 unmodified lines
873 // ParameterizedTestRegistry object used to register value-parameterized885 // ParameterizedTestRegistry object used to register value-parameterized
874 // tests.886 // tests.
875 internal::ParameterizedTestSuiteRegistry parameterized_test_registry_;887 internal::ParameterizedTestSuiteRegistry parameterized_test_registry_;
888 internal::TypeParameterizedTestSuiteRegistry
889 type_parameterized_test_registry_;
890
891 // The set holding the name of parameterized
892 // test suites that may go uninstantiated.
893 std::set<std::string> ignored_parameterized_test_suites_;
876 894
877 // Indicates whether RegisterParameterizedTests() has been called already.895 // Indicates whether RegisterParameterizedTests() has been called already.
878 bool parameterized_tests_registered_;896 bool parameterized_tests_registered_;
@@ -999,20 +1017,9 @@ bool ParseNaturalNumber(const ::std::string& str, Integer* number) { · 120 unmodified lines
999 char* end;1017 char* end;
1000 // BiggestConvertible is the largest integer type that system-provided1018 // BiggestConvertible is the largest integer type that system-provided
1001 // string-to-number conversion routines can return.1019 // string-to-number conversion routines can return.
1020 using BiggestConvertible = unsigned long long; // NOLINT
1002 1021
1003# if GTEST_OS_WINDOWS && !defined(__GNUC__)1022 const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); // NOLINT
1004
1005 // MSVC and C++ Builder define __int64 instead of the standard long long.
1006 typedef unsigned __int64 BiggestConvertible;
1007 const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10);
1008
1009# else
1010
1011 typedef unsigned long long BiggestConvertible; // NOLINT
1012 const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);
1013
1014# endif // GTEST_OS_WINDOWS && !defined(__GNUC__)
1015
1016 const bool parse_success = *end == '\0' && errno == 0;1023 const bool parse_success = *end == '\0' && errno == 0;
1017 1024
1018 GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));1025 GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));
third_party/googletest/src/src/gtest-matchers.cc+14−14
@@ -58,40 +58,40 @@ Matcher<std::string>::Matcher(const std::string& s) { *this = Eq(s); } · 57 unmodified lines
58// s.58// s.
59Matcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); }59Matcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); }
60 60
61#if GTEST_HAS_ABSL61#if GTEST_INTERNAL_HAS_STRING_VIEW
62// Constructs a matcher that matches a const absl::string_view& whose value is62// Constructs a matcher that matches a const StringView& whose value is
63// equal to s.63// equal to s.
64Matcher<const absl::string_view&>::Matcher(const std::string& s) {64Matcher<const internal::StringView&>::Matcher(const std::string& s) {
65 *this = Eq(s);65 *this = Eq(s);
66}66}
67 67
68// Constructs a matcher that matches a const absl::string_view& whose value is68// Constructs a matcher that matches a const StringView& whose value is
69// equal to s.69// equal to s.
70Matcher<const absl::string_view&>::Matcher(const char* s) {70Matcher<const internal::StringView&>::Matcher(const char* s) {
71 *this = Eq(std::string(s));71 *this = Eq(std::string(s));
72}72}
73 73
74// Constructs a matcher that matches a const absl::string_view& whose value is74// Constructs a matcher that matches a const StringView& whose value is
75// equal to s.75// equal to s.
76Matcher<const absl::string_view&>::Matcher(absl::string_view s) {76Matcher<const internal::StringView&>::Matcher(internal::StringView s) {
77 *this = Eq(std::string(s));77 *this = Eq(std::string(s));
78}78}
79 79
80// Constructs a matcher that matches a absl::string_view whose value is equal to80// Constructs a matcher that matches a StringView whose value is equal to
81// s.81// s.
82Matcher<absl::string_view>::Matcher(const std::string& s) { *this = Eq(s); }82Matcher<internal::StringView>::Matcher(const std::string& s) { *this = Eq(s); }
83 83
84// Constructs a matcher that matches a absl::string_view whose value is equal to84// Constructs a matcher that matches a StringView whose value is equal to
85// s.85// s.
86Matcher<absl::string_view>::Matcher(const char* s) {86Matcher<internal::StringView>::Matcher(const char* s) {
87 *this = Eq(std::string(s));87 *this = Eq(std::string(s));
88}88}
89 89
90// Constructs a matcher that matches a absl::string_view whose value is equal to90// Constructs a matcher that matches a StringView whose value is equal to
91// s.91// s.
92Matcher<absl::string_view>::Matcher(absl::string_view s) {92Matcher<internal::StringView>::Matcher(internal::StringView s) {
93 *this = Eq(std::string(s));93 *this = Eq(std::string(s));
94}94}
95#endif // GTEST_HAS_ABSL95#endif // GTEST_INTERNAL_HAS_STRING_VIEW
96 96
97} // namespace testing97} // namespace testing
third_party/googletest/src/src/gtest-port.cc+10−6
@@ -34,6 +34,7 @@ · 33 unmodified lines
34#include <stdio.h>34#include <stdio.h>
35#include <stdlib.h>35#include <stdlib.h>
36#include <string.h>36#include <string.h>
37#include <cstdint>
37#include <fstream>38#include <fstream>
38#include <memory>39#include <memory>
39 40
@@ -536,6 +537,9 @@ class ThreadLocalRegistryImpl { · 496 unmodified lines
536 // Returns a value that can be used to identify the thread from other threads.537 // Returns a value that can be used to identify the thread from other threads.
537 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(538 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
538 const ThreadLocalBase* thread_local_instance) {539 const ThreadLocalBase* thread_local_instance) {
540#ifdef _MSC_VER
541 MemoryIsNotDeallocated memory_is_not_deallocated;
542#endif // _MSC_VER
539 DWORD current_thread = ::GetCurrentThreadId();543 DWORD current_thread = ::GetCurrentThreadId();
540 MutexLock lock(&mutex_);544 MutexLock lock(&mutex_);
541 ThreadIdToThreadLocals* const thread_to_thread_locals =545 ThreadIdToThreadLocals* const thread_to_thread_locals =
@@ -1286,7 +1290,7 @@ static std::string FlagToEnvVar(const char* flag) { · 744 unmodified lines
1286// Parses 'str' for a 32-bit signed integer. If successful, writes1290// Parses 'str' for a 32-bit signed integer. If successful, writes
1287// the result to *value and returns true; otherwise leaves *value1291// the result to *value and returns true; otherwise leaves *value
1288// unchanged and returns false.1292// unchanged and returns false.
1289bool ParseInt32(const Message& src_text, const char* str, Int32* value) {1293bool ParseInt32(const Message& src_text, const char* str, int32_t* value) {
1290 // Parses the environment variable as a decimal integer.1294 // Parses the environment variable as a decimal integer.
1291 char* end = nullptr;1295 char* end = nullptr;
1292 const long long_value = strtol(str, &end, 10); // NOLINT1296 const long long_value = strtol(str, &end, 10); // NOLINT
@@ -1303,13 +1307,13 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value) { · 10 unmodified lines
1303 return false;1307 return false;
1304 }1308 }
1305 1309
1306 // Is the parsed value in the range of an Int32?1310 // Is the parsed value in the range of an int32_t?
1307 const Int32 result = static_cast<Int32>(long_value);1311 const auto result = static_cast<int32_t>(long_value);
1308 if (long_value == LONG_MAX || long_value == LONG_MIN ||1312 if (long_value == LONG_MAX || long_value == LONG_MIN ||
1309 // The parsed value overflows as a long. (strtol() returns1313 // The parsed value overflows as a long. (strtol() returns
1310 // LONG_MAX or LONG_MIN when the input overflows.)1314 // LONG_MAX or LONG_MIN when the input overflows.)
1311 result != long_value1315 result != long_value
1312 // The parsed value overflows as an Int32.1316 // The parsed value overflows as an int32_t.
1313 ) {1317 ) {
1314 Message msg;1318 Message msg;
1315 msg << "WARNING: " << src_text1319 msg << "WARNING: " << src_text
@@ -1342,7 +1346,7 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) { · 26 unmodified lines
1342// Reads and returns a 32-bit integer stored in the environment1346// Reads and returns a 32-bit integer stored in the environment
1343// variable corresponding to the given flag; if it isn't set or1347// variable corresponding to the given flag; if it isn't set or
1344// doesn't represent a valid 32-bit integer, returns default_value.1348// doesn't represent a valid 32-bit integer, returns default_value.
1345Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {1349int32_t Int32FromGTestEnv(const char* flag, int32_t default_value) {
1346#if defined(GTEST_GET_INT32_FROM_ENV_)1350#if defined(GTEST_GET_INT32_FROM_ENV_)
1347 return GTEST_GET_INT32_FROM_ENV_(flag, default_value);1351 return GTEST_GET_INT32_FROM_ENV_(flag, default_value);
1348#else1352#else
@@ -1353,7 +1357,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { · 4 unmodified lines
1353 return default_value;1357 return default_value;
1354 }1358 }
1355 1359
1356 Int32 result = default_value;1360 int32_t result = default_value;
1357 if (!ParseInt32(Message() << "Environment variable " << env_var,1361 if (!ParseInt32(Message() << "Environment variable " << env_var,
1358 string_value, &result)) {1362 string_value, &result)) {
1359 printf("The default value %s is used.\n",1363 printf("The default value %s is used.\n",
third_party/googletest/src/src/gtest-test-part.cc+5−1
@@ -31,6 +31,8 @@ · 30 unmodified lines
31// The Google C++ Testing and Mocking Framework (Google Test)31// The Google C++ Testing and Mocking Framework (Google Test)
32 32
33#include "gtest/gtest-test-part.h"33#include "gtest/gtest-test-part.h"
34
35#include "gtest/internal/gtest-port.h"
34#include "src/gtest-internal-inl.h"36#include "src/gtest-internal-inl.h"
35 37
36namespace testing {38namespace testing {
@@ -46,7 +48,9 @@ std::string TestPartResult::ExtractSummary(const char* message) { · 9 unmodified lines
46 48
47// Prints a TestPartResult object.49// Prints a TestPartResult object.
48std::ostream& operator<<(std::ostream& os, const TestPartResult& result) {50std::ostream& operator<<(std::ostream& os, const TestPartResult& result) {
49 return os << result.file_name() << ":" << result.line_number() << ": "51 return os << internal::FormatFileLocation(result.file_name(),
52 result.line_number())
53 << " "
50 << (result.type() == TestPartResult::kSuccess54 << (result.type() == TestPartResult::kSuccess
51 ? "Success"55 ? "Success"
52 : result.type() == TestPartResult::kSkip56 : result.type() == TestPartResult::kSkip
third_party/googletest/src/src/gtest-typed-test.cc+4−1
@@ -58,7 +58,10 @@ static std::vector<std::string> SplitIntoTestNames(const char* src) { · 57 unmodified lines
58// registered_tests_; returns registered_tests if successful, or58// registered_tests_; returns registered_tests if successful, or
59// aborts the program otherwise.59// aborts the program otherwise.
60const char* TypedTestSuitePState::VerifyRegisteredTestNames(60const char* TypedTestSuitePState::VerifyRegisteredTestNames(
61 const char* file, int line, const char* registered_tests) {61 const char* test_suite_name, const char* file, int line,
62 const char* registered_tests) {
63 RegisterTypeParameterizedTestSuite(test_suite_name, CodeLocation(file, line));
64
62 typedef RegisteredTestsMap::const_iterator RegisteredTestIter;65 typedef RegisteredTestsMap::const_iterator RegisteredTestIter;
63 registered_ = true;66 registered_ = true;
64 67
third_party/googletest/src/src/gtest.cc+229−47
@@ -44,6 +44,7 @@ · 43 unmodified lines
44#include <wctype.h>44#include <wctype.h>
45 45
46#include <algorithm>46#include <algorithm>
47#include <cstdint>
47#include <iomanip>48#include <iomanip>
48#include <limits>49#include <limits>
49#include <list>50#include <list>
@@ -83,8 +84,11 @@ · 33 unmodified lines
83# include <windows.h> // NOLINT84# include <windows.h> // NOLINT
84# undef min85# undef min
85 86
87#ifdef _MSC_VER
86# include <crtdbg.h> // NOLINT88# include <crtdbg.h> // NOLINT
87# include <debugapi.h> // NOLINT89# include <debugapi.h> // NOLINT
90#endif
91
88# include <io.h> // NOLINT92# include <io.h> // NOLINT
89# include <sys/timeb.h> // NOLINT93# include <sys/timeb.h> // NOLINT
90# include <sys/types.h> // NOLINT94# include <sys/types.h> // NOLINT
@@ -330,10 +334,10 @@ namespace internal { · 239 unmodified lines
330// Generates a random number from [0, range), using a Linear334// Generates a random number from [0, range), using a Linear
331// Congruential Generator (LCG). Crashes if 'range' is 0 or greater335// Congruential Generator (LCG). Crashes if 'range' is 0 or greater
332// than kMaxRange.336// than kMaxRange.
333UInt32 Random::Generate(UInt32 range) {337uint32_t Random::Generate(uint32_t range) {
334 // These constants are the same as are used in glibc's rand(3).338 // These constants are the same as are used in glibc's rand(3).
335 // Use wider types than necessary to prevent unsigned overflow diagnostics.339 // Use wider types than necessary to prevent unsigned overflow diagnostics.
336 state_ = static_cast<UInt32>(1103515245ULL*state_ + 12345U) % kMaxRange;340 state_ = static_cast<uint32_t>(1103515245ULL*state_ + 12345U) % kMaxRange;
337 341
338 GTEST_CHECK_(range > 0)342 GTEST_CHECK_(range > 0)
339 << "Cannot generate a number in the range [0, 0).";343 << "Cannot generate a number in the range [0, 0).";
@@ -403,6 +407,162 @@ void AssertHelper::operator=(const Message& message) const { · 63 unmodified lines
403 ); // NOLINT407 ); // NOLINT
404}408}
405 409
410namespace {
411
412// When TEST_P is found without a matching INSTANTIATE_TEST_SUITE_P
413// to creates test cases for it, a syntetic test case is
414// inserted to report ether an error or a log message.
415//
416// This configuration bit will likely be removed at some point.
417constexpr bool kErrorOnUninstantiatedParameterizedTest = false;
418constexpr bool kErrorOnUninstantiatedTypeParameterizedTest = false;
419
420// A test that fails at a given file/line location with a given message.
421class FailureTest : public Test {
422 public:
423 explicit FailureTest(const CodeLocation& loc, std::string error_message,
424 bool as_error)
425 : loc_(loc),
426 error_message_(std::move(error_message)),
427 as_error_(as_error) {}
428
429 void TestBody() override {
430 if (as_error_) {
431 AssertHelper(TestPartResult::kNonFatalFailure, loc_.file.c_str(),
432 loc_.line, "") = Message() << error_message_;
433 } else {
434 std::cout << error_message_ << std::endl;
435 }
436 }
437
438 private:
439 const CodeLocation loc_;
440 const std::string error_message_;
441 const bool as_error_;
442};
443
444
445} // namespace
446
447std::set<std::string>* GetIgnoredParameterizedTestSuites() {
448 return UnitTest::GetInstance()->impl()->ignored_parameterized_test_suites();
449}
450
451// Add a given test_suit to the list of them allow to go un-instantiated.
452MarkAsIgnored::MarkAsIgnored(const char* test_suite) {
453 GetIgnoredParameterizedTestSuites()->insert(test_suite);
454}
455
456// If this parameterized test suite has no instantiations (and that
457// has not been marked as okay), emit a test case reporting that.
458void InsertSyntheticTestCase(const std::string& name, CodeLocation location,
459 bool has_test_p) {
460 const auto& ignored = *GetIgnoredParameterizedTestSuites();
461 if (ignored.find(name) != ignored.end()) return;
462
463 const char kMissingInstantiation[] = //
464 " is defined via TEST_P, but never instantiated. None of the test cases "
465 "will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only "
466 "ones provided expand to nothing."
467 "\n\n"
468 "Ideally, TEST_P definitions should only ever be included as part of "
469 "binaries that intend to use them. (As opposed to, for example, being "
470 "placed in a library that may be linked in to get other utilities.)";
471
472 const char kMissingTestCase[] = //
473 " is instantiated via INSTANTIATE_TEST_SUITE_P, but no tests are "
474 "defined via TEST_P . No test cases will run."
475 "\n\n"
476 "Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from "
477 "code that always depend on code that provides TEST_P. Failing to do "
478 "so is often an indication of dead code, e.g. the last TEST_P was "
479 "removed but the rest got left behind.";
480
481 std::string message =
482 "Paramaterized test suite " + name +
483 (has_test_p ? kMissingInstantiation : kMissingTestCase) +
484 "\n\n"
485 "To suppress this error for this test suite, insert the following line "
486 "(in a non-header) in the namespace it is defined in:"
487 "\n\n"
488 "GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(" + name + ");";
489
490 std::string full_name = "UninstantiatedParamaterizedTestSuite<" + name + ">";
491 RegisterTest( //
492 "GoogleTestVerification", full_name.c_str(),
493 nullptr, // No type parameter.
494 nullptr, // No value parameter.
495 location.file.c_str(), location.line, [message, location] {
496 return new FailureTest(location, message,
497 kErrorOnUninstantiatedParameterizedTest);
498 });
499}
500
501void RegisterTypeParameterizedTestSuite(const char* test_suite_name,
502 CodeLocation code_location) {
503 GetUnitTestImpl()->type_parameterized_test_registry().RegisterTestSuite(
504 test_suite_name, code_location);
505}
506
507void RegisterTypeParameterizedTestSuiteInstantiation(const char* case_name) {
508 GetUnitTestImpl()
509 ->type_parameterized_test_registry()
510 .RegisterInstantiation(case_name);
511}
512
513void TypeParameterizedTestSuiteRegistry::RegisterTestSuite(
514 const char* test_suite_name, CodeLocation code_location) {
515 suites_.emplace(std::string(test_suite_name),
516 TypeParameterizedTestSuiteInfo(code_location));
517}
518
519void TypeParameterizedTestSuiteRegistry::RegisterInstantiation(
520 const char* test_suite_name) {
521 auto it = suites_.find(std::string(test_suite_name));
522 if (it != suites_.end()) {
523 it->second.instantiated = true;
524 } else {
525 GTEST_LOG_(ERROR) << "Unknown type parameterized test suit '"
526 << test_suite_name << "'";
527 }
528}
529
530void TypeParameterizedTestSuiteRegistry::CheckForInstantiations() {
531 const auto& ignored = *GetIgnoredParameterizedTestSuites();
532 for (const auto& testcase : suites_) {
533 if (testcase.second.instantiated) continue;
534 if (ignored.find(testcase.first) != ignored.end()) continue;
535
536 std::string message =
537 "Type paramaterized test suite " + testcase.first +
538 " is defined via REGISTER_TYPED_TEST_SUITE_P, but never instantiated "
539 "via INSTANTIATE_TYPED_TEST_SUITE_P. None of the test cases will run."
540 "\n\n"
541 "Ideally, TYPED_TEST_P definitions should only ever be included as "
542 "part of binaries that intend to use them. (As opposed to, for "
543 "example, being placed in a library that may be linked in to get other "
544 "utilities.)"
545 "\n\n"
546 "To suppress this error for this test suite, insert the following line "
547 "(in a non-header) in the namespace it is definedin in:"
548 "\n\n"
549 "GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(" +
550 testcase.first + ");";
551
552 std::string full_name =
553 "UninstantiatedTypeParamaterizedTestSuite<" + testcase.first + ">";
554 RegisterTest( //
555 "GoogleTestVerification", full_name.c_str(),
556 nullptr, // No type parameter.
557 nullptr, // No value parameter.
558 testcase.second.code_location.file.c_str(),
559 testcase.second.code_location.line, [message, testcase] {
560 return new FailureTest(testcase.second.code_location, message,
561 kErrorOnUninstantiatedTypeParameterizedTest);
562 });
563 }
564}
565
406// A copy of all command line arguments. Set by InitGoogleTest().566// A copy of all command line arguments. Set by InitGoogleTest().
407static ::std::vector<std::string> g_argvs;567static ::std::vector<std::string> g_argvs;
408 568
@@ -1735,33 +1895,33 @@ AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT · 1326 unmodified lines
1735// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx1895// 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
1736 1896
1737// The maximum code-point a one-byte UTF-8 sequence can represent.1897// The maximum code-point a one-byte UTF-8 sequence can represent.
1738const UInt32 kMaxCodePoint1 = (static_cast<UInt32>(1) << 7) - 1;1898constexpr uint32_t kMaxCodePoint1 = (static_cast<uint32_t>(1) << 7) - 1;
1739 1899
1740// The maximum code-point a two-byte UTF-8 sequence can represent.1900// The maximum code-point a two-byte UTF-8 sequence can represent.
1741const UInt32 kMaxCodePoint2 = (static_cast<UInt32>(1) << (5 + 6)) - 1;1901constexpr uint32_t kMaxCodePoint2 = (static_cast<uint32_t>(1) << (5 + 6)) - 1;
1742 1902
1743// The maximum code-point a three-byte UTF-8 sequence can represent.1903// The maximum code-point a three-byte UTF-8 sequence can represent.
1744const UInt32 kMaxCodePoint3 = (static_cast<UInt32>(1) << (4 + 2*6)) - 1;1904constexpr uint32_t kMaxCodePoint3 = (static_cast<uint32_t>(1) << (4 + 2*6)) - 1;
1745 1905
1746// The maximum code-point a four-byte UTF-8 sequence can represent.1906// The maximum code-point a four-byte UTF-8 sequence can represent.
1747const UInt32 kMaxCodePoint4 = (static_cast<UInt32>(1) << (3 + 3*6)) - 1;1907constexpr uint32_t kMaxCodePoint4 = (static_cast<uint32_t>(1) << (3 + 3*6)) - 1;
1748 1908
1749// Chops off the n lowest bits from a bit pattern. Returns the n1909// Chops off the n lowest bits from a bit pattern. Returns the n
1750// lowest bits. As a side effect, the original bit pattern will be1910// lowest bits. As a side effect, the original bit pattern will be
1751// shifted to the right by n bits.1911// shifted to the right by n bits.
1752inline UInt32 ChopLowBits(UInt32* bits, int n) {1912inline uint32_t ChopLowBits(uint32_t* bits, int n) {
1753 const UInt32 low_bits = *bits & ((static_cast<UInt32>(1) << n) - 1);1913 const uint32_t low_bits = *bits & ((static_cast<uint32_t>(1) << n) - 1);
1754 *bits >>= n;1914 *bits >>= n;
1755 return low_bits;1915 return low_bits;
1756}1916}
1757 1917
1758// Converts a Unicode code point to a narrow string in UTF-8 encoding.1918// Converts a Unicode code point to a narrow string in UTF-8 encoding.
1759// code_point parameter is of type UInt32 because wchar_t may not be1919// code_point parameter is of type uint32_t because wchar_t may not be
1760// wide enough to contain a code point.1920// wide enough to contain a code point.
1761// If the code_point is not a valid Unicode code point1921// If the code_point is not a valid Unicode code point
1762// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted1922// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted
1763// to "(Invalid Unicode 0xXXXXXXXX)".1923// to "(Invalid Unicode 0xXXXXXXXX)".
1764std::string CodePointToUtf8(UInt32 code_point) {1924std::string CodePointToUtf8(uint32_t code_point) {
1765 if (code_point > kMaxCodePoint4) {1925 if (code_point > kMaxCodePoint4) {
1766 return "(Invalid Unicode 0x" + String::FormatHexUInt32(code_point) + ")";1926 return "(Invalid Unicode 0x" + String::FormatHexUInt32(code_point) + ")";
1767 }1927 }
@@ -1802,11 +1962,11 @@ inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { · 34 unmodified lines
1802}1962}
1803 1963
1804// Creates a Unicode code point from UTF16 surrogate pair.1964// Creates a Unicode code point from UTF16 surrogate pair.
1805inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,1965inline uint32_t CreateCodePointFromUtf16SurrogatePair(wchar_t first,
1806 wchar_t second) {1966 wchar_t second) {
1807 const auto first_u = static_cast<UInt32>(first);1967 const auto first_u = static_cast<uint32_t>(first);
1808 const auto second_u = static_cast<UInt32>(second);1968 const auto second_u = static_cast<uint32_t>(second);
1809 const UInt32 mask = (1 << 10) - 1;1969 const uint32_t mask = (1 << 10) - 1;
1810 return (sizeof(wchar_t) == 2)1970 return (sizeof(wchar_t) == 2)
1811 ? (((first_u & mask) << 10) | (second_u & mask)) + 0x100001971 ? (((first_u & mask) << 10) | (second_u & mask)) + 0x10000
1812 :1972 :
@@ -1834,7 +1994,7 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { · 21 unmodified lines
1834 1994
1835 ::std::stringstream stream;1995 ::std::stringstream stream;
1836 for (int i = 0; i < num_chars; ++i) {1996 for (int i = 0; i < num_chars; ++i) {
1837 UInt32 unicode_code_point;1997 uint32_t unicode_code_point;
1838 1998
1839 if (str[i] == L'\0') {1999 if (str[i] == L'\0') {
1840 break;2000 break;
@@ -1843,7 +2003,7 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { · 2 unmodified lines
1843 str[i + 1]);2003 str[i + 1]);
1844 i++;2004 i++;
1845 } else {2005 } else {
1846 unicode_code_point = static_cast<UInt32>(str[i]);2006 unicode_code_point = static_cast<uint32_t>(str[i]);
1847 }2007 }
1848 2008
1849 stream << CodePointToUtf8(unicode_code_point);2009 stream << CodePointToUtf8(unicode_code_point);
@@ -1969,7 +2129,7 @@ std::string String::FormatIntWidth2(int value) { · 119 unmodified lines
1969}2129}
1970 2130
1971// Formats an int value as "%X".2131// Formats an int value as "%X".
1972std::string String::FormatHexUInt32(UInt32 value) {2132std::string String::FormatHexUInt32(uint32_t value) {
1973 std::stringstream ss;2133 std::stringstream ss;
1974 ss << std::hex << std::uppercase << value;2134 ss << std::hex << std::uppercase << value;
1975 return ss.str();2135 return ss.str();
@@ -1977,7 +2137,7 @@ std::string String::FormatHexUInt32(UInt32 value) { · 1 unmodified line
1977 2137
1978// Formats an int value as "%X".2138// Formats an int value as "%X".
1979std::string String::FormatHexInt(int value) {2139std::string String::FormatHexInt(int value) {
1980 return FormatHexUInt32(static_cast<UInt32>(value));2140 return FormatHexUInt32(static_cast<uint32_t>(value));
1981}2141}
1982 2142
1983// Formats a byte as "%02X".2143// Formats a byte as "%02X".
@@ -2646,6 +2806,7 @@ namespace internal { · 662 unmodified lines
2646void UnitTestImpl::RegisterParameterizedTests() {2806void UnitTestImpl::RegisterParameterizedTests() {
2647 if (!parameterized_tests_registered_) {2807 if (!parameterized_tests_registered_) {
2648 parameterized_test_registry_.RegisterTests();2808 parameterized_test_registry_.RegisterTests();
2809 type_parameterized_test_registry_.CheckForInstantiations();
2649 parameterized_tests_registered_ = true;2810 parameterized_tests_registered_ = true;
2650 }2811 }
2651}2812}
@@ -3134,6 +3295,7 @@ class PrettyUnitTestResultPrinter : public TestEventListener { · 482 unmodified lines
3134 3295
3135 private:3296 private:
3136 static void PrintFailedTests(const UnitTest& unit_test);3297 static void PrintFailedTests(const UnitTest& unit_test);
3298 static void PrintFailedTestSuites(const UnitTest& unit_test);
3137 static void PrintSkippedTests(const UnitTest& unit_test);3299 static void PrintSkippedTests(const UnitTest& unit_test);
3138};3300};
3139 3301
@@ -3153,7 +3315,7 @@ void PrettyUnitTestResultPrinter::OnTestIterationStart( · 13 unmodified lines
3153 }3315 }
3154 3316
3155 if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {3317 if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {
3156 const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);3318 const int32_t shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);
3157 ColoredPrintf(COLOR_YELLOW,3319 ColoredPrintf(COLOR_YELLOW,
3158 "Note: This is test shard %d of %s.\n",3320 "Note: This is test shard %d of %s.\n",
3159 static_cast<int>(shard_index) + 1,3321 static_cast<int>(shard_index) + 1,
@@ -3220,9 +3382,7 @@ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { · 60 unmodified lines
3220void PrettyUnitTestResultPrinter::OnTestPartResult(3382void PrettyUnitTestResultPrinter::OnTestPartResult(
3221 const TestPartResult& result) {3383 const TestPartResult& result) {
3222 switch (result.type()) {3384 switch (result.type()) {
3223 // If the test part succeeded, or was skipped,3385 // If the test part succeeded, we don't need to do anything.
3224 // we don't need to do anything.
3225 case TestPartResult::kSkip:
3226 case TestPartResult::kSuccess:3386 case TestPartResult::kSuccess:
3227 return;3387 return;
3228 default:3388 default:
@@ -3288,9 +3448,8 @@ void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( · 59 unmodified lines
3288// Internal helper for printing the list of failed tests.3448// Internal helper for printing the list of failed tests.
3289void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {3449void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {
3290 const int failed_test_count = unit_test.failed_test_count();3450 const int failed_test_count = unit_test.failed_test_count();
3291 if (failed_test_count == 0) {3451 ColoredPrintf(COLOR_RED, "[ FAILED ] ");
3292 return;3452 printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str());
3293 }
3294 3453
3295 for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {3454 for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {
3296 const TestSuite& test_suite = *unit_test.GetTestSuite(i);3455 const TestSuite& test_suite = *unit_test.GetTestSuite(i);
@@ -3308,6 +3467,30 @@ void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { · 11 unmodified lines
3308 printf("\n");3467 printf("\n");
3309 }3468 }
3310 }3469 }
3470 printf("\n%2d FAILED %s\n", failed_test_count,
3471 failed_test_count == 1 ? "TEST" : "TESTS");
3472}
3473
3474// Internal helper for printing the list of test suite failures not covered by
3475// PrintFailedTests.
3476void PrettyUnitTestResultPrinter::PrintFailedTestSuites(
3477 const UnitTest& unit_test) {
3478 int suite_failure_count = 0;
3479 for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {
3480 const TestSuite& test_suite = *unit_test.GetTestSuite(i);
3481 if (!test_suite.should_run()) {
3482 continue;
3483 }
3484 if (test_suite.ad_hoc_test_result().Failed()) {
3485 ColoredPrintf(COLOR_RED, "[ FAILED ] ");
3486 printf("%s: SetUpTestSuite or TearDownTestSuite\n", test_suite.name());
3487 ++suite_failure_count;
3488 }
3489 }
3490 if (suite_failure_count > 0) {
3491 printf("\n%2d FAILED TEST %s\n", suite_failure_count,
3492 suite_failure_count == 1 ? "SUITE" : "SUITES");
3493 }
3311}3494}
3312 3495
3313// Internal helper for printing the list of skipped tests.3496// Internal helper for printing the list of skipped tests.
@@ -3355,19 +3538,14 @@ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, · 41 unmodified lines
3355 PrintSkippedTests(unit_test);3538 PrintSkippedTests(unit_test);
3356 }3539 }
3357 3540
3358 int num_failures = unit_test.failed_test_count();
3359 if (!unit_test.Passed()) {3541 if (!unit_test.Passed()) {
3360 const int failed_test_count = unit_test.failed_test_count();
3361 ColoredPrintf(COLOR_RED, "[ FAILED ] ");
3362 printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str());
3363 PrintFailedTests(unit_test);3542 PrintFailedTests(unit_test);
3364 printf("\n%2d FAILED %s\n", num_failures,3543 PrintFailedTestSuites(unit_test);
3365 num_failures == 1 ? "TEST" : "TESTS");
3366 }3544 }
3367 3545
3368 int num_disabled = unit_test.reportable_disabled_test_count();3546 int num_disabled = unit_test.reportable_disabled_test_count();
3369 if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) {3547 if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) {
3370 if (!num_failures) {3548 if (unit_test.Passed()) {
3371 printf("\n"); // Add a spacer if no FAILURE banner is displayed.3549 printf("\n"); // Add a spacer if no FAILURE banner is displayed.
3372 }3550 }
3373 ColoredPrintf(COLOR_YELLOW,3551 ColoredPrintf(COLOR_YELLOW,
@@ -4508,6 +4686,7 @@ class ScopedPrematureExitFile { · 1134 unmodified lines
4508 }4686 }
4509 4687
4510 ~ScopedPrematureExitFile() {4688 ~ScopedPrematureExitFile() {
4689#if !defined GTEST_OS_ESP8266
4511 if (!premature_exit_filepath_.empty()) {4690 if (!premature_exit_filepath_.empty()) {
4512 int retval = remove(premature_exit_filepath_.c_str());4691 int retval = remove(premature_exit_filepath_.c_str());
4513 if (retval) {4692 if (retval) {
@@ -4516,6 +4695,7 @@ class ScopedPrematureExitFile { · 2 unmodified lines
4516 << retval;4695 << retval;
4517 }4696 }
4518 }4697 }
4698#endif
4519 }4699 }
4520 4700
4521 private:4701 private:
@@ -4908,7 +5088,6 @@ int UnitTest::Run() { · 386 unmodified lines
4908 _set_abort_behavior(5088 _set_abort_behavior(
4909 0x0, // Clear the following flags:5089 0x0, // Clear the following flags:
4910 _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump.5090 _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump.
4911# endif
4912 5091
4913 // In debug mode, the Windows CRT can crash with an assertion over invalid5092 // In debug mode, the Windows CRT can crash with an assertion over invalid
4914 // input (e.g. passing an invalid file descriptor). The default handling5093 // input (e.g. passing an invalid file descriptor). The default handling
@@ -4919,6 +5098,7 @@ int UnitTest::Run() { · 4 unmodified lines
4919 _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);5098 _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
4920 (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);5099 (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
4921 }5100 }
5101# endif
4922 }5102 }
4923#endif // GTEST_OS_WINDOWS5103#endif // GTEST_OS_WINDOWS
4924 5104
@@ -5299,7 +5479,7 @@ bool UnitTestImpl::RunAllTests() { · 374 unmodified lines
5299 5479
5300 // Shuffles test suites and tests if requested.5480 // Shuffles test suites and tests if requested.
5301 if (has_tests_to_run && GTEST_FLAG(shuffle)) {5481 if (has_tests_to_run && GTEST_FLAG(shuffle)) {
5302 random()->Reseed(static_cast<UInt32>(random_seed_));5482 random()->Reseed(static_cast<uint32_t>(random_seed_));
5303 // This should be done before calling OnTestIterationStart(),5483 // This should be done before calling OnTestIterationStart(),
5304 // such that a test event listener can see the actual test order5484 // such that a test event listener can see the actual test order
5305 // in the event.5485 // in the event.
@@ -5422,8 +5602,8 @@ bool ShouldShard(const char* total_shards_env, · 116 unmodified lines
5422 return false;5602 return false;
5423 }5603 }
5424 5604
5425 const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1);5605 const int32_t total_shards = Int32FromEnvOrDie(total_shards_env, -1);
5426 const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1);5606 const int32_t shard_index = Int32FromEnvOrDie(shard_index_env, -1);
5427 5607
5428 if (total_shards == -1 && shard_index == -1) {5608 if (total_shards == -1 && shard_index == -1) {
5429 return false;5609 return false;
@@ -5460,13 +5640,13 @@ bool ShouldShard(const char* total_shards_env, · 30 unmodified lines
5460// Parses the environment variable var as an Int32. If it is unset,5640// Parses the environment variable var as an Int32. If it is unset,
5461// returns default_val. If it is not an Int32, prints an error5641// returns default_val. If it is not an Int32, prints an error
5462// and aborts.5642// and aborts.
5463Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) {5643int32_t Int32FromEnvOrDie(const char* var, int32_t default_val) {
5464 const char* str_val = posix::GetEnv(var);5644 const char* str_val = posix::GetEnv(var);
5465 if (str_val == nullptr) {5645 if (str_val == nullptr) {
5466 return default_val;5646 return default_val;
5467 }5647 }
5468 5648
5469 Int32 result;5649 int32_t result;
5470 if (!ParseInt32(Message() << "The value of environment variable " << var,5650 if (!ParseInt32(Message() << "The value of environment variable " << var,
5471 str_val, &result)) {5651 str_val, &result)) {
5472 exit(EXIT_FAILURE);5652 exit(EXIT_FAILURE);
@@ -5490,9 +5670,9 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { · 17 unmodified lines
5490// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md5670// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
5491// . Returns the number of tests that should run.5671// . Returns the number of tests that should run.
5492int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {5672int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
5493 const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ?5673 const int32_t total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ?
5494 Int32FromEnvOrDie(kTestTotalShards, -1) : -1;5674 Int32FromEnvOrDie(kTestTotalShards, -1) : -1;
5495 const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ?5675 const int32_t shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ?
5496 Int32FromEnvOrDie(kTestShardIndex, -1) : -1;5676 Int32FromEnvOrDie(kTestShardIndex, -1) : -1;
5497 5677
5498 // num_runnable_tests are the number of tests that will5678 // num_runnable_tests are the number of tests that will
@@ -5781,12 +5961,11 @@ static bool ParseBoolFlag(const char* str, const char* flag, bool* value) { · 282 unmodified lines
5781 return true;5961 return true;
5782}5962}
5783 5963
5784// Parses a string for an Int32 flag, in the form of5964// Parses a string for an int32_t flag, in the form of "--flag=value".
5785// "--flag=value".
5786//5965//
5787// On success, stores the value of the flag in *value, and returns5966// On success, stores the value of the flag in *value, and returns
5788// true. On failure, returns false without changing *value.5967// true. On failure, returns false without changing *value.
5789bool ParseInt32Flag(const char* str, const char* flag, Int32* value) {5968bool ParseInt32Flag(const char* str, const char* flag, int32_t* value) {
5790 // Gets the value of the flag as a string.5969 // Gets the value of the flag as a string.
5791 const char* const value_str = ParseFlagValue(str, flag, false);5970 const char* const value_str = ParseFlagValue(str, flag, false);
5792 5971
@@ -5798,8 +5977,7 @@ bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { · 5 unmodified lines
5798 value_str, value);5977 value_str, value);
5799}5978}
5800 5979
5801// Parses a string for a string flag, in the form of5980// Parses a string for a string flag, in the form of "--flag=value".
5802// "--flag=value".
5803//5981//
5804// On success, stores the value of the flag in *value, and returns5982// On success, stores the value of the flag in *value, and returns
5805// true. On failure, returns false without changing *value.5983// true. On failure, returns false without changing *value.
@@ -6149,7 +6327,11 @@ std::string TempDir() { · 343 unmodified lines
6149 else6327 else
6150 return std::string(temp_dir) + "\\";6328 return std::string(temp_dir) + "\\";
6151#elif GTEST_OS_LINUX_ANDROID6329#elif GTEST_OS_LINUX_ANDROID
6152 return "/sdcard/";6330 const char* temp_dir = internal::posix::GetEnv("TEST_TMPDIR");
6331 if (temp_dir == nullptr || temp_dir[0] == '\0')
6332 return "/data/local/tmp/";
6333 else
6334 return temp_dir;
6153#else6335#else
6154 return "/tmp/";6336 return "/tmp/";
6155#endif // GTEST_OS_WINDOWS_MOBILE6337#endif // GTEST_OS_WINDOWS_MOBILE
third_party/googletest/src/src/gtest_main.cc+8−1
@@ -30,13 +30,20 @@ · 29 unmodified lines
30#include <cstdio>30#include <cstdio>
31#include "gtest/gtest.h"31#include "gtest/gtest.h"
32 32
33#ifdef ARDUINO33#if GTEST_OS_ESP8266 || GTEST_OS_ESP32
34#if GTEST_OS_ESP8266
35extern "C" {
36#endif
34void setup() {37void setup() {
35 testing::InitGoogleTest();38 testing::InitGoogleTest();
36}39}
37 40
38void loop() { RUN_ALL_TESTS(); }41void loop() { RUN_ALL_TESTS(); }
39 42
43#if GTEST_OS_ESP8266
44}
45#endif
46
40#else47#else
41 48
42GTEST_API_ int main(int argc, char **argv) {49GTEST_API_ int main(int argc, char **argv) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t