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 @@
11 URL: https://github.com/google/googletest.git
2−Version: release-1.10.0
2+Version: release-1.10.0-224-g23b2a3b1
33 License: BSD
44 License File: LICENSE
55
@@ -13,8 +13,7 @@ generation. · 7 unmodified lines
1313
1414 Local Modifications:
1515 - Remove everything but:
16− googletest-release-1.10.0/googletest/
17− CHANGES
16+ googletest/
1817 CONTRIBUTORS
1918 include
2019 LICENSE
third_party/googletest/src/CHANGES+0−157
@@ -1,157 +0,0 @@
1−Changes 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−
28−Changes 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−
60−Changes 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−
82−Changes 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−
101−Changes 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−
116−Changes 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−
125−Changes 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−
139−Changes 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−
149−Changes 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−
155−Changes 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
1717 Keir Mierle <mierle@gmail.com>
1818 Keith Ray <keith.ray@gmail.com>
1919 Kenton Varda <kenton@google.com>
20+Krystian Kuzniarek <krystian.kuzniarek@gmail.com>
2021 Manuel Klimek <klimek@google.com>
2122 Markus Heule <markus.heule@gmail.com>
2223 Mika 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
88
99 ### Build with CMake
1010
11−Google Test comes with a CMake build script (
12−[CMakeLists.txt](https://github.com/google/googletest/blob/master/CMakeLists.txt))
11+Google Test comes with a CMake build script
12+([CMakeLists.txt](https://github.com/google/googletest/blob/master/CMakeLists.txt))
1313 that can be used on a wide range of platforms ("C" stands for cross-platform.).
1414 If you don't have CMake installed already, you can download it for free from
1515 <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
384384 Matcher(const char* s); // NOLINT
385385 };
386386
387−#if GTEST_HAS_ABSL
387+#if GTEST_INTERNAL_HAS_STRING_VIEW
388388 // The following two specializations allow the user to write str
389389 // instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view
390390 // matcher is expected.
391391 template <>
392−class GTEST_API_ Matcher<const absl::string_view&>
393− : public internal::MatcherBase<const absl::string_view&> {
392+class GTEST_API_ Matcher<const internal::StringView&>
393+ : public internal::MatcherBase<const internal::StringView&> {
394394 public:
395395 Matcher() {}
396396
397− explicit Matcher(const MatcherInterface<const absl::string_view&>* impl)
398− : internal::MatcherBase<const absl::string_view&>(impl) {}
397+ explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)
398+ : internal::MatcherBase<const internal::StringView&>(impl) {}
399399
400400 // Allows the user to write str instead of Eq(str) sometimes, where
401401 // str is a std::string object.
@@ -404,20 +404,20 @@ class GTEST_API_ Matcher<const absl::string_view&> · 2 unmodified lines
404404 // Allows the user to write "foo" instead of Eq("foo") sometimes.
405405 Matcher(const char* s); // NOLINT
406406
407− // Allows the user to pass absl::string_views directly.
408− Matcher(absl::string_view s); // NOLINT
407+ // Allows the user to pass absl::string_views or std::string_views directly.
408+ Matcher(internal::StringView s); // NOLINT
409409 };
410410
411411 template <>
412−class GTEST_API_ Matcher<absl::string_view>
413− : public internal::MatcherBase<absl::string_view> {
412+class GTEST_API_ Matcher<internal::StringView>
413+ : public internal::MatcherBase<internal::StringView> {
414414 public:
415415 Matcher() {}
416416
417− explicit Matcher(const MatcherInterface<const absl::string_view&>* impl)
418− : internal::MatcherBase<absl::string_view>(impl) {}
419− explicit Matcher(const MatcherInterface<absl::string_view>* impl)
420− : internal::MatcherBase<absl::string_view>(impl) {}
417+ explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)
418+ : internal::MatcherBase<internal::StringView>(impl) {}
419+ explicit Matcher(const MatcherInterface<internal::StringView>* impl)
420+ : internal::MatcherBase<internal::StringView>(impl) {}
421421
422422 // Allows the user to write str instead of Eq(str) sometimes, where
423423 // str is a std::string object.
@@ -426,10 +426,10 @@ class GTEST_API_ Matcher<absl::string_view> · 2 unmodified lines
426426 // Allows the user to write "foo" instead of Eq("foo") sometimes.
427427 Matcher(const char* s); // NOLINT
428428
429− // Allows the user to pass absl::string_views directly.
430− Matcher(absl::string_view s); // NOLINT
429+ // Allows the user to pass absl::string_views or std::string_views directly.
430+ Matcher(internal::StringView s); // NOLINT
431431 };
432−#endif // GTEST_HAS_ABSL
432+#endif // GTEST_INTERNAL_HAS_STRING_VIEW
433433
434434 // Prints a matcher in a human-readable format.
435435 template <typename T>
@@ -474,13 +474,13 @@ class PolymorphicMatcher { · 38 unmodified lines
474474 public:
475475 explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
476476
477− virtual void DescribeTo(::std::ostream* os) const { impl_.DescribeTo(os); }
477+ void DescribeTo(::std::ostream* os) const override { impl_.DescribeTo(os); }
478478
479− virtual void DescribeNegationTo(::std::ostream* os) const {
479+ void DescribeNegationTo(::std::ostream* os) const override {
480480 impl_.DescribeNegationTo(os);
481481 }
482482
483− virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
483+ bool MatchAndExplain(T x, MatchResultListener* listener) const override {
484484 return impl_.MatchAndExplain(x, listener);
485485 }
486486
@@ -620,12 +620,12 @@ class MatchesRegexMatcher { · 133 unmodified lines
620620 MatchesRegexMatcher(const RE* regex, bool full_match)
621621 : regex_(regex), full_match_(full_match) {}
622622
623−#if GTEST_HAS_ABSL
624− bool MatchAndExplain(const absl::string_view& s,
623+#if GTEST_INTERNAL_HAS_STRING_VIEW
624+ bool MatchAndExplain(const internal::StringView& s,
625625 MatchResultListener* listener) const {
626626 return MatchAndExplain(std::string(s), listener);
627627 }
628−#endif // GTEST_HAS_ABSL
628+#endif // GTEST_INTERNAL_HAS_STRING_VIEW
629629
630630 // Accepts pointer types, particularly:
631631 // const char*
third_party/googletest/src/include/gtest/gtest-message.h+1−0
@@ -49,6 +49,7 @@ · 48 unmodified lines
4949
5050 #include <limits>
5151 #include <memory>
52+#include <sstream>
5253
5354 #include "gtest/internal/gtest-port.h"
5455
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
416416 : public test_suite_name { \
417417 public: \
418418 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
419− virtual void TestBody(); \
419+ void TestBody() override; \
420420 \
421421 private: \
422422 static int AddToRegistry() { \
423423 ::testing::UnitTest::GetInstance() \
424424 ->parameterized_test_registry() \
425425 .GetTestSuitePatternHolder<test_suite_name>( \
426− #test_suite_name, \
426+ GTEST_STRINGIFY_(test_suite_name), \
427427 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
428428 ->AddTestPattern( \
429429 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
@@ -483,13 +483,21 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { · 53 unmodified lines
483483 ::testing::UnitTest::GetInstance() \
484484 ->parameterized_test_registry() \
485485 .GetTestSuitePatternHolder<test_suite_name>( \
486− #test_suite_name, \
486+ GTEST_STRINGIFY_(test_suite_name), \
487487 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
488488 ->AddTestSuiteInstantiation( \
489− #prefix, &gtest_##prefix##test_suite_name##_EvalGenerator_, \
489+ GTEST_STRINGIFY_(prefix), \
490+ &gtest_##prefix##test_suite_name##_EvalGenerator_, \
490491 &gtest_##prefix##test_suite_name##_EvalGenerateName_, \
491492 __FILE__, __LINE__)
492493
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+
493501 // Legacy API is deprecated but still available
494502 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
495503 #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
135135 kProtobuf, // a protobuf type
136136 kConvertibleToInteger, // a type implicitly convertible to BiggestInt
137137 // (e.g. a named or unnamed enum type)
138−#if GTEST_HAS_ABSL
138+#if GTEST_INTERNAL_HAS_STRING_VIEW
139139 kConvertibleToStringView, // a type implicitly convertible to
140− // absl::string_view
140+ // absl::string_view or std::string_view
141141 #endif
142142 kOtherType // anything else
143143 };
@@ -191,12 +191,13 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> { · 47 unmodified lines
191191 }
192192 };
193193
194−#if GTEST_HAS_ABSL
194+#if GTEST_INTERNAL_HAS_STRING_VIEW
195195 template <typename T>
196196 class TypeWithoutFormatter<T, kConvertibleToStringView> {
197197 public:
198198 // 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).
200201 //
201202 // Note: the implementation is further below, as it depends on
202203 // internal::PrintTo symbol which is defined later in the file.
@@ -237,9 +238,9 @@ template <typename Char, typename CharTraits, typename T> · 34 unmodified lines
237238 const T&, internal::BiggestInt>::value
238239 ? kConvertibleToInteger
239240 :
240−#if GTEST_HAS_ABSL
241+#if GTEST_INTERNAL_HAS_STRING_VIEW
241242 std::is_convertible<
242− const T&, absl::string_view>::value
243+ const T&, internal::StringView>::value
243244 ? kConvertibleToStringView
244245 :
245246 #endif
@@ -266,10 +267,8 @@ void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { · 20 unmodified lines
266267 // 7.3.4-1 [namespace.udir]. This allows us to fall back onto
267268 // testing::internal2::operator<< in case T doesn't come with a <<
268269 // operator.
269− //
270− // We cannot write 'using ::testing::internal2::operator<<;', which
271− // gcc 3.3 fails to compile due to a compiler bug.
272− using namespace ::testing::internal2; // NOLINT
270+
271+ using ::testing::internal2::operator<<;
273272
274273 // Assuming T is defined in namespace foo, in the next statement,
275274 // the compiler will consider all of:
@@ -603,12 +602,12 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { · 327 unmodified lines
603602 }
604603 #endif // GTEST_HAS_STD_WSTRING
605604
606−#if GTEST_HAS_ABSL
607−// Overload for absl::string_view.
608−inline void PrintTo(absl::string_view sp, ::std::ostream* os) {
605+#if GTEST_INTERNAL_HAS_STRING_VIEW
606+// Overload for internal::StringView.
607+inline void PrintTo(internal::StringView sp, ::std::ostream* os) {
609608 PrintTo(::std::string(sp), os);
610609 }
611−#endif // GTEST_HAS_ABSL
610+#endif // GTEST_INTERNAL_HAS_STRING_VIEW
612611
613612 inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; }
614613
@@ -901,12 +900,12 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { · 286 unmodified lines
901900
902901 } // namespace internal
903902
904−#if GTEST_HAS_ABSL
903+#if GTEST_INTERNAL_HAS_STRING_VIEW
905904 namespace internal2 {
906905 template <typename T>
907906 void TypeWithoutFormatter<T, kConvertibleToStringView>::PrintValue(
908907 const T& value, ::std::ostream* os) {
909− internal::PrintTo(absl::string_view(value), os);
908+ internal::PrintTo(internal::StringView(value), os);
910909 }
911910 } // namespace internal2
912911 #endif
third_party/googletest/src/include/gtest/gtest-typed-test.h+31−24
@@ -27,7 +27,6 @@ · 26 unmodified lines
2727 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2828 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2929
30−
3130 // GOOGLETEST_CM0001 DO NOT DELETE
3231
3332 #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
@@ -170,6 +169,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 136 unmodified lines
170169
171170 #endif // 0
172171
172+#include "gtest/internal/gtest-internal.h"
173173 #include "gtest/internal/gtest-port.h"
174174 #include "gtest/internal/gtest-type-util.h"
175175
@@ -188,24 +188,25 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 12 unmodified lines
188188 #define GTEST_NAME_GENERATOR_(TestSuiteName) \
189189 gtest_type_params_##TestSuiteName##_NameGenerator
190190
191−#define TYPED_TEST_SUITE(CaseName, Types, ...) \
192− typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \
193− CaseName); \
194− typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
191+#define TYPED_TEST_SUITE(CaseName, Types, ...) \
192+ typedef ::testing::internal::GenerateTypeList<Types>::type \
193+ GTEST_TYPE_PARAMS_(CaseName); \
194+ typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
195195 GTEST_NAME_GENERATOR_(CaseName)
196196
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"); \
198200 template <typename gtest_TypeParam_> \
199201 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
200202 : public CaseName<gtest_TypeParam_> { \
201203 private: \
202204 typedef CaseName<gtest_TypeParam_> TestFixture; \
203205 typedef gtest_TypeParam_ TypeParam; \
204− virtual void TestBody(); \
206+ void TestBody() override; \
205207 }; \
206208 static bool gtest_##CaseName##_##TestName##_registered_ \
207− GTEST_ATTRIBUTE_UNUSED_ = \
208− ::testing::internal::TypeParameterizedTest< \
209+ GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \
209210 CaseName, \
210211 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
211212 TestName)>, \
@@ -213,7 +214,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 1 unmodified line
213214 CaseName)>::Register("", \
214215 ::testing::internal::CodeLocation( \
215216 __FILE__, __LINE__), \
216− #CaseName, #TestName, 0, \
217+ GTEST_STRINGIFY_(CaseName), \
218+ GTEST_STRINGIFY_(TestName), 0, \
217219 ::testing::internal::GenerateNames< \
218220 GTEST_NAME_GENERATOR_(CaseName), \
219221 GTEST_TYPE_PARAMS_(CaseName)>()); \
@@ -276,24 +278,26 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 56 unmodified lines
276278 private: \
277279 typedef SuiteName<gtest_TypeParam_> TestFixture; \
278280 typedef gtest_TypeParam_ TypeParam; \
279− virtual void TestBody(); \
281+ void TestBody() override; \
280282 }; \
281283 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
282284 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \
283− __FILE__, __LINE__, #SuiteName, #TestName); \
285+ __FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName), \
286+ GTEST_STRINGIFY_(TestName)); \
284287 } \
285288 template <typename gtest_TypeParam_> \
286289 void GTEST_SUITE_NAMESPACE_( \
287290 SuiteName)::TestName<gtest_TypeParam_>::TestBody()
288291
289−#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
290− namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
291− typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
292− } \
293− static const char* const GTEST_REGISTERED_TEST_NAMES_( \
294− SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
295− GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \
296− __FILE__, __LINE__, #__VA_ARGS__)
292+// Note: this won't work correctly if the trailing arguments are macros.
293+#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
294+ namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
295+ typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \
296+ } \
297+ static const char* const GTEST_REGISTERED_TEST_NAMES_( \
298+ SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
299+ GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \
300+ GTEST_STRINGIFY_(SuiteName), __FILE__, __LINE__, #__VA_ARGS__)
297301
298302 // Legacy API is deprecated but still available
299303 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
@@ -304,18 +308,21 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); · 4 unmodified lines
304308 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
305309
306310 #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"); \
307313 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
308314 ::testing::internal::TypeParameterizedTestSuite< \
309315 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
310− ::testing::internal::TypeList<Types>::type>:: \
311− Register(#Prefix, \
316+ ::testing::internal::GenerateTypeList<Types>::type>:: \
317+ Register(GTEST_STRINGIFY_(Prefix), \
312318 ::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), \
314321 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \
315322 ::testing::internal::GenerateNames< \
316323 ::testing::internal::NameGeneratorSelector< \
317324 __VA_ARGS__>::type, \
318− ::testing::internal::TypeList<Types>::type>())
325+ ::testing::internal::GenerateTypeList<Types>::type>())
319326
320327 // Legacy API is deprecated but still available
321328 #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
177177 class UnitTestImpl* GetUnitTestImpl();
178178 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
179179 const std::string& message);
180+std::set<std::string>* GetIgnoredParameterizedTestSuites();
180181
181182 } // namespace internal
182183
@@ -278,7 +279,11 @@ class GTEST_API_ AssertionResult { · 95 unmodified lines
278279 // Used in EXPECT_TRUE/FALSE(assertion_result).
279280 AssertionResult(const AssertionResult& other);
280281
281−#if defined(_MSC_VER) && _MSC_VER < 1910
282+// 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)
282287 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */)
283288 #endif
284289
@@ -298,7 +303,7 @@ class GTEST_API_ AssertionResult { · 13 unmodified lines
298303 = nullptr)
299304 : success_(success) {}
300305
301−#if defined(_MSC_VER) && _MSC_VER < 1910
306+#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)
302307 GTEST_DISABLE_MSC_WARNINGS_POP_()
303308 #endif
304309
@@ -412,8 +417,6 @@ class GTEST_API_ Test { · 107 unmodified lines
412417 // test in test case Foo. Hence a sub-class can define its own
413418 // SetUpTestSuite() method to shadow the one defined in the super
414419 // class.
415− // Failures that happen during SetUpTestSuite are logged but otherwise
416− // ignored.
417420 static void SetUpTestSuite() {}
418421
419422 // Tears down the stuff shared by all tests in this test suite.
@@ -422,8 +425,6 @@ class GTEST_API_ Test { · 2 unmodified lines
422425 // test in test case Foo. Hence a sub-class can define its own
423426 // TearDownTestSuite() method to shadow the one defined in the super
424427 // class.
425− // Failures that happen during TearDownTestSuite are logged but otherwise
426− // ignored.
427428 static void TearDownTestSuite() {}
428429
429430 // Legacy API is deprecated but still available
@@ -889,7 +890,9 @@ class GTEST_API_ TestSuite { · 459 unmodified lines
889890 bool Passed() const { return !Failed(); }
890891
891892 // 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+ }
893896
894897 // Returns the elapsed time, in milliseconds.
895898 TimeInMillis elapsed_time() const { return elapsed_time_; }
@@ -1420,6 +1423,7 @@ class GTEST_API_ UnitTest { · 524 unmodified lines
14201423 friend class internal::StreamingListenerTest;
14211424 friend class internal::UnitTestRecordPropertyTestHelper;
14221425 friend Environment* AddGlobalTestEnvironment(Environment* env);
1426+ friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites();
14231427 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
14241428 friend void internal::ReportFailureInUnknownLocation(
14251429 TestPartResult::Type result_type,
@@ -1889,7 +1893,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { · 463 unmodified lines
18891893 // Skips test in runtime.
18901894 // Skipping test aborts current function.
18911895 // Skipped tests are neither successful nor failed.
1892−#define GTEST_SKIP() GTEST_SKIP_("Skipped")
1896+#define GTEST_SKIP() GTEST_SKIP_("")
18931897
18941898 // ADD_FAILURE unconditionally adds a failure to the current test.
18951899 // SUCCEED generates a success - it doesn't automatically make the
@@ -2298,8 +2302,7 @@ class GTEST_API_ ScopedTrace { · 402 unmodified lines
22982302 // to cause a compiler error.
22992303 template <typename T1, typename T2>
23002304 constexpr bool StaticAssertTypeEq() noexcept {
2301− static_assert(std::is_same<T1, T2>::value,
2302− "type1 and type2 are not the same type");
2305+ static_assert(std::is_same<T1, T2>::value, "T1 and T2 are not the same type");
23032306 return true;
23042307 }
23052308
@@ -2365,9 +2368,11 @@ constexpr bool StaticAssertTypeEq() noexcept { · 59 unmodified lines
23652368 // }
23662369 //
23672370 // GOOGLETEST_CM0011 DO NOT DELETE
2371+#if !GTEST_DONT_DEFINE_TEST
23682372 #define TEST_F(test_fixture, test_name)\
23692373 GTEST_TEST_(test_fixture, test_name, test_fixture, \
23702374 ::testing::internal::GetTypeId<test_fixture>())
2375+#endif // !GTEST_DONT_DEFINE_TEST
23712376
23722377 // Returns a path to temporary directory.
23732378 // 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
5353 #include <ctype.h>
5454 #include <float.h>
5555 #include <string.h>
56+#include <cstdint>
5657 #include <iomanip>
5758 #include <limits>
5859 #include <map>
@@ -78,7 +79,16 @@ · 19 unmodified lines
7879 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
7980
8081 // Stringifies its argument.
81−#define GTEST_STRINGIFY_(name) #name
82+// 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__, )
8292
8393 namespace proto2 { class Message; }
8494
@@ -607,8 +617,9 @@ class GTEST_API_ TypedTestSuitePState { · 522 unmodified lines
607617 // Verifies that registered_tests match the test names in
608618 // defined_test_names_; returns registered_tests if successful, or
609619 // aborts the program otherwise.
610− const char* VerifyRegisteredTestNames(
611− const char* file, int line, const char* registered_tests);
620+ const char* VerifyRegisteredTestNames(const char* test_suite_name,
621+ const char* file, int line,
622+ const char* registered_tests);
612623
613624 private:
614625 typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;
@@ -662,7 +673,7 @@ struct NameGeneratorSelector { · 47 unmodified lines
662673 };
663674
664675 template <typename NameGenerator>
665−void GenerateNamesRecursively(Types0, std::vector<std::string>*, int) {}
676+void GenerateNamesRecursively(internal::None, std::vector<std::string>*, int) {}
666677
667678 template <typename NameGenerator, typename Types>
668679 void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) {
@@ -729,7 +740,7 @@ class TypeParameterizedTest { · 60 unmodified lines
729740
730741 // The base case for the compile time recursion.
731742 template <GTEST_TEMPLATE_ Fixture, class TestSel>
732−class TypeParameterizedTest<Fixture, TestSel, Types0> {
743+class TypeParameterizedTest<Fixture, TestSel, internal::None> {
733744 public:
734745 static bool Register(const char* /*prefix*/, const CodeLocation&,
735746 const char* /*case_name*/, const char* /*test_names*/,
@@ -740,6 +751,11 @@ class TypeParameterizedTest<Fixture, TestSel, Types0> { · 4 unmodified lines
740751 }
741752 };
742753
754+GTEST_API_ void RegisterTypeParameterizedTestSuite(const char* test_suite_name,
755+ CodeLocation code_location);
756+GTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation(
757+ const char* case_name);
758+
743759 // TypeParameterizedTestSuite<Fixture, Tests, Types>::Register()
744760 // registers *all combinations* of 'Tests' and 'Types' with Google
745761 // Test. The return value is insignificant - we just need to return
@@ -752,6 +768,7 @@ class TypeParameterizedTestSuite { · 6 unmodified lines
752768 const char* test_names,
753769 const std::vector<std::string>& type_names =
754770 GenerateNames<DefaultNameGenerator, Types>()) {
771+ RegisterTypeParameterizedTestSuiteInstantiation(case_name);
755772 std::string test_name = StripTrailingSpaces(
756773 GetPrefixUntilComma(test_names));
757774 if (!state->TestExists(test_name)) {
@@ -781,7 +798,7 @@ class TypeParameterizedTestSuite { · 23 unmodified lines
781798
782799 // The base case for the compile time recursion.
783800 template <GTEST_TEMPLATE_ Fixture, typename Types>
784−class TypeParameterizedTestSuite<Fixture, Templates0, Types> {
801+class TypeParameterizedTestSuite<Fixture, internal::None, Types> {
785802 public:
786803 static bool Register(const char* /*prefix*/, const CodeLocation&,
787804 const TypedTestSuitePState* /*state*/,
@@ -825,6 +842,16 @@ struct GTEST_API_ ConstCharPtr { · 37 unmodified lines
825842 const char* value;
826843 };
827844
845+// Helper for declaring std::string within 'if' statement
846+// in pre C++17 build environment.
847+struct 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+
828855 // A simple Linear Congruential Generator for generating random
829856 // numbers with a uniform distribution. Unlike rand() and srand(), it
830857 // doesn't use global state (and therefore can't interfere with user
@@ -832,18 +859,18 @@ struct GTEST_API_ ConstCharPtr { · 1 unmodified line
832859 // but it's good enough for our purposes.
833860 class GTEST_API_ Random {
834861 public:
835− static const UInt32 kMaxRange = 1u << 31;
862+ static const uint32_t kMaxRange = 1u << 31;
836863
837− explicit Random(UInt32 seed) : state_(seed) {}
864+ explicit Random(uint32_t seed) : state_(seed) {}
838865
839− void Reseed(UInt32 seed) { state_ = seed; }
866+ void Reseed(uint32_t seed) { state_ = seed; }
840867
841868 // Generates a random number from [0, range). Crashes if 'range' is
842869 // 0 or greater than kMaxRange.
843− UInt32 Generate(UInt32 range);
870+ uint32_t Generate(uint32_t range);
844871
845872 private:
846− UInt32 state_;
873+ uint32_t state_;
847874 GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);
848875 };
849876
@@ -855,8 +882,7 @@ class GTEST_API_ Random { · 5 unmodified lines
855882 // true if and only if T is type proto2::Message or a subclass of it.
856883 template <typename T>
857884 struct IsAProtocolMessage
858− : public bool_constant<
859− std::is_convertible<const T*, const ::proto2::Message*>::value> {};
885+ : public std::is_convertible<const T*, const ::proto2::Message*> {};
860886
861887 // When the compiler sees expression IsContainerTest<C>(0), if C is an
862888 // STL-style container class, the first overload of IsContainerTest
@@ -1124,25 +1150,29 @@ struct MakeIndexSequence · 261 unmodified lines
11241150 template <>
11251151 struct MakeIndexSequence<0> : IndexSequence<> {};
11261152
1127−// FIXME: This implementation of ElemFromList is O(1) in instantiation depth,
1128−// but it is O(N^2) in total instantiations. Not sure if this is the best
1129−// tradeoff, as it will make it somewhat slow to compile.
1130−template <typename T, size_t, size_t>
1131−struct ElemFromListImpl {};
1132−
1133−template <typename T, size_t I>
1134−struct ElemFromListImpl<T, I, I> {
1135− using type = T;
1153+template <size_t>
1154+struct Ignore {
1155+ Ignore(...); // NOLINT
11361156 };
11371157
1138−// Get the Nth element from T...
1139−// It uses O(1) instantiation depth.
1140−template <size_t N, typename I, typename... T>
1141−struct ElemFromList;
1158+template <typename>
1159+struct ElemFromListImpl;
1160+template <size_t... I>
1161+struct 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+};
11421169
1143−template <size_t N, size_t... I, typename... T>
1144−struct ElemFromList<N, IndexSequence<I...>, T...>
1145− : ElemFromListImpl<T, N, I>... {};
1170+template <size_t N, typename... T>
1171+struct ElemFromList {
1172+ using type =
1173+ decltype(ElemFromListImpl<typename MakeIndexSequence<N>::type>::Apply(
1174+ static_cast<T (*)()>(nullptr)...));
1175+};
11461176
11471177 template <typename... T>
11481178 class FlatTuple;
@@ -1152,9 +1182,7 @@ struct FlatTupleElemBase; · 3 unmodified lines
11521182
11531183 template <typename... T, size_t I>
11541184 struct FlatTupleElemBase<FlatTuple<T...>, I> {
1155− using value_type =
1156− typename ElemFromList<I, typename MakeIndexSequence<sizeof...(T)>::type,
1157− T...>::type;
1185+ using value_type = typename ElemFromList<I, T...>::type;
11581186 FlatTupleElemBase() = default;
11591187 explicit FlatTupleElemBase(value_type t) : value(std::move(t)) {}
11601188 value_type value;
@@ -1174,7 +1202,7 @@ struct FlatTupleBase<FlatTuple<T...>, IndexSequence<Idx...>> · 13 unmodified lines
11741202
11751203 // Analog to std::tuple but with different tradeoffs.
11761204 // This class minimizes the template instantiation depth, thus allowing more
1177−// elements that std::tuple would. std::tuple has been seen to require an
1205+// elements than std::tuple would. std::tuple has been seen to require an
11781206 // instantiation depth of more than 10x the number of elements in some
11791207 // implementations.
11801208 // FlatTuple and ElemFromList are not recursive and have a fixed depth
@@ -1185,19 +1213,20 @@ template <typename... T> · 4 unmodified lines
11851213 class FlatTuple
11861214 : private FlatTupleBase<FlatTuple<T...>,
11871215 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;
11891218
11901219 public:
11911220 FlatTuple() = default;
11921221 explicit FlatTuple(T... t) : FlatTuple::FlatTupleBase(std::move(t)...) {}
11931222
11941223 template <size_t I>
1195− const typename ElemFromList<I, Indices, T...>::type& Get() const {
1224+ const typename ElemFromList<I, T...>::type& Get() const {
11961225 return static_cast<const FlatTupleElemBase<FlatTuple, I>*>(this)->value;
11971226 }
11981227
11991228 template <size_t I>
1200− typename ElemFromList<I, Indices, T...>::type& Get() {
1229+ typename ElemFromList<I, T...>::type& Get() {
12011230 return static_cast<FlatTupleElemBase<FlatTuple, I>*>(this)->value;
12021231 }
12031232 };
@@ -1283,19 +1312,39 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } · 79 unmodified lines
12831312 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
12841313 fail(gtest_msg.value)
12851314
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+
12861333 #define GTEST_TEST_NO_THROW_(statement, fail) \
12871334 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1288− if (::testing::internal::AlwaysTrue()) { \
1335+ if (::testing::internal::TrueWithString gtest_msg{}) { \
12891336 try { \
12901337 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
12911338 } \
1339+ GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
12921340 catch (...) { \
1341+ gtest_msg.value = "it throws."; \
12931342 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
12941343 } \
12951344 } else \
12961345 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
1297− fail("Expected: " #statement " doesn't throw an exception.\n" \
1298− " Actual: it throws.")
1346+ fail(("Expected: " #statement " doesn't throw an exception.\n" \
1347+ " Actual: " + gtest_msg.value).c_str())
12991348
13001349 #define GTEST_TEST_ANY_THROW_(statement, fail) \
13011350 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
@@ -1356,12 +1405,15 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } · 54 unmodified lines
13561405 : public parent_class { \
13571406 public: \
13581407 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)); \
13591413 \
13601414 private: \
1361− virtual void TestBody(); \
1415+ void TestBody() override; \
13621416 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)); \
13651417 }; \
13661418 \
13671419 ::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
4242 #include <memory>
4343 #include <set>
4444 #include <tuple>
45+#include <type_traits>
4546 #include <utility>
4647 #include <vector>
4748
4849 #include "gtest/internal/gtest-internal.h"
4950 #include "gtest/internal/gtest-port.h"
5051 #include "gtest/gtest-printers.h"
52+#include "gtest/gtest-test-part.h"
5153
5254 namespace testing {
5355 // Input to a parameterized test name generator, describing a test parameter.
@@ -472,6 +474,17 @@ class ParameterizedTestSuiteInfoBase { · 418 unmodified lines
472474 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfoBase);
473475 };
474476
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.
481+struct MarkAsIgnored {
482+ explicit MarkAsIgnored(const char* test_suite);
483+};
484+
485+GTEST_API_ void InsertSyntheticTestCase(const std::string& name,
486+ CodeLocation location, bool has_test_p);
487+
475488 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
476489 //
477490 // ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P
@@ -522,11 +535,13 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 44 unmodified lines
522535 return 0; // Return value used only to run this method in namespace scope.
523536 }
524537 // 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.
526539 // This method should not be called more than once on any single
527540 // instance of a ParameterizedTestSuiteInfoBase derived class.
528541 // UnitTest has a guard to prevent from calling this method more than once.
529542 void RegisterTests() override {
543+ bool generated_instantiations = false;
544+
530545 for (typename TestInfoContainer::iterator test_it = tests_.begin();
531546 test_it != tests_.end(); ++test_it) {
532547 std::shared_ptr<TestInfo> test_info = *test_it;
@@ -549,6 +564,8 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 16 unmodified lines
549564 for (typename ParamGenerator<ParamType>::iterator param_it =
550565 generator.begin();
551566 param_it != generator.end(); ++param_it, ++i) {
567+ generated_instantiations = true;
568+
552569 Message test_name_stream;
553570
554571 std::string param_name = name_func(
@@ -580,6 +597,12 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { · 25 unmodified lines
580597 } // for param_it
581598 } // for gen_it
582599 } // 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+ }
583606 } // RegisterTests
584607
585608 private:
@@ -717,6 +740,34 @@ class ParameterizedTestSuiteRegistry { · 131 unmodified lines
717740 GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteRegistry);
718741 };
719742
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.
746+class 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+
720771 } // namespace internal
721772
722773 // 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
102102 # define GTEST_OS_QNX 1
103103 #elif defined(__HAIKU__)
104104 #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
105109 #endif // __CYGWIN__
106110
107111 #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
190190 // GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
191191 // GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a
192192 // variable don't have to be used.
193−// GTEST_DISALLOW_ASSIGN_ - disables operator=.
193+// GTEST_DISALLOW_ASSIGN_ - disables copy operator=.
194194 // 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=.
195197 // GTEST_MUST_USE_RESULT_ - declares that a function's result must be used.
196198 // GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is
197199 // suppressed (constant conditional).
198200 // GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127
199201 // is suppressed.
202+// GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or
203+// Matcher<absl::string_view>
204+// specializations.
200205 //
201206 // Synchronization:
202207 // Mutex, MutexLock, ThreadLocal, GetThreadCount()
@@ -223,8 +228,7 @@ · 20 unmodified lines
223228 //
224229 // Integer types:
225230 // TypeWithSize - maps an integer to a int type.
226−// Int32, UInt32, Int64, UInt64, TimeInMillis
227−// - integers of known sizes.
231+// TimeInMillis - integers of known sizes.
228232 // BiggestInt - the biggest signed integer type.
229233 //
230234 // Command-line utilities:
@@ -235,7 +239,7 @@ · 4 unmodified lines
235239 // Environment variable utilities:
236240 // GetEnv() - gets the value of an environment variable.
237241 // BoolFromGTestEnv() - parses a bool environment variable.
238−// Int32FromGTestEnv() - parses an Int32 environment variable.
242+// Int32FromGTestEnv() - parses an int32_t environment variable.
239243 // StringFromGTestEnv() - parses a string environment variable.
240244 //
241245 // Deprecation warnings:
@@ -248,7 +252,8 @@ · 6 unmodified lines
248252 #include <stdio.h>
249253 #include <stdlib.h>
250254 #include <string.h>
251−#include <memory>
255+#include <cstdint>
256+#include <limits>
252257 #include <type_traits>
253258
254259 #ifndef _WIN32_WCE
@@ -261,16 +266,14 @@ · 6 unmodified lines
261266 # include <TargetConditionals.h>
262267 #endif
263268
264−#include <algorithm> // NOLINT
265−#include <iostream> // NOLINT
266−#include <sstream> // NOLINT
267−#include <string> // NOLINT
269+#include <iostream> // NOLINT
270+#include <memory>
271+#include <string> // NOLINT
268272 #include <tuple>
269−#include <utility>
270273 #include <vector> // NOLINT
271274
272−#include "gtest/internal/gtest-port-arch.h"
273275 #include "gtest/internal/custom/gtest-port.h"
276+#include "gtest/internal/gtest-port-arch.h"
274277
275278 #if !defined(GTEST_DEV_EMAIL_)
276279 # define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
@@ -441,15 +444,6 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 164 unmodified lines
441444 # endif // defined(_MSC_VER) || defined(__BORLANDC__)
442445 #endif // GTEST_HAS_EXCEPTIONS
443446
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−
453447 #ifndef GTEST_HAS_STD_WSTRING
454448 // The user didn't tell us whether ::std::wstring is available, so we need
455449 // to figure it out.
@@ -458,7 +452,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 2 unmodified lines
458452 // no support for it at least as recent as Froyo (2.2).
459453 #define GTEST_HAS_STD_WSTRING \
460454 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
461− GTEST_OS_HAIKU))
455+ GTEST_OS_HAIKU || GTEST_OS_ESP32 || GTEST_OS_ESP8266))
462456
463457 #endif // GTEST_HAS_STD_WSTRING
464458
@@ -582,7 +576,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 117 unmodified lines
582576 #ifndef GTEST_HAS_STREAM_REDIRECTION
583577 // By default, we assume that stream redirection is supported on all
584578 // platforms except known mobile ones.
585−# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT
579+#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
580+ GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266
586581 # define GTEST_HAS_STREAM_REDIRECTION 0
587582 # else
588583 # define GTEST_HAS_STREAM_REDIRECTION 1
@@ -676,10 +671,10 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; · 87 unmodified lines
676671 #endif
677672
678673
679−// A macro to disallow operator=
674+// A macro to disallow copy operator=
680675 // This should be used in the private: declarations for a class.
681676 #define GTEST_DISALLOW_ASSIGN_(type) \
682− void operator=(type const &) = delete
677+ type& operator=(type const &) = delete
683678
684679 // A macro to disallow copy constructor and operator=
685680 // 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
687682 type(type const &) = delete; \
688683 GTEST_DISALLOW_ASSIGN_(type)
689684
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+
690696 // Tell the compiler to warn about unused return values for functions declared
691697 // with this macro. The macro should be used on function declarations
692698 // following the argument list:
@@ -856,9 +862,6 @@ class Secret; · 163 unmodified lines
856862 // expression is false, compiler will issue an error containing this identifier.
857863 #define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)
858864
859−// Evaluates to the number of elements in 'array'.
860−#define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))
861−
862865 // A helper for suppressing warnings on constant condition. It just
863866 // returns 'condition'.
864867 GTEST_API_ bool IsTrue(bool condition);
@@ -1599,7 +1602,7 @@ class ThreadLocal : public ThreadLocalBase { · 734 unmodified lines
15991602 class DefaultValueHolderFactory : public ValueHolderFactory {
16001603 public:
16011604 DefaultValueHolderFactory() {}
1602− virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
1605+ ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }
16031606
16041607 private:
16051608 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
@@ -1608,7 +1611,7 @@ class ThreadLocal : public ThreadLocalBase { · 2 unmodified lines
16081611 class InstanceValueHolderFactory : public ValueHolderFactory {
16091612 public:
16101613 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}
1611− virtual ValueHolder* MakeNewHolder() const {
1614+ ValueHolder* MakeNewHolder() const override {
16121615 return new ValueHolder(value_);
16131616 }
16141617
@@ -1808,7 +1811,7 @@ class GTEST_API_ ThreadLocal { · 193 unmodified lines
18081811 class DefaultValueHolderFactory : public ValueHolderFactory {
18091812 public:
18101813 DefaultValueHolderFactory() {}
1811− virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
1814+ ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }
18121815
18131816 private:
18141817 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
@@ -1817,7 +1820,7 @@ class GTEST_API_ ThreadLocal { · 2 unmodified lines
18171820 class InstanceValueHolderFactory : public ValueHolderFactory {
18181821 public:
18191822 explicit InstanceValueHolderFactory(const T& value) : value_(value) {}
1820− virtual ValueHolder* MakeNewHolder() const {
1823+ ValueHolder* MakeNewHolder() const override {
18211824 return new ValueHolder(value_);
18221825 }
18231826
@@ -1887,18 +1890,12 @@ class GTEST_API_ ThreadLocal { · 63 unmodified lines
18871890 // we cannot detect it.
18881891 GTEST_API_ size_t GetThreadCount();
18891892
1890−template <bool B>
1891−using bool_constant = std::integral_constant<bool, B>;
1892−
18931893 #if GTEST_OS_WINDOWS
18941894 # define GTEST_PATH_SEP_ "\\"
18951895 # define GTEST_HAS_ALT_PATH_SEP_ 1
1896−// The biggest signed integer type the compiler supports.
1897−typedef __int64 BiggestInt;
18981896 #else
18991897 # define GTEST_PATH_SEP_ "/"
19001898 # define GTEST_HAS_ALT_PATH_SEP_ 0
1901−typedef long long BiggestInt; // NOLINT
19021899 #endif // GTEST_OS_WINDOWS
19031900
19041901 // Utilities for char.
@@ -1993,6 +1990,22 @@ inline bool IsDir(const StatStruct& st) { · 88 unmodified lines
19931990 }
19941991 # endif // GTEST_OS_WINDOWS_MOBILE
19951992
1993+#elif GTEST_OS_ESP8266
1994+typedef struct stat StatStruct;
1995+
1996+inline int FileNo(FILE* file) { return fileno(file); }
1997+inline int IsATTY(int fd) { return isatty(fd); }
1998+inline int Stat(const char* path, StatStruct* buf) {
1999+ // stat function not implemented on ESP8266
2000+ return 0;
2001+}
2002+inline int StrCaseCmp(const char* s1, const char* s2) {
2003+ return strcasecmp(s1, s2);
2004+}
2005+inline char* StrDup(const char* src) { return strdup(src); }
2006+inline int RmDir(const char* dir) { return rmdir(dir); }
2007+inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }
2008+
19962009 #else
19972010
19982011 typedef struct stat StatStruct;
@@ -2013,10 +2026,6 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } · 14 unmodified lines
20132026
20142027 GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
20152028
2016−inline const char* StrNCpy(char* dest, const char* src, size_t n) {
2017− return strncpy(dest, src, n);
2018−}
2019−
20202029 // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and
20212030 // StrError() aren't needed on Windows CE at this time and thus not
20222031 // defined there.
@@ -2045,8 +2054,9 @@ inline int Close(int fd) { return close(fd); } · 22 unmodified lines
20452054 inline const char* StrError(int errnum) { return strerror(errnum); }
20462055 #endif
20472056 inline const char* GetEnv(const char* name) {
2048−#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT
2049− // We are on Windows CE, which has no environment variables.
2057+#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
2058+ GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266
2059+ // We are on an embedded platform, which has no environment variables.
20502060 static_cast<void>(name); // To prevent 'unused argument' warning.
20512061 return nullptr;
20522062 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
@@ -2088,15 +2098,13 @@ GTEST_DISABLE_MSC_DEPRECATED_POP_() · 35 unmodified lines
20882098 # define GTEST_SNPRINTF_ snprintf
20892099 #endif
20902100
2091−// The maximum number a BiggestInt can represent. This definition
2092−// works no matter BiggestInt is represented in one's complement or
2093−// two's complement.
2101+// The biggest signed integer type the compiler supports.
20942102 //
2095−// We cannot rely on numeric_limits in STL, as __int64 and long long
2096−// are not part of standard C++ and numeric_limits doesn't need to be
2097−// defined for them.
2098−const BiggestInt kMaxBiggestInt =
2099− ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1));
2103+// long long is guaranteed to be at least 64-bits in C++11.
2104+using BiggestInt = long long; // NOLINT
2105+
2106+// The maximum number a BiggestInt can represent.
2107+constexpr BiggestInt kMaxBiggestInt = (std::numeric_limits<BiggestInt>::max)();
21002108
21012109 // This template class serves as a compile-time function from size to
21022110 // type. It maps a size in bytes to a primitive type with that
@@ -2121,40 +2129,27 @@ class TypeWithSize { · 18 unmodified lines
21212129 public:
21222130 // This prevents the user from using TypeWithSize<N> with incorrect
21232131 // values of N.
2124− typedef void UInt;
2132+ using UInt = void;
21252133 };
21262134
21272135 // The specialization for size 4.
21282136 template <>
21292137 class TypeWithSize<4> {
21302138 public:
2131− // unsigned int has size 4 in both gcc and MSVC.
2132− //
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;
2139+ using Int = std::int32_t;
2140+ using UInt = std::uint32_t;
21372141 };
21382142
21392143 // The specialization for size 8.
21402144 template <>
21412145 class TypeWithSize<8> {
21422146 public:
2143−#if GTEST_OS_WINDOWS
2144− typedef __int64 Int;
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
2147+ using Int = std::int64_t;
2148+ using UInt = std::uint64_t;
21502149 };
21512150
21522151 // Integer types of known sizes.
2153−typedef TypeWithSize<4>::Int Int32;
2154−typedef TypeWithSize<4>::UInt UInt32;
2155−typedef TypeWithSize<8>::Int Int64;
2156−typedef TypeWithSize<8>::UInt UInt64;
2157−typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
2152+using TimeInMillis = int64_t; // Represents time in milliseconds.
21582153
21592154 // Utilities for command line flags and environment variables.
21602155
@@ -2173,7 +2168,7 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 12 unmodified lines
21732168 // Macros for declaring flags.
21742169 # define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
21752170 # 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)
21772172 # define GTEST_DECLARE_string_(name) \
21782173 GTEST_API_ extern ::std::string GTEST_FLAG(name)
21792174
@@ -2181,7 +2176,7 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 1 unmodified line
21812176 # define GTEST_DEFINE_bool_(name, default_val, doc) \
21822177 GTEST_API_ bool GTEST_FLAG(name) = (default_val)
21832178 # 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)
21852180 # define GTEST_DEFINE_string_(name, default_val, doc) \
21862181 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)
21872182
@@ -2196,12 +2191,12 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. · 8 unmodified lines
21962191 // Parses 'str' for a 32-bit signed integer. If successful, writes the result
21972192 // to *value and returns true; otherwise leaves *value unchanged and returns
21982193 // false.
2199−bool ParseInt32(const Message& src_text, const char* str, Int32* value);
2194+bool ParseInt32(const Message& src_text, const char* str, int32_t* value);
22002195
2201−// Parses a bool/Int32/string from the environment variable
2196+// Parses a bool/int32_t/string from the environment variable
22022197 // corresponding to the given Google Test flag.
22032198 bool BoolFromGTestEnv(const char* flag, bool default_val);
2204−GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val);
2199+GTEST_API_ int32_t Int32FromGTestEnv(const char* flag, int32_t default_val);
22052200 std::string OutputFlagAlsoCheckEnvVar();
22062201 const char* StringFromGTestEnv(const char* flag, const char* default_val);
22072202
@@ -2228,4 +2223,32 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val); · 20 unmodified lines
22282223
22292224 #endif // !defined(GTEST_INTERNAL_DEPRECATED)
22302225
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"
2231+namespace testing {
2232+namespace internal {
2233+using 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>
2243+namespace testing {
2244+namespace internal {
2245+using 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+
22312254 #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
4747 #endif
4848
4949 #include <string.h>
50+#include <cstdint>
5051 #include <string>
5152
5253 #include "gtest/internal/gtest-port.h"
@@ -152,7 +153,7 @@ class GTEST_API_ String { · 99 unmodified lines
152153 static std::string FormatHexInt(int value);
153154
154155 // Formats an int value as "%X".
155− static std::string FormatHexUInt32(UInt32 value);
156+ static std::string FormatHexUInt32(uint32_t value);
156157
157158 // Formats a byte as "%02X".
158159 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−
51 // Copyright 2008 Google Inc.
62 // All Rights Reserved.
73 //
@@ -32,12 +28,7 @@ · 24 unmodified lines
3228 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3329
3430 // Type utilities needed for implementing typed and type-parameterized
35−// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
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.
31+// tests.
4132
4233 // GOOGLETEST_CM0001 DO NOT DELETE
4334
@@ -105,1524 +96,9 @@ std::string GetTypeName() { · 61 unmodified lines
10596
10697 #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
10798
108−// A unique type used as the default value for the arguments of class
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.
99+// A unique type indicating an empty node
112100 struct None {};
113101
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.
122−struct Types0 {};
123−
124−// Type lists of length 1, 2, 3, and so on.
125−
126−template <typename T1>
127−struct Types1 {
128− typedef T1 Head;
129− typedef Types0 Tail;
130−};
131−template <typename T1, typename T2>
132−struct Types2 {
133− typedef T1 Head;
134− typedef Types1<T2> Tail;
135−};
136−
137−template <typename T1, typename T2, typename T3>
138−struct Types3 {
139− typedef T1 Head;
140− typedef Types2<T2, T3> Tail;
141−};
142−
143−template <typename T1, typename T2, typename T3, typename T4>
144−struct Types4 {
145− typedef T1 Head;
146− typedef Types3<T2, T3, T4> Tail;
147−};
148−
149−template <typename T1, typename T2, typename T3, typename T4, typename T5>
150−struct Types5 {
151− typedef T1 Head;
152− typedef Types4<T2, T3, T4, T5> Tail;
153−};
154−
155−template <typename T1, typename T2, typename T3, typename T4, typename T5,
156− typename T6>
157−struct Types6 {
158− typedef T1 Head;
159− typedef Types5<T2, T3, T4, T5, T6> Tail;
160−};
161−
162−template <typename T1, typename T2, typename T3, typename T4, typename T5,
163− typename T6, typename T7>
164−struct Types7 {
165− typedef T1 Head;
166− typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
167−};
168−
169−template <typename T1, typename T2, typename T3, typename T4, typename T5,
170− typename T6, typename T7, typename T8>
171−struct Types8 {
172− typedef T1 Head;
173− typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
174−};
175−
176−template <typename T1, typename T2, typename T3, typename T4, typename T5,
177− typename T6, typename T7, typename T8, typename T9>
178−struct Types9 {
179− typedef T1 Head;
180− typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
181−};
182−
183−template <typename T1, typename T2, typename T3, typename T4, typename T5,
184− typename T6, typename T7, typename T8, typename T9, typename T10>
185−struct Types10 {
186− typedef T1 Head;
187− typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
188−};
189−
190−template <typename T1, typename T2, typename T3, typename T4, typename T5,
191− typename T6, typename T7, typename T8, typename T9, typename T10,
192− typename T11>
193−struct Types11 {
194− typedef T1 Head;
195− typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
196−};
197−
198−template <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>
201−struct Types12 {
202− typedef T1 Head;
203− typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
204−};
205−
206−template <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>
209−struct Types13 {
210− typedef T1 Head;
211− typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
212−};
213−
214−template <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>
217−struct Types14 {
218− typedef T1 Head;
219− typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
220−};
221−
222−template <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>
225−struct 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−
231−template <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>
235−struct 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−
241−template <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>
245−struct 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−
251−template <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>
255−struct 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−
261−template <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>
265−struct 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−
271−template <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>
275−struct 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−
281−template <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>
286−struct 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−
292−template <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>
297−struct 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−
303−template <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>
308−struct 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−
314−template <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>
319−struct 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−
325−template <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>
330−struct 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−
336−template <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>
342−struct 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−
348−template <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>
354−struct 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−
360−template <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>
366−struct 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−
372−template <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>
378−struct 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−
385−template <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>
391−struct 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−
398−template <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>
405−struct 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−
412−template <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>
419−struct 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−
426−template <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>
433−struct 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−
440−template <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>
447−struct 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−
454−template <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>
461−struct 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−
468−template <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>
476−struct 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−
483−template <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>
491−struct 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−
498−template <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>
506−struct 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−
513−template <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>
521−struct 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−
528−template <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>
536−struct 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−
543−template <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>
552−struct 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−
559−template <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>
568−struct 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−
575−template <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>
584−struct 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−
592−template <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>
601−struct 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−
609−template <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>
618−struct 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−
626−template <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>
636−struct 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−
644−template <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>
654−struct 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−
662−template <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>
672−struct 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−
680−template <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>
690−struct 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−
698−template <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>
708−struct 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.
732−template <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>
757−struct 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−
764−template <>
765−struct 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−};
780−template <typename T1>
781−struct 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−};
796−template <typename T1, typename T2>
797−struct 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−};
812−template <typename T1, typename T2, typename T3>
813−struct 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−};
827−template <typename T1, typename T2, typename T3, typename T4>
828−struct 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−};
842−template <typename T1, typename T2, typename T3, typename T4, typename T5>
843−struct 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−};
857−template <typename T1, typename T2, typename T3, typename T4, typename T5,
858− typename T6>
859−struct 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−};
873−template <typename T1, typename T2, typename T3, typename T4, typename T5,
874− typename T6, typename T7>
875−struct 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−};
889−template <typename T1, typename T2, typename T3, typename T4, typename T5,
890− typename T6, typename T7, typename T8>
891−struct 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−};
904−template <typename T1, typename T2, typename T3, typename T4, typename T5,
905− typename T6, typename T7, typename T8, typename T9>
906−struct 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−};
919−template <typename T1, typename T2, typename T3, typename T4, typename T5,
920− typename T6, typename T7, typename T8, typename T9, typename T10>
921−struct 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−};
934−template <typename T1, typename T2, typename T3, typename T4, typename T5,
935− typename T6, typename T7, typename T8, typename T9, typename T10,
936− typename T11>
937−struct 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−};
950−template <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>
953−struct 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−};
967−template <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>
970−struct 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−};
984−template <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>
987−struct 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−};
1000−template <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>
1003−struct 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−};
1016−template <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>
1020−struct 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−};
1033−template <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>
1037−struct 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−};
1050−template <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>
1054−struct 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−};
1067−template <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>
1071−struct 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−};
1083−template <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>
1087−struct 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−};
1099−template <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>
1104−struct 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−};
1116−template <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>
1121−struct 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−};
1133−template <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>
1138−struct 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−};
1150−template <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>
1155−struct 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−};
1167−template <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>
1172−struct 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−};
1183−template <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>
1189−struct 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−};
1201−template <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>
1207−struct 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−};
1219−template <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>
1225−struct 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−};
1237−template <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>
1243−struct 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−};
1255−template <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>
1261−struct 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−};
1272−template <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>
1279−struct 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−};
1290−template <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>
1297−struct 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−};
1308−template <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>
1315−struct 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−};
1326−template <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>
1333−struct 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−};
1344−template <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>
1351−struct 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−};
1361−template <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>
1369−struct 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−};
1379−template <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>
1387−struct 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−};
1397−template <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>
1405−struct 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−};
1415−template <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>
1423−struct 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−};
1433−template <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>
1441−struct 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−};
1452−template <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>
1461−struct 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−};
1471−template <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>
1480−struct 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−};
1490−template <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>
1499−struct 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−};
1509−template <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>
1518−struct 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−};
1528−template <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>
1537−struct 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−};
1547−template <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>
1557−struct 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−};
1566−template <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>
1576−struct 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−};
1585−template <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>
1595−struct 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−};
1604−template <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>
1614−struct 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−
1624−namespace internal {
1625−
1626102 # define GTEST_TEMPLATE_ template <typename T> class
1627103
1628104 // The template "selector" struct TemplateSel<Tmpl> is used to
@@ -1644,1692 +120,64 @@ struct TemplateSel { · 15 unmodified lines
1644120 # define GTEST_BIND_(TmplSel, T) \
1645121 TmplSel::template Bind<T>::type
1646122
1647−// A unique struct template used as the default value for the
1648−// arguments of class template Templates. This allows us to simulate
1649−// variadic templates (e.g. Templates<int>, Templates<int, double>,
1650−// and etc), which C++ doesn't support directly.
1651−template <typename T>
1652−struct 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.
1662−struct Templates0 {};
1663−
1664−// Template lists of length 1, 2, 3, and so on.
1665−
1666−template <GTEST_TEMPLATE_ T1>
1667−struct Templates1 {
1668− typedef TemplateSel<T1> Head;
1669− typedef Templates0 Tail;
1670−};
1671−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
1672−struct Templates2 {
1673− typedef TemplateSel<T1> Head;
1674− typedef Templates1<T2> Tail;
1675−};
1676−
1677−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
1678−struct Templates3 {
1679− typedef TemplateSel<T1> Head;
1680− typedef Templates2<T2, T3> Tail;
1681−};
1682−
1683−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1684− GTEST_TEMPLATE_ T4>
1685−struct Templates4 {
1686− typedef TemplateSel<T1> Head;
1687− typedef Templates3<T2, T3, T4> Tail;
1688−};
1689−
1690−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1691− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
1692−struct Templates5 {
1693− typedef TemplateSel<T1> Head;
1694− typedef Templates4<T2, T3, T4, T5> Tail;
1695−};
1696−
1697−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1698− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
1699−struct Templates6 {
1700− typedef TemplateSel<T1> Head;
1701− typedef Templates5<T2, T3, T4, T5, T6> Tail;
1702−};
1703−
1704−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
1705− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
1706− GTEST_TEMPLATE_ T7>
1707−struct Templates7 {
1708− typedef TemplateSel<T1> Head;
1709− typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
1710−};
1711−
1712−template <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>
1715−struct Templates8 {
1716− typedef TemplateSel<T1> Head;
1717− typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
1718−};
1719−
1720−template <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>
1723−struct Templates9 {
1724− typedef TemplateSel<T1> Head;
1725− typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
1726−};
1727−
1728−template <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>
1732−struct Templates10 {
1733− typedef TemplateSel<T1> Head;
1734− typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
1735−};
1736−
1737−template <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>
1741−struct Templates11 {
1742− typedef TemplateSel<T1> Head;
1743− typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
1744−};
1745−
1746−template <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>
1750−struct Templates12 {
1751− typedef TemplateSel<T1> Head;
1752− typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
1753−};
1754−
1755−template <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>
1760−struct Templates13 {
1761− typedef TemplateSel<T1> Head;
1762− typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
1763−};
1764−
1765−template <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>
1770−struct 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−
1776−template <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>
1781−struct 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−
1787−template <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>
1793−struct 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−
1799−template <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>
1805−struct 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−
1811−template <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>
1817−struct 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−
1823−template <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>
1830−struct 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−
1836−template <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>
1843−struct 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−
1849−template <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>
1856−struct 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−
1862−template <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>
1870−struct 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−
1876−template <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>
1884−struct 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−
1890−template <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>
1898−struct 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−
1904−template <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>
1913−struct 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−
1919−template <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>
1928−struct 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−
1934−template <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>
1943−struct 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−
1949−template <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>
1959−struct 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−
1966−template <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>
1976−struct 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−
1983−template <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>
1993−struct 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−
2000−template <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>
2011−struct 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−
2018−template <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>
2029−struct 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−
2036−template <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>
2047−struct 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−
2054−template <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>
2066−struct 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−
2073−template <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>
2085−struct 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−
2092−template <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>
2104−struct 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−
2111−template <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>
2124−struct 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−
2131−template <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>
2144−struct 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−
2151−template <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>
2164−struct 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−
2171−template <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>
2185−struct 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−
2192−template <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>
2206−struct 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−
2213−template <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>
2227−struct 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−
2235−template <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>
2250−struct 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−
2258−template <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>
2273−struct 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−
2281−template <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>
2296−struct 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−
2304−template <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>
2320−struct 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;
123+template <GTEST_TEMPLATE_ Head_, GTEST_TEMPLATE_... Tail_>
124+struct Templates {
125+ using Head = TemplateSel<Head_>;
126+ using Tail = Templates<Tail_...>;
2326127 };
2327128
2328−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2329− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2330− GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2331− GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
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>
2344−struct 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;
129+template <GTEST_TEMPLATE_ Head_>
130+struct Templates<Head_> {
131+ using Head = TemplateSel<Head_>;
132+ using Tail = None;
2350133 };
2351134
2352−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2353− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2354− GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2355− GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2356− GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
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>
2368−struct 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;
135+// Tuple-like type lists
136+template <typename Head_, typename... Tail_>
137+struct Types {
138+ using Head = Head_;
139+ using Tail = Types<Tail_...>;
2374140 };
2375141
2376−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2377− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2378− GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2379− GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
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>
2393−struct 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;
142+template <typename Head_>
143+struct Types<Head_> {
144+ using Head = Head_;
145+ using Tail = None;
2399146 };
2400147
2401−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2402− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2403− GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
2404− GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
2405− GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
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>
2418−struct 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;
148+// Helper metafunctions to tell apart a single type from types
149+// generated by ::testing::Types
150+template <typename... Ts>
151+struct ProxyTypeList {
152+ using type = Types<Ts...>;
2424153 };
2425154
155+template <typename>
156+struct is_proxy_type_list : std::false_type {};
2426157
2427−// We don't want to require the users to write TemplatesN<...> directly,
2428−// as that would require them to count the length. Templates<...> is much
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.
2440−template <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>
2465−struct 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−
2472−template <>
2473−struct 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−};
2481−template <GTEST_TEMPLATE_ T1>
2482−struct 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−};
2490−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
2491−struct 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−};
2499−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
2500−struct 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−};
2507−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2508− GTEST_TEMPLATE_ T4>
2509−struct 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−};
2516−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2517− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
2518−struct 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−};
2525−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2526− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
2527−struct 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−};
2534−template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
2535− GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
2536− GTEST_TEMPLATE_ T7>
2537−struct 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−};
2544−template <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>
2547−struct 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−};
2554−template <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>
2557−struct 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−};
2564−template <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>
2568−struct 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−};
2575−template <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>
2579−struct 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−};
2586−template <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>
2590−struct 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−};
2597−template <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>
2602−struct 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−};
2610−template <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>
2615−struct 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−};
2623−template <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>
2628−struct 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−};
2636−template <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>
2642−struct 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−};
2650−template <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>
2656−struct 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−};
2664−template <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>
2670−struct 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−};
2678−template <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>
2685−struct 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−};
2693−template <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>
2700−struct 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−};
2708−template <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>
2715−struct 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−};
2723−template <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>
2731−struct 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−};
2739−template <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>
2747−struct 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−};
2755−template <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>
2763−struct 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−};
2771−template <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>
2780−struct 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−};
2788−template <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>
2797−struct 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−};
2805−template <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>
2814−struct 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−};
2823−template <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>
2833−struct 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−};
2842−template <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>
2852−struct 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−};
2861−template <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>
2871−struct 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−};
2879−template <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>
2890−struct 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−};
2898−template <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>
2909−struct 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−};
2917−template <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>
2928−struct 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−};
2936−template <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>
2948−struct 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−};
2956−template <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>
2968−struct 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−};
2976−template <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>
2988−struct 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−};
2996−template <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>
3009−struct 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−};
3017−template <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>
3030−struct 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−};
3038−template <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>
3051−struct 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−};
3059−template <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>
3073−struct 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−};
3081−template <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>
3095−struct 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−};
3104−template <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>
3118−struct 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−};
3127−template <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>
3142−struct 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−};
3151−template <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>
3166−struct 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−};
3175−template <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>
3190−struct 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−};
3199−template <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>
3215−struct 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−};
3224−template <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>
3240−struct 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−};
3249−template <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>
3265−struct 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−};
3274−template <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>
3291−struct 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().
158+template <typename... Ts>
159+struct is_proxy_type_list<ProxyTypeList<Ts...>> : std::true_type {};
3304160
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.
3305164 template <typename T>
3306−struct TypeList {
3307− typedef Types1<T> type;
3308−};
165+struct GenerateTypeList {
166+ private:
167+ using proxy = typename std::conditional<is_proxy_type_list<T>::value, T,
168+ ProxyTypeList<T>>::type;
3309169
3310−template <typename T1, typename T2, typename T3, typename T4, typename T5,
3311− typename T6, typename T7, typename T8, typename T9, typename T10,
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>
3320−struct 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;
170+ public:
171+ using type = typename proxy::type;
3328172 };
3329173
3330174 #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
3331175
3332176 } // namespace internal
177+
178+template <typename... Ts>
179+using Types = internal::ProxyTypeList<Ts...>;
180+
3333181 } // namespace testing
3334182
3335183 #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−
56−namespace testing {
57−namespace 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.
63−inline 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.
78−template <typename T>
79−std::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.
111−struct 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.
121−struct Types0 {};
122−
123−// Type lists of length 1, 2, 3, and so on.
124−
125−template <typename T1>
126−struct 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
136−template <$for j, [[typename T$j]]>
137−struct 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
162−template <$for i, [[typename T$i = internal::None]]>
163−struct Types {
164− typedef internal::Types$n<$for i, [[T$i]]> type;
165−};
166−
167−template <>
168−struct 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
176−template <$for j, [[typename T$j]]>
177−struct Types<$for j, [[T$j]]$for k[[, internal::None]]> {
178− typedef internal::Types$i<$for j, [[T$j]]> type;
179−};
180−
181−]]
182−
183−namespace 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.
195−template <GTEST_TEMPLATE_ Tmpl>
196−struct 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.
210−template <typename T>
211−struct 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.
221−struct Templates0 {};
222−
223−// Template lists of length 1, 2, 3, and so on.
224−
225−template <GTEST_TEMPLATE_ T1>
226−struct 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
236−template <$for j, [[GTEST_TEMPLATE_ T$j]]>
237−struct 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
260−template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]>
261−struct Templates {
262− typedef Templates$n<$for i, [[T$i]]> type;
263−};
264−
265−template <>
266−struct 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
274−template <$for j, [[GTEST_TEMPLATE_ T$j]]>
275−struct 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−
285−template <typename T>
286−struct TypeList {
287− typedef Types1<T> type;
288−};
289−
290−
291−$range i 1..n
292−template <$for i, [[typename T$i]]>
293−struct 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
13641364
13651365 if (!use_fork) {
13661366 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);
13681368 // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.
13691369 void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE,
13701370 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
9393 // Returns the current working directory, or "" if unsuccessful.
9494 FilePath FilePath::GetCurrentDir() {
9595 #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
9797 // These platforms do not have a current directory, so we just return
9898 // something reasonable.
9999 return FilePath(kCurrentDirectoryString);
@@ -323,6 +323,9 @@ bool FilePath::CreateFolder() const { · 223 unmodified lines
323323 delete [] unicode;
324324 #elif GTEST_OS_WINDOWS
325325 int result = _mkdir(pathname_.c_str());
326+#elif GTEST_OS_ESP8266
327+ // do nothing
328+ int result = 0;
326329 #else
327330 int result = mkdir(pathname_.c_str(), 0777);
328331 #endif // GTEST_OS_WINDOWS_MOBILE
third_party/googletest/src/src/gtest-internal-inl.h+30−23
@@ -42,6 +42,7 @@ · 41 unmodified lines
4242 #include <string.h> // For memmove.
4343
4444 #include <algorithm>
45+#include <cstdint>
4546 #include <memory>
4647 #include <string>
4748 #include <vector>
@@ -123,11 +124,11 @@ GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); · 75 unmodified lines
123124 // On success, stores the value of the flag in *value, and returns
124125 // true. On failure, returns false without changing *value.
125126 GTEST_API_ bool ParseInt32Flag(
126− const char* str, const char* flag, Int32* value);
127+ const char* str, const char* flag, int32_t* value);
127128
128129 // Returns a random seed in range [1, kMaxRandomSeed] based on the
129130 // given --gtest_random_seed flag value.
130−inline int GetRandomSeedFromFlag(Int32 random_seed_flag) {
131+inline int GetRandomSeedFromFlag(int32_t random_seed_flag) {
131132 const unsigned int raw_seed = (random_seed_flag == 0) ?
132133 static_cast<unsigned int>(GetTimeInMillis()) :
133134 static_cast<unsigned int>(random_seed_flag);
@@ -213,10 +214,10 @@ class GTestFlagSaver { · 79 unmodified lines
213214 std::string output_;
214215 bool print_time_;
215216 bool print_utf8_;
216− internal::Int32 random_seed_;
217− internal::Int32 repeat_;
217+ int32_t random_seed_;
218+ int32_t repeat_;
218219 bool shuffle_;
219− internal::Int32 stack_trace_depth_;
220+ int32_t stack_trace_depth_;
220221 std::string stream_result_to_;
221222 bool throw_on_failure_;
222223 } GTEST_ATTRIBUTE_UNUSED_;
@@ -227,7 +228,7 @@ class GTestFlagSaver { · 4 unmodified lines
227228 // If the code_point is not a valid Unicode code point
228229 // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted
229230 // to "(Invalid Unicode 0xXXXXXXXX)".
230−GTEST_API_ std::string CodePointToUtf8(UInt32 code_point);
231+GTEST_API_ std::string CodePointToUtf8(uint32_t code_point);
231232
232233 // Converts a wide string to a narrow string in UTF-8 encoding.
233234 // 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
260261 const char* shard_index_str,
261262 bool in_subprocess_for_death_test);
262263
263−// Parses the environment variable var as an Int32. If it is unset,
264−// returns default_val. If it is not an Int32, prints an error and
264+// Parses the environment variable var as a 32-bit integer. If it is unset,
265+// returns default_val. If it is not a 32-bit integer, prints an error and
265266 // and aborts.
266−GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val);
267+GTEST_API_ int32_t Int32FromEnvOrDie(const char* env_var, int32_t default_val);
267268
268269 // Given the total number of shards, the shard index, and the test id,
269270 // 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
323324 const int last_in_range = begin + range_width - 1;
324325 const int selected =
325326 begin +
326− static_cast<int>(random->Generate(static_cast<UInt32>(range_width)));
327+ static_cast<int>(random->Generate(static_cast<uint32_t>(range_width)));
327328 std::swap((*v)[static_cast<size_t>(selected)],
328329 (*v)[static_cast<size_t>(last_in_range)]);
329330 }
@@ -697,6 +698,17 @@ class GTEST_API_ UnitTestImpl { · 367 unmodified lines
697698 return parameterized_test_registry_;
698699 }
699700
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+
700712 // Sets the TestSuite object for the test that's currently running.
701713 void set_current_test_suite(TestSuite* a_current_test_suite) {
702714 current_test_suite_ = a_current_test_suite;
@@ -873,6 +885,12 @@ class GTEST_API_ UnitTestImpl { · 170 unmodified lines
873885 // ParameterizedTestRegistry object used to register value-parameterized
874886 // tests.
875887 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_;
876894
877895 // Indicates whether RegisterParameterizedTests() has been called already.
878896 bool parameterized_tests_registered_;
@@ -999,20 +1017,9 @@ bool ParseNaturalNumber(const ::std::string& str, Integer* number) { · 120 unmodified lines
9991017 char* end;
10001018 // BiggestConvertible is the largest integer type that system-provided
10011019 // string-to-number conversion routines can return.
1020+ using BiggestConvertible = unsigned long long; // NOLINT
10021021
1003−# if GTEST_OS_WINDOWS && !defined(__GNUC__)
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−
1022+ const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); // NOLINT
10161023 const bool parse_success = *end == '\0' && errno == 0;
10171024
10181025 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
5858 // s.
5959 Matcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); }
6060
61−#if GTEST_HAS_ABSL
62−// Constructs a matcher that matches a const absl::string_view& whose value is
61+#if GTEST_INTERNAL_HAS_STRING_VIEW
62+// Constructs a matcher that matches a const StringView& whose value is
6363 // equal to s.
64−Matcher<const absl::string_view&>::Matcher(const std::string& s) {
64+Matcher<const internal::StringView&>::Matcher(const std::string& s) {
6565 *this = Eq(s);
6666 }
6767
68−// Constructs a matcher that matches a const absl::string_view& whose value is
68+// Constructs a matcher that matches a const StringView& whose value is
6969 // equal to s.
70−Matcher<const absl::string_view&>::Matcher(const char* s) {
70+Matcher<const internal::StringView&>::Matcher(const char* s) {
7171 *this = Eq(std::string(s));
7272 }
7373
74−// Constructs a matcher that matches a const absl::string_view& whose value is
74+// Constructs a matcher that matches a const StringView& whose value is
7575 // equal to s.
76−Matcher<const absl::string_view&>::Matcher(absl::string_view s) {
76+Matcher<const internal::StringView&>::Matcher(internal::StringView s) {
7777 *this = Eq(std::string(s));
7878 }
7979
80−// Constructs a matcher that matches a absl::string_view whose value is equal to
80+// Constructs a matcher that matches a StringView whose value is equal to
8181 // s.
82−Matcher<absl::string_view>::Matcher(const std::string& s) { *this = Eq(s); }
82+Matcher<internal::StringView>::Matcher(const std::string& s) { *this = Eq(s); }
8383
84−// Constructs a matcher that matches a absl::string_view whose value is equal to
84+// Constructs a matcher that matches a StringView whose value is equal to
8585 // s.
86−Matcher<absl::string_view>::Matcher(const char* s) {
86+Matcher<internal::StringView>::Matcher(const char* s) {
8787 *this = Eq(std::string(s));
8888 }
8989
90−// Constructs a matcher that matches a absl::string_view whose value is equal to
90+// Constructs a matcher that matches a StringView whose value is equal to
9191 // s.
92−Matcher<absl::string_view>::Matcher(absl::string_view s) {
92+Matcher<internal::StringView>::Matcher(internal::StringView s) {
9393 *this = Eq(std::string(s));
9494 }
95−#endif // GTEST_HAS_ABSL
95+#endif // GTEST_INTERNAL_HAS_STRING_VIEW
9696
9797 } // namespace testing
third_party/googletest/src/src/gtest-port.cc+10−6
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #include <stdio.h>
3535 #include <stdlib.h>
3636 #include <string.h>
37+#include <cstdint>
3738 #include <fstream>
3839 #include <memory>
3940
@@ -536,6 +537,9 @@ class ThreadLocalRegistryImpl { · 496 unmodified lines
536537 // Returns a value that can be used to identify the thread from other threads.
537538 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
538539 const ThreadLocalBase* thread_local_instance) {
540+#ifdef _MSC_VER
541+ MemoryIsNotDeallocated memory_is_not_deallocated;
542+#endif // _MSC_VER
539543 DWORD current_thread = ::GetCurrentThreadId();
540544 MutexLock lock(&mutex_);
541545 ThreadIdToThreadLocals* const thread_to_thread_locals =
@@ -1286,7 +1290,7 @@ static std::string FlagToEnvVar(const char* flag) { · 744 unmodified lines
12861290 // Parses 'str' for a 32-bit signed integer. If successful, writes
12871291 // the result to *value and returns true; otherwise leaves *value
12881292 // unchanged and returns false.
1289−bool ParseInt32(const Message& src_text, const char* str, Int32* value) {
1293+bool ParseInt32(const Message& src_text, const char* str, int32_t* value) {
12901294 // Parses the environment variable as a decimal integer.
12911295 char* end = nullptr;
12921296 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
13031307 return false;
13041308 }
13051309
1306− // Is the parsed value in the range of an Int32?
1307− const Int32 result = static_cast<Int32>(long_value);
1310+ // Is the parsed value in the range of an int32_t?
1311+ const auto result = static_cast<int32_t>(long_value);
13081312 if (long_value == LONG_MAX || long_value == LONG_MIN ||
13091313 // The parsed value overflows as a long. (strtol() returns
13101314 // LONG_MAX or LONG_MIN when the input overflows.)
13111315 result != long_value
1312− // The parsed value overflows as an Int32.
1316+ // The parsed value overflows as an int32_t.
13131317 ) {
13141318 Message msg;
13151319 msg << "WARNING: " << src_text
@@ -1342,7 +1346,7 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) { · 26 unmodified lines
13421346 // Reads and returns a 32-bit integer stored in the environment
13431347 // variable corresponding to the given flag; if it isn't set or
13441348 // doesn't represent a valid 32-bit integer, returns default_value.
1345−Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
1349+int32_t Int32FromGTestEnv(const char* flag, int32_t default_value) {
13461350 #if defined(GTEST_GET_INT32_FROM_ENV_)
13471351 return GTEST_GET_INT32_FROM_ENV_(flag, default_value);
13481352 #else
@@ -1353,7 +1357,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { · 4 unmodified lines
13531357 return default_value;
13541358 }
13551359
1356− Int32 result = default_value;
1360+ int32_t result = default_value;
13571361 if (!ParseInt32(Message() << "Environment variable " << env_var,
13581362 string_value, &result)) {
13591363 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
3131 // The Google C++ Testing and Mocking Framework (Google Test)
3232
3333 #include "gtest/gtest-test-part.h"
34+
35+#include "gtest/internal/gtest-port.h"
3436 #include "src/gtest-internal-inl.h"
3537
3638 namespace testing {
@@ -46,7 +48,9 @@ std::string TestPartResult::ExtractSummary(const char* message) { · 9 unmodified lines
4648
4749 // Prints a TestPartResult object.
4850 std::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+ << " "
5054 << (result.type() == TestPartResult::kSuccess
5155 ? "Success"
5256 : 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
5858 // registered_tests_; returns registered_tests if successful, or
5959 // aborts the program otherwise.
6060 const 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+
6265 typedef RegisteredTestsMap::const_iterator RegisteredTestIter;
6366 registered_ = true;
6467
third_party/googletest/src/src/gtest.cc+229−47
@@ -44,6 +44,7 @@ · 43 unmodified lines
4444 #include <wctype.h>
4545
4646 #include <algorithm>
47+#include <cstdint>
4748 #include <iomanip>
4849 #include <limits>
4950 #include <list>
@@ -83,8 +84,11 @@ · 33 unmodified lines
8384 # include <windows.h> // NOLINT
8485 # undef min
8586
87+#ifdef _MSC_VER
8688 # include <crtdbg.h> // NOLINT
8789 # include <debugapi.h> // NOLINT
90+#endif
91+
8892 # include <io.h> // NOLINT
8993 # include <sys/timeb.h> // NOLINT
9094 # include <sys/types.h> // NOLINT
@@ -330,10 +334,10 @@ namespace internal { · 239 unmodified lines
330334 // Generates a random number from [0, range), using a Linear
331335 // Congruential Generator (LCG). Crashes if 'range' is 0 or greater
332336 // than kMaxRange.
333−UInt32 Random::Generate(UInt32 range) {
337+uint32_t Random::Generate(uint32_t range) {
334338 // These constants are the same as are used in glibc's rand(3).
335339 // 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;
337341
338342 GTEST_CHECK_(range > 0)
339343 << "Cannot generate a number in the range [0, 0).";
@@ -403,6 +407,162 @@ void AssertHelper::operator=(const Message& message) const { · 63 unmodified lines
403407 ); // NOLINT
404408 }
405409
410+namespace {
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.
417+constexpr bool kErrorOnUninstantiatedParameterizedTest = false;
418+constexpr bool kErrorOnUninstantiatedTypeParameterizedTest = false;
419+
420+// A test that fails at a given file/line location with a given message.
421+class 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+
447+std::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.
452+MarkAsIgnored::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.
458+void 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+
501+void 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+
507+void RegisterTypeParameterizedTestSuiteInstantiation(const char* case_name) {
508+ GetUnitTestImpl()
509+ ->type_parameterized_test_registry()
510+ .RegisterInstantiation(case_name);
511+}
512+
513+void 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+
519+void 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+
530+void 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+
406566 // A copy of all command line arguments. Set by InitGoogleTest().
407567 static ::std::vector<std::string> g_argvs;
408568
@@ -1735,33 +1895,33 @@ AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT · 1326 unmodified lines
17351895 // 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
17361896
17371897 // The maximum code-point a one-byte UTF-8 sequence can represent.
1738−const UInt32 kMaxCodePoint1 = (static_cast<UInt32>(1) << 7) - 1;
1898+constexpr uint32_t kMaxCodePoint1 = (static_cast<uint32_t>(1) << 7) - 1;
17391899
17401900 // The maximum code-point a two-byte UTF-8 sequence can represent.
1741−const UInt32 kMaxCodePoint2 = (static_cast<UInt32>(1) << (5 + 6)) - 1;
1901+constexpr uint32_t kMaxCodePoint2 = (static_cast<uint32_t>(1) << (5 + 6)) - 1;
17421902
17431903 // The maximum code-point a three-byte UTF-8 sequence can represent.
1744−const UInt32 kMaxCodePoint3 = (static_cast<UInt32>(1) << (4 + 2*6)) - 1;
1904+constexpr uint32_t kMaxCodePoint3 = (static_cast<uint32_t>(1) << (4 + 2*6)) - 1;
17451905
17461906 // The maximum code-point a four-byte UTF-8 sequence can represent.
1747−const UInt32 kMaxCodePoint4 = (static_cast<UInt32>(1) << (3 + 3*6)) - 1;
1907+constexpr uint32_t kMaxCodePoint4 = (static_cast<uint32_t>(1) << (3 + 3*6)) - 1;
17481908
17491909 // Chops off the n lowest bits from a bit pattern. Returns the n
17501910 // lowest bits. As a side effect, the original bit pattern will be
17511911 // shifted to the right by n bits.
1752−inline UInt32 ChopLowBits(UInt32* bits, int n) {
1753− const UInt32 low_bits = *bits & ((static_cast<UInt32>(1) << n) - 1);
1912+inline uint32_t ChopLowBits(uint32_t* bits, int n) {
1913+ const uint32_t low_bits = *bits & ((static_cast<uint32_t>(1) << n) - 1);
17541914 *bits >>= n;
17551915 return low_bits;
17561916 }
17571917
17581918 // 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 be
1919+// code_point parameter is of type uint32_t because wchar_t may not be
17601920 // wide enough to contain a code point.
17611921 // If the code_point is not a valid Unicode code point
17621922 // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted
17631923 // to "(Invalid Unicode 0xXXXXXXXX)".
1764−std::string CodePointToUtf8(UInt32 code_point) {
1924+std::string CodePointToUtf8(uint32_t code_point) {
17651925 if (code_point > kMaxCodePoint4) {
17661926 return "(Invalid Unicode 0x" + String::FormatHexUInt32(code_point) + ")";
17671927 }
@@ -1802,11 +1962,11 @@ inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { · 34 unmodified lines
18021962 }
18031963
18041964 // Creates a Unicode code point from UTF16 surrogate pair.
1805−inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,
1806− wchar_t second) {
1807− const auto first_u = static_cast<UInt32>(first);
1808− const auto second_u = static_cast<UInt32>(second);
1809− const UInt32 mask = (1 << 10) - 1;
1965+inline uint32_t CreateCodePointFromUtf16SurrogatePair(wchar_t first,
1966+ wchar_t second) {
1967+ const auto first_u = static_cast<uint32_t>(first);
1968+ const auto second_u = static_cast<uint32_t>(second);
1969+ const uint32_t mask = (1 << 10) - 1;
18101970 return (sizeof(wchar_t) == 2)
18111971 ? (((first_u & mask) << 10) | (second_u & mask)) + 0x10000
18121972 :
@@ -1834,7 +1994,7 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { · 21 unmodified lines
18341994
18351995 ::std::stringstream stream;
18361996 for (int i = 0; i < num_chars; ++i) {
1837− UInt32 unicode_code_point;
1997+ uint32_t unicode_code_point;
18381998
18391999 if (str[i] == L'\0') {
18402000 break;
@@ -1843,7 +2003,7 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { · 2 unmodified lines
18432003 str[i + 1]);
18442004 i++;
18452005 } else {
1846− unicode_code_point = static_cast<UInt32>(str[i]);
2006+ unicode_code_point = static_cast<uint32_t>(str[i]);
18472007 }
18482008
18492009 stream << CodePointToUtf8(unicode_code_point);
@@ -1969,7 +2129,7 @@ std::string String::FormatIntWidth2(int value) { · 119 unmodified lines
19692129 }
19702130
19712131 // Formats an int value as "%X".
1972−std::string String::FormatHexUInt32(UInt32 value) {
2132+std::string String::FormatHexUInt32(uint32_t value) {
19732133 std::stringstream ss;
19742134 ss << std::hex << std::uppercase << value;
19752135 return ss.str();
@@ -1977,7 +2137,7 @@ std::string String::FormatHexUInt32(UInt32 value) { · 1 unmodified line
19772137
19782138 // Formats an int value as "%X".
19792139 std::string String::FormatHexInt(int value) {
1980− return FormatHexUInt32(static_cast<UInt32>(value));
2140+ return FormatHexUInt32(static_cast<uint32_t>(value));
19812141 }
19822142
19832143 // Formats a byte as "%02X".
@@ -2646,6 +2806,7 @@ namespace internal { · 662 unmodified lines
26462806 void UnitTestImpl::RegisterParameterizedTests() {
26472807 if (!parameterized_tests_registered_) {
26482808 parameterized_test_registry_.RegisterTests();
2809+ type_parameterized_test_registry_.CheckForInstantiations();
26492810 parameterized_tests_registered_ = true;
26502811 }
26512812 }
@@ -3134,6 +3295,7 @@ class PrettyUnitTestResultPrinter : public TestEventListener { · 482 unmodified lines
31343295
31353296 private:
31363297 static void PrintFailedTests(const UnitTest& unit_test);
3298+ static void PrintFailedTestSuites(const UnitTest& unit_test);
31373299 static void PrintSkippedTests(const UnitTest& unit_test);
31383300 };
31393301
@@ -3153,7 +3315,7 @@ void PrettyUnitTestResultPrinter::OnTestIterationStart( · 13 unmodified lines
31533315 }
31543316
31553317 if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {
3156− const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);
3318+ const int32_t shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);
31573319 ColoredPrintf(COLOR_YELLOW,
31583320 "Note: This is test shard %d of %s.\n",
31593321 static_cast<int>(shard_index) + 1,
@@ -3220,9 +3382,7 @@ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { · 60 unmodified lines
32203382 void PrettyUnitTestResultPrinter::OnTestPartResult(
32213383 const TestPartResult& result) {
32223384 switch (result.type()) {
3223− // If the test part succeeded, or was skipped,
3224− // we don't need to do anything.
3225− case TestPartResult::kSkip:
3385+ // If the test part succeeded, we don't need to do anything.
32263386 case TestPartResult::kSuccess:
32273387 return;
32283388 default:
@@ -3288,9 +3448,8 @@ void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( · 59 unmodified lines
32883448 // Internal helper for printing the list of failed tests.
32893449 void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {
32903450 const int failed_test_count = unit_test.failed_test_count();
3291− if (failed_test_count == 0) {
3292− return;
3293− }
3451+ ColoredPrintf(COLOR_RED, "[ FAILED ] ");
3452+ printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str());
32943453
32953454 for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {
32963455 const TestSuite& test_suite = *unit_test.GetTestSuite(i);
@@ -3308,6 +3467,30 @@ void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { · 11 unmodified lines
33083467 printf("\n");
33093468 }
33103469 }
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.
3476+void 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+ }
33113494 }
33123495
33133496 // Internal helper for printing the list of skipped tests.
@@ -3355,19 +3538,14 @@ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, · 41 unmodified lines
33553538 PrintSkippedTests(unit_test);
33563539 }
33573540
3358− int num_failures = unit_test.failed_test_count();
33593541 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());
33633542 PrintFailedTests(unit_test);
3364− printf("\n%2d FAILED %s\n", num_failures,
3365− num_failures == 1 ? "TEST" : "TESTS");
3543+ PrintFailedTestSuites(unit_test);
33663544 }
33673545
33683546 int num_disabled = unit_test.reportable_disabled_test_count();
33693547 if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) {
3370− if (!num_failures) {
3548+ if (unit_test.Passed()) {
33713549 printf("\n"); // Add a spacer if no FAILURE banner is displayed.
33723550 }
33733551 ColoredPrintf(COLOR_YELLOW,
@@ -4508,6 +4686,7 @@ class ScopedPrematureExitFile { · 1134 unmodified lines
45084686 }
45094687
45104688 ~ScopedPrematureExitFile() {
4689+#if !defined GTEST_OS_ESP8266
45114690 if (!premature_exit_filepath_.empty()) {
45124691 int retval = remove(premature_exit_filepath_.c_str());
45134692 if (retval) {
@@ -4516,6 +4695,7 @@ class ScopedPrematureExitFile { · 2 unmodified lines
45164695 << retval;
45174696 }
45184697 }
4698+#endif
45194699 }
45204700
45214701 private:
@@ -4908,7 +5088,6 @@ int UnitTest::Run() { · 386 unmodified lines
49085088 _set_abort_behavior(
49095089 0x0, // Clear the following flags:
49105090 _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump.
4911−# endif
49125091
49135092 // In debug mode, the Windows CRT can crash with an assertion over invalid
49145093 // input (e.g. passing an invalid file descriptor). The default handling
@@ -4919,6 +5098,7 @@ int UnitTest::Run() { · 4 unmodified lines
49195098 _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
49205099 (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
49215100 }
5101+# endif
49225102 }
49235103 #endif // GTEST_OS_WINDOWS
49245104
@@ -5299,7 +5479,7 @@ bool UnitTestImpl::RunAllTests() { · 374 unmodified lines
52995479
53005480 // Shuffles test suites and tests if requested.
53015481 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_));
53035483 // This should be done before calling OnTestIterationStart(),
53045484 // such that a test event listener can see the actual test order
53055485 // in the event.
@@ -5422,8 +5602,8 @@ bool ShouldShard(const char* total_shards_env, · 116 unmodified lines
54225602 return false;
54235603 }
54245604
5425− const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1);
5426− const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1);
5605+ const int32_t total_shards = Int32FromEnvOrDie(total_shards_env, -1);
5606+ const int32_t shard_index = Int32FromEnvOrDie(shard_index_env, -1);
54275607
54285608 if (total_shards == -1 && shard_index == -1) {
54295609 return false;
@@ -5460,13 +5640,13 @@ bool ShouldShard(const char* total_shards_env, · 30 unmodified lines
54605640 // Parses the environment variable var as an Int32. If it is unset,
54615641 // returns default_val. If it is not an Int32, prints an error
54625642 // and aborts.
5463−Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) {
5643+int32_t Int32FromEnvOrDie(const char* var, int32_t default_val) {
54645644 const char* str_val = posix::GetEnv(var);
54655645 if (str_val == nullptr) {
54665646 return default_val;
54675647 }
54685648
5469− Int32 result;
5649+ int32_t result;
54705650 if (!ParseInt32(Message() << "The value of environment variable " << var,
54715651 str_val, &result)) {
54725652 exit(EXIT_FAILURE);
@@ -5490,9 +5670,9 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { · 17 unmodified lines
54905670 // https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
54915671 // . Returns the number of tests that should run.
54925672 int 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 ?
54945674 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 ?
54965676 Int32FromEnvOrDie(kTestShardIndex, -1) : -1;
54975677
54985678 // 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
57815961 return true;
57825962 }
57835963
5784−// Parses a string for an Int32 flag, in the form of
5785−// "--flag=value".
5964+// Parses a string for an int32_t flag, in the form of "--flag=value".
57865965 //
57875966 // On success, stores the value of the flag in *value, and returns
57885967 // true. On failure, returns false without changing *value.
5789−bool ParseInt32Flag(const char* str, const char* flag, Int32* value) {
5968+bool ParseInt32Flag(const char* str, const char* flag, int32_t* value) {
57905969 // Gets the value of the flag as a string.
57915970 const char* const value_str = ParseFlagValue(str, flag, false);
57925971
@@ -5798,8 +5977,7 @@ bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { · 5 unmodified lines
57985977 value_str, value);
57995978 }
58005979
5801−// Parses a string for a string flag, in the form of
5802−// "--flag=value".
5980+// Parses a string for a string flag, in the form of "--flag=value".
58035981 //
58045982 // On success, stores the value of the flag in *value, and returns
58055983 // true. On failure, returns false without changing *value.
@@ -6149,7 +6327,11 @@ std::string TempDir() { · 343 unmodified lines
61496327 else
61506328 return std::string(temp_dir) + "\\";
61516329 #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;
61536335 #else
61546336 return "/tmp/";
61556337 #endif // GTEST_OS_WINDOWS_MOBILE
third_party/googletest/src/src/gtest_main.cc+8−1
@@ -30,13 +30,20 @@ · 29 unmodified lines
3030 #include <cstdio>
3131 #include "gtest/gtest.h"
3232
33−#ifdef ARDUINO
33+#if GTEST_OS_ESP8266 || GTEST_OS_ESP32
34+#if GTEST_OS_ESP8266
35+extern "C" {
36+#endif
3437 void setup() {
3538 testing::InitGoogleTest();
3639 }
3740
3841 void loop() { RUN_ALL_TESTS(); }
3942
43+#if GTEST_OS_ESP8266
44+}
45+#endif
46+
4047 #else
4148
4249 GTEST_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