Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
a8b1a66c
Commit
a8b1a66c
authored
Oct 29, 2019
by
vslashg
Browse files
Merge pull request #2388 from kuzkry:remove-gtest-type-util.pump
PiperOrigin-RevId: 276944601
parents
540835fa
1a49b67a
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
251 additions
and
3523 deletions
+251
-3523
CONTRIBUTING.md
CONTRIBUTING.md
+4
-4
googlemock/docs/pump_manual.md
googlemock/docs/pump_manual.md
+0
-0
googlemock/scripts/pump.py
googlemock/scripts/pump.py
+0
-0
googlemock/test/pump_test.py
googlemock/test/pump_test.py
+182
-0
googletest/CONTRIBUTORS
googletest/CONTRIBUTORS
+1
-0
googletest/include/gtest/gtest-typed-test.h
googletest/include/gtest/gtest-typed-test.h
+15
-17
googletest/include/gtest/internal/gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+3
-3
googletest/include/gtest/internal/gtest-type-util.h
googletest/include/gtest/internal/gtest-type-util.h
+41
-3193
googletest/include/gtest/internal/gtest-type-util.h.pump
googletest/include/gtest/internal/gtest-type-util.h.pump
+0
-302
googletest/test/gtest-unittest-api_test.cc
googletest/test/gtest-unittest-api_test.cc
+5
-4
No files found.
CONTRIBUTING.md
View file @
a8b1a66c
...
@@ -133,10 +133,10 @@ All tests should pass.
...
@@ -133,10 +133,10 @@ All tests should pass.
Some of Google Test's source files are generated from templates (not in the C++
Some of Google Test's source files are generated from templates (not in the C++
sense) using a script. For example, the file
sense) using a script. For example, the file
include/gtest/internal/gtest-type-util
.h.pump is used to generate
*googlemock/include/gmock/gmock-generated-actions
.h.pump
*
is used to generate
gtest-type-util
.h in the same directory.
*gmock-generated-actions
.h
*
in the same directory.
You don't need to worry about regenerating the source files unless you need to
You don't need to worry about regenerating the source files unless you need to
modify them. You would then modify the corresponding
`.pump`
files and run the
modify them. You would then modify the corresponding
`.pump`
files and run the
'
[
pump.py
](
google
test
/scripts/pump.py
)
' generator script. See the
'
[
pump.py
](
google
mock
/scripts/pump.py
)
' generator script. See the
[
Pump Manual
](
google
test
/docs/pump_manual.md
)
.
[
Pump Manual
](
google
mock
/docs/pump_manual.md
)
.
google
test
/docs/pump_manual.md
→
google
mock
/docs/pump_manual.md
View file @
a8b1a66c
File moved
google
test
/scripts/pump.py
→
google
mock
/scripts/pump.py
View file @
a8b1a66c
File moved
googlemock/test/pump_test.py
0 → 100755
View file @
a8b1a66c
#!/usr/bin/env python
#
# Copyright 2010, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""Tests for the Pump meta-programming tool."""
from
google3.testing.pybase
import
googletest
import
google3.third_party.googletest.googlemock.scripts.pump
pump
=
google3
.
third_party
.
googletest
.
googlemock
.
scripts
.
pump
Convert
=
pump
.
ConvertFromPumpSource
StripMetaComments
=
pump
.
StripMetaComments
class
PumpTest
(
googletest
.
TestCase
):
def
testConvertsEmptyToEmpty
(
self
):
self
.
assertEquals
(
''
,
Convert
(
''
).
strip
())
def
testConvertsPlainCodeToSame
(
self
):
self
.
assertEquals
(
'#include <stdio.h>
\n
'
,
Convert
(
'#include <stdio.h>
\n
'
))
def
testConvertsLongIWYUPragmaToSame
(
self
):
long_line
=
'// IWYU pragma: private, include "'
+
(
80
*
'a'
)
+
'.h"
\n
'
self
.
assertEquals
(
long_line
,
Convert
(
long_line
))
def
testConvertsIWYUPragmaWithLeadingSpaceToSame
(
self
):
long_line
=
' // IWYU pragma: private, include "'
+
(
80
*
'a'
)
+
'.h"
\n
'
self
.
assertEquals
(
long_line
,
Convert
(
long_line
))
def
testConvertsIWYUPragmaWithSlashStarLeaderToSame
(
self
):
long_line
=
'/* IWYU pragma: private, include "'
+
(
80
*
'a'
)
+
'.h"
\n
'
self
.
assertEquals
(
long_line
,
Convert
(
long_line
))
def
testConvertsIWYUPragmaWithSlashStarAndSpacesToSame
(
self
):
long_line
=
' /* IWYU pragma: private, include "'
+
(
80
*
'a'
)
+
'.h"
\n
'
self
.
assertEquals
(
long_line
,
Convert
(
long_line
))
def
testIgnoresMetaComment
(
self
):
self
.
assertEquals
(
''
,
Convert
(
'$$ This is a Pump meta comment.
\n
'
).
strip
())
def
testSimpleVarDeclarationWorks
(
self
):
self
.
assertEquals
(
'3
\n
'
,
Convert
(
'$var m = 3
\n
'
'$m
\n
'
))
def
testVarDeclarationCanReferenceEarlierVar
(
self
):
self
.
assertEquals
(
'43 != 3;
\n
'
,
Convert
(
'$var a = 42
\n
'
'$var b = a + 1
\n
'
'$var c = (b - a)*3
\n
'
'$b != $c;
\n
'
))
def
testSimpleLoopWorks
(
self
):
self
.
assertEquals
(
'1, 2, 3, 4, 5
\n
'
,
Convert
(
'$var n = 5
\n
'
'$range i 1..n
\n
'
'$for i, [[$i]]
\n
'
))
def
testSimpleLoopWithCommentWorks
(
self
):
self
.
assertEquals
(
'1, 2, 3, 4, 5
\n
'
,
Convert
(
'$var n = 5 $$ This is comment 1.
\n
'
'$range i 1..n $$ This is comment 2.
\n
'
'$for i, [[$i]]
\n
'
))
def
testNonTrivialRangeExpressionsWork
(
self
):
self
.
assertEquals
(
'1, 2, 3, 4
\n
'
,
Convert
(
'$var n = 5
\n
'
'$range i (n/n)..(n - 1)
\n
'
'$for i, [[$i]]
\n
'
))
def
testLoopWithoutSeparatorWorks
(
self
):
self
.
assertEquals
(
'a + 1 + 2 + 3;
\n
'
,
Convert
(
'$range i 1..3
\n
'
'a$for i [[ + $i]];
\n
'
))
def
testCanGenerateDollarSign
(
self
):
self
.
assertEquals
(
'$
\n
'
,
Convert
(
'$($)
\n
'
))
def
testCanIterpolateExpressions
(
self
):
self
.
assertEquals
(
'a[2] = 3;
\n
'
,
Convert
(
'$var i = 1
\n
'
'a[$(i + 1)] = $(i*4 - 1);
\n
'
))
def
testConditionalWithoutElseBranchWorks
(
self
):
self
.
assertEquals
(
'true
\n
'
,
Convert
(
'$var n = 5
\n
'
'$if n > 0 [[true]]
\n
'
))
def
testConditionalWithElseBranchWorks
(
self
):
self
.
assertEquals
(
'true -- really false
\n
'
,
Convert
(
'$var n = 5
\n
'
'$if n > 0 [[true]]
\n
'
'$else [[false]] --
\n
'
'$if n > 10 [[really true]]
\n
'
'$else [[really false]]
\n
'
))
def
testConditionalWithCascadingElseBranchWorks
(
self
):
self
.
assertEquals
(
'a
\n
'
,
Convert
(
'$var n = 5
\n
'
'$if n > 0 [[a]]
\n
'
'$elif n > 10 [[b]]
\n
'
'$else [[c]]
\n
'
))
self
.
assertEquals
(
'b
\n
'
,
Convert
(
'$var n = 5
\n
'
'$if n > 10 [[a]]
\n
'
'$elif n > 0 [[b]]
\n
'
'$else [[c]]
\n
'
))
self
.
assertEquals
(
'c
\n
'
,
Convert
(
'$var n = 5
\n
'
'$if n > 10 [[a]]
\n
'
'$elif n > 8 [[b]]
\n
'
'$else [[c]]
\n
'
))
def
testNestedLexicalBlocksWork
(
self
):
self
.
assertEquals
(
'a = 5;
\n
'
,
Convert
(
'$var n = 5
\n
'
'a = [[$if n > 0 [[$n]]]];
\n
'
))
class
StripMetaCommentsTest
(
googletest
.
TestCase
):
def
testReturnsSameStringIfItContainsNoComment
(
self
):
self
.
assertEquals
(
''
,
StripMetaComments
(
''
))
self
.
assertEquals
(
' blah '
,
StripMetaComments
(
' blah '
))
self
.
assertEquals
(
'A single $ is fine.'
,
StripMetaComments
(
'A single $ is fine.'
))
self
.
assertEquals
(
'multiple
\n
lines'
,
StripMetaComments
(
'multiple
\n
lines'
))
def
testStripsSimpleComment
(
self
):
self
.
assertEquals
(
'yes
\n
'
,
StripMetaComments
(
'yes $$ or no?
\n
'
))
def
testStripsSimpleCommentWithMissingNewline
(
self
):
self
.
assertEquals
(
'yes'
,
StripMetaComments
(
'yes $$ or no?'
))
def
testStripsPureCommentLinesEntirely
(
self
):
self
.
assertEquals
(
'yes
\n
'
,
StripMetaComments
(
'$$ a pure comment line.
\n
'
'yes $$ or no?
\n
'
' $$ another comment line.
\n
'
))
def
testStripsCommentsFromMultiLineText
(
self
):
self
.
assertEquals
(
'multi-
\n
'
'line
\n
'
'text is fine.'
,
StripMetaComments
(
'multi- $$ comment 1
\n
'
'line
\n
'
'text is fine. $$ comment 2'
))
if
__name__
==
'__main__'
:
googletest
.
main
()
googletest/CONTRIBUTORS
View file @
a8b1a66c
...
@@ -17,6 +17,7 @@ Jói Sigurðsson <joi@google.com>
...
@@ -17,6 +17,7 @@ Jói Sigurðsson <joi@google.com>
Keir Mierle <mierle@gmail.com>
Keir Mierle <mierle@gmail.com>
Keith Ray <keith.ray@gmail.com>
Keith Ray <keith.ray@gmail.com>
Kenton Varda <kenton@google.com>
Kenton Varda <kenton@google.com>
Krystian Kuzniarek <krystian.kuzniarek@gmail.com>
Manuel Klimek <klimek@google.com>
Manuel Klimek <klimek@google.com>
Markus Heule <markus.heule@gmail.com>
Markus Heule <markus.heule@gmail.com>
Mika Raento <mikie@iki.fi>
Mika Raento <mikie@iki.fi>
...
...
googletest/include/gtest/gtest-typed-test.h
View file @
a8b1a66c
...
@@ -27,7 +27,6 @@
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// GOOGLETEST_CM0001 DO NOT DELETE
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
...
@@ -189,12 +188,12 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
...
@@ -189,12 +188,12 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
gtest_type_params_##TestSuiteName##_NameGenerator
gtest_type_params_##TestSuiteName##_NameGenerator
#define TYPED_TEST_SUITE(CaseName, Types, ...) \
#define TYPED_TEST_SUITE(CaseName, Types, ...) \
typedef ::testing::internal::TypeList<Types>::type
GTEST_TYPE_PARAMS_(
\
typedef ::testing::internal::
Generate
TypeList<Types>::type
\
CaseName);
\
GTEST_TYPE_PARAMS_(CaseName);
\
typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
GTEST_NAME_GENERATOR_(CaseName)
GTEST_NAME_GENERATOR_(CaseName)
#
define TYPED_TEST(CaseName, TestName) \
#define TYPED_TEST(CaseName, TestName)
\
template <typename gtest_TypeParam_> \
template <typename gtest_TypeParam_> \
class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
: public CaseName<gtest_TypeParam_> { \
: public CaseName<gtest_TypeParam_> { \
...
@@ -204,8 +203,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
...
@@ -204,8 +203,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
void TestBody() override; \
void TestBody() override; \
}; \
}; \
static bool gtest_##CaseName##_##TestName##_registered_ \
static bool gtest_##CaseName##_##TestName##_registered_ \
GTEST_ATTRIBUTE_UNUSED_ = \
GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \
::testing::internal::TypeParameterizedTest< \
CaseName, \
CaseName, \
::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
TestName)>, \
TestName)>, \
...
@@ -288,7 +286,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
...
@@ -288,7 +286,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
typedef ::testing::internal::Templates<__VA_ARGS__>
::type
gtest_AllTests_; \
typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_;
\
} \
} \
static const char* const GTEST_REGISTERED_TEST_NAMES_( \
static const char* const GTEST_REGISTERED_TEST_NAMES_( \
SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
...
@@ -307,7 +305,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
...
@@ -307,7 +305,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
::testing::internal::TypeParameterizedTestSuite< \
::testing::internal::TypeParameterizedTestSuite< \
SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
::testing::internal::TypeList<Types>::type>::
\
::testing::internal::
Generate
TypeList<Types>::type>:: \
Register(#Prefix, \
Register(#Prefix, \
::testing::internal::CodeLocation(__FILE__, __LINE__), \
::testing::internal::CodeLocation(__FILE__, __LINE__), \
>EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \
>EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \
...
@@ -315,7 +313,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
...
@@ -315,7 +313,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
::testing::internal::GenerateNames< \
::testing::internal::GenerateNames< \
::testing::internal::NameGeneratorSelector< \
::testing::internal::NameGeneratorSelector< \
__VA_ARGS__>::type, \
__VA_ARGS__>::type, \
::testing::internal::TypeList<Types>::type>())
::testing::internal::
Generate
TypeList<Types>::type>())
// Legacy API is deprecated but still available
// Legacy API is deprecated but still available
#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
...
...
googletest/include/gtest/internal/gtest-internal.h
View file @
a8b1a66c
...
@@ -662,7 +662,7 @@ struct NameGeneratorSelector {
...
@@ -662,7 +662,7 @@ struct NameGeneratorSelector {
};
};
template
<
typename
NameGenerator
>
template
<
typename
NameGenerator
>
void
GenerateNamesRecursively
(
Types0
,
std
::
vector
<
std
::
string
>*
,
int
)
{}
void
GenerateNamesRecursively
(
internal
::
None
,
std
::
vector
<
std
::
string
>*
,
int
)
{}
template
<
typename
NameGenerator
,
typename
Types
>
template
<
typename
NameGenerator
,
typename
Types
>
void
GenerateNamesRecursively
(
Types
,
std
::
vector
<
std
::
string
>*
result
,
int
i
)
{
void
GenerateNamesRecursively
(
Types
,
std
::
vector
<
std
::
string
>*
result
,
int
i
)
{
...
@@ -729,7 +729,7 @@ class TypeParameterizedTest {
...
@@ -729,7 +729,7 @@ class TypeParameterizedTest {
// The base case for the compile time recursion.
// The base case for the compile time recursion.
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
internal
::
None
>
{
public:
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
...
@@ -781,7 +781,7 @@ class TypeParameterizedTestSuite {
...
@@ -781,7 +781,7 @@ class TypeParameterizedTestSuite {
// The base case for the compile time recursion.
// The base case for the compile time recursion.
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
class
TypeParameterizedTestSuite
<
Fixture
,
Templates0
,
Types
>
{
class
TypeParameterizedTestSuite
<
Fixture
,
internal
::
None
,
Types
>
{
public:
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
TypedTestSuitePState
*
/*state*/
,
const
TypedTestSuitePState
*
/*state*/
,
...
...
googletest/include/gtest/internal/gtest-type-util.h
View file @
a8b1a66c
// This file was GENERATED by command:
// pump.py gtest-type-util.h.pump
// DO NOT EDIT BY HAND!!!
// Copyright 2008 Google Inc.
// Copyright 2008 Google Inc.
// All Rights Reserved.
// All Rights Reserved.
//
//
...
@@ -32,12 +28,7 @@
...
@@ -32,12 +28,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Type utilities needed for implementing typed and type-parameterized
// Type utilities needed for implementing typed and type-parameterized
// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
// tests.
//
// Currently we support at most 50 types in a list, and at most 50
// type-parameterized tests in one type-parameterized test suite.
// Please contact googletestframework@googlegroups.com if you need
// more.
// GOOGLETEST_CM0001 DO NOT DELETE
// GOOGLETEST_CM0001 DO NOT DELETE
...
@@ -105,1524 +96,9 @@ std::string GetTypeName() {
...
@@ -105,1524 +96,9 @@ std::string GetTypeName() {
#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
// A unique type used as the default value for the arguments of class
// A unique type indicating an empty node
// template Types. This allows us to simulate variadic templates
// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
// support directly.
struct
None
{};
struct
None
{};
// The following family of struct and struct templates are used to
// represent type lists. In particular, TypesN<T1, T2, ..., TN>
// represents a type list with N types (T1, T2, ..., and TN) in it.
// Except for Types0, every struct in the family has two member types:
// Head for the first type in the list, and Tail for the rest of the
// list.
// The empty type list.
struct
Types0
{};
// Type lists of length 1, 2, 3, and so on.
template
<
typename
T1
>
struct
Types1
{
typedef
T1
Head
;
typedef
Types0
Tail
;
};
template
<
typename
T1
,
typename
T2
>
struct
Types2
{
typedef
T1
Head
;
typedef
Types1
<
T2
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
>
struct
Types3
{
typedef
T1
Head
;
typedef
Types2
<
T2
,
T3
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
>
struct
Types4
{
typedef
T1
Head
;
typedef
Types3
<
T2
,
T3
,
T4
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
>
struct
Types5
{
typedef
T1
Head
;
typedef
Types4
<
T2
,
T3
,
T4
,
T5
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
>
struct
Types6
{
typedef
T1
Head
;
typedef
Types5
<
T2
,
T3
,
T4
,
T5
,
T6
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
>
struct
Types7
{
typedef
T1
Head
;
typedef
Types6
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
>
struct
Types8
{
typedef
T1
Head
;
typedef
Types7
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
>
struct
Types9
{
typedef
T1
Head
;
typedef
Types8
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
>
struct
Types10
{
typedef
T1
Head
;
typedef
Types9
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
>
struct
Types11
{
typedef
T1
Head
;
typedef
Types10
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
>
struct
Types12
{
typedef
T1
Head
;
typedef
Types11
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
>
struct
Types13
{
typedef
T1
Head
;
typedef
Types12
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
>
struct
Types14
{
typedef
T1
Head
;
typedef
Types13
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
>
struct
Types15
{
typedef
T1
Head
;
typedef
Types14
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
>
struct
Types16
{
typedef
T1
Head
;
typedef
Types15
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
>
struct
Types17
{
typedef
T1
Head
;
typedef
Types16
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
>
struct
Types18
{
typedef
T1
Head
;
typedef
Types17
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
>
struct
Types19
{
typedef
T1
Head
;
typedef
Types18
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
>
struct
Types20
{
typedef
T1
Head
;
typedef
Types19
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
>
struct
Types21
{
typedef
T1
Head
;
typedef
Types20
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
>
struct
Types22
{
typedef
T1
Head
;
typedef
Types21
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
>
struct
Types23
{
typedef
T1
Head
;
typedef
Types22
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
>
struct
Types24
{
typedef
T1
Head
;
typedef
Types23
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
>
struct
Types25
{
typedef
T1
Head
;
typedef
Types24
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
>
struct
Types26
{
typedef
T1
Head
;
typedef
Types25
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
>
struct
Types27
{
typedef
T1
Head
;
typedef
Types26
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
>
struct
Types28
{
typedef
T1
Head
;
typedef
Types27
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
>
struct
Types29
{
typedef
T1
Head
;
typedef
Types28
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
>
struct
Types30
{
typedef
T1
Head
;
typedef
Types29
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
>
struct
Types31
{
typedef
T1
Head
;
typedef
Types30
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
>
struct
Types32
{
typedef
T1
Head
;
typedef
Types31
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
>
struct
Types33
{
typedef
T1
Head
;
typedef
Types32
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
>
struct
Types34
{
typedef
T1
Head
;
typedef
Types33
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
>
struct
Types35
{
typedef
T1
Head
;
typedef
Types34
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
>
struct
Types36
{
typedef
T1
Head
;
typedef
Types35
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
>
struct
Types37
{
typedef
T1
Head
;
typedef
Types36
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
>
struct
Types38
{
typedef
T1
Head
;
typedef
Types37
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
>
struct
Types39
{
typedef
T1
Head
;
typedef
Types38
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
>
struct
Types40
{
typedef
T1
Head
;
typedef
Types39
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
>
struct
Types41
{
typedef
T1
Head
;
typedef
Types40
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
>
struct
Types42
{
typedef
T1
Head
;
typedef
Types41
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
>
struct
Types43
{
typedef
T1
Head
;
typedef
Types42
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
>
struct
Types44
{
typedef
T1
Head
;
typedef
Types43
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
>
struct
Types45
{
typedef
T1
Head
;
typedef
Types44
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
>
struct
Types46
{
typedef
T1
Head
;
typedef
Types45
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
>
struct
Types47
{
typedef
T1
Head
;
typedef
Types46
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
>
struct
Types48
{
typedef
T1
Head
;
typedef
Types47
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
,
typename
T49
>
struct
Types49
{
typedef
T1
Head
;
typedef
Types48
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
>
Tail
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
,
typename
T49
,
typename
T50
>
struct
Types50
{
typedef
T1
Head
;
typedef
Types49
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>
Tail
;
};
}
// namespace internal
// We don't want to require the users to write TypesN<...> directly,
// as that would require them to count the length. Types<...> is much
// easier to write, but generates horrible messages when there is a
// compiler error, as gcc insists on printing out each template
// argument, even if it has the default value (this means Types<int>
// will appear as Types<int, None, None, ..., None> in the compiler
// errors).
//
// Our solution is to combine the best part of the two approaches: a
// user would write Types<T1, ..., TN>, and Google Test will translate
// that to TypesN<T1, ..., TN> internally to make error messages
// readable. The translation is done by the 'type' member of the
// Types template.
template
<
typename
T1
=
internal
::
None
,
typename
T2
=
internal
::
None
,
typename
T3
=
internal
::
None
,
typename
T4
=
internal
::
None
,
typename
T5
=
internal
::
None
,
typename
T6
=
internal
::
None
,
typename
T7
=
internal
::
None
,
typename
T8
=
internal
::
None
,
typename
T9
=
internal
::
None
,
typename
T10
=
internal
::
None
,
typename
T11
=
internal
::
None
,
typename
T12
=
internal
::
None
,
typename
T13
=
internal
::
None
,
typename
T14
=
internal
::
None
,
typename
T15
=
internal
::
None
,
typename
T16
=
internal
::
None
,
typename
T17
=
internal
::
None
,
typename
T18
=
internal
::
None
,
typename
T19
=
internal
::
None
,
typename
T20
=
internal
::
None
,
typename
T21
=
internal
::
None
,
typename
T22
=
internal
::
None
,
typename
T23
=
internal
::
None
,
typename
T24
=
internal
::
None
,
typename
T25
=
internal
::
None
,
typename
T26
=
internal
::
None
,
typename
T27
=
internal
::
None
,
typename
T28
=
internal
::
None
,
typename
T29
=
internal
::
None
,
typename
T30
=
internal
::
None
,
typename
T31
=
internal
::
None
,
typename
T32
=
internal
::
None
,
typename
T33
=
internal
::
None
,
typename
T34
=
internal
::
None
,
typename
T35
=
internal
::
None
,
typename
T36
=
internal
::
None
,
typename
T37
=
internal
::
None
,
typename
T38
=
internal
::
None
,
typename
T39
=
internal
::
None
,
typename
T40
=
internal
::
None
,
typename
T41
=
internal
::
None
,
typename
T42
=
internal
::
None
,
typename
T43
=
internal
::
None
,
typename
T44
=
internal
::
None
,
typename
T45
=
internal
::
None
,
typename
T46
=
internal
::
None
,
typename
T47
=
internal
::
None
,
typename
T48
=
internal
::
None
,
typename
T49
=
internal
::
None
,
typename
T50
=
internal
::
None
>
struct
Types
{
typedef
internal
::
Types50
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>
type
;
};
template
<
>
struct
Types
<
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types0
type
;
};
template
<
typename
T1
>
struct
Types
<
T1
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types1
<
T1
>
type
;
};
template
<
typename
T1
,
typename
T2
>
struct
Types
<
T1
,
T2
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types2
<
T1
,
T2
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
>
struct
Types
<
T1
,
T2
,
T3
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types3
<
T1
,
T2
,
T3
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types4
<
T1
,
T2
,
T3
,
T4
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types5
<
T1
,
T2
,
T3
,
T4
,
T5
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types6
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types7
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types8
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types9
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types10
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types11
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types12
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types13
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types14
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types15
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types16
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types17
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types18
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types19
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types20
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types21
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types22
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types23
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types24
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types25
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types26
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types27
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types28
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types29
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types30
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types31
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types32
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types33
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types34
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types35
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types36
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types37
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types38
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types39
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types40
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types41
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types42
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types43
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types44
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types45
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
internal
::
None
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types46
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
internal
::
None
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types47
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
internal
::
None
,
internal
::
None
>
{
typedef
internal
::
Types48
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
>
type
;
};
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
,
typename
T49
>
struct
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
internal
::
None
>
{
typedef
internal
::
Types49
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
>
type
;
};
namespace
internal
{
# define GTEST_TEMPLATE_ template <typename T> class
# define GTEST_TEMPLATE_ template <typename T> class
// The template "selector" struct TemplateSel<Tmpl> is used to
// The template "selector" struct TemplateSel<Tmpl> is used to
...
@@ -1644,1692 +120,64 @@ struct TemplateSel {
...
@@ -1644,1692 +120,64 @@ struct TemplateSel {
# define GTEST_BIND_(TmplSel, T) \
# define GTEST_BIND_(TmplSel, T) \
TmplSel::template Bind<T>::type
TmplSel::template Bind<T>::type
// A unique struct template used as the default value for the
template
<
GTEST_TEMPLATE_
Head_
,
GTEST_TEMPLATE_
...
Tail_
>
// arguments of class template Templates. This allows us to simulate
struct
Templates
{
// variadic templates (e.g. Templates<int>, Templates<int, double>,
using
Head
=
TemplateSel
<
Head_
>
;
// and etc), which C++ doesn't support directly.
using
Tail
=
Templates
<
Tail_
...
>
;
template
<
typename
T
>
struct
NoneT
{};
// The following family of struct and struct templates are used to
// represent template lists. In particular, TemplatesN<T1, T2, ...,
// TN> represents a list of N templates (T1, T2, ..., and TN). Except
// for Templates0, every struct in the family has two member types:
// Head for the selector of the first template in the list, and Tail
// for the rest of the list.
// The empty template list.
struct
Templates0
{};
// Template lists of length 1, 2, 3, and so on.
template
<
GTEST_TEMPLATE_
T1
>
struct
Templates1
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates0
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
>
struct
Templates2
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates1
<
T2
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
>
struct
Templates3
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates2
<
T2
,
T3
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
>
struct
Templates4
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates3
<
T2
,
T3
,
T4
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
>
struct
Templates5
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates4
<
T2
,
T3
,
T4
,
T5
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
>
struct
Templates6
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates5
<
T2
,
T3
,
T4
,
T5
,
T6
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
>
struct
Templates7
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates6
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
>
struct
Templates8
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates7
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
>
struct
Templates9
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates8
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
>
struct
Templates10
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates9
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
>
struct
Templates11
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates10
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
>
struct
Templates12
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates11
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
>
struct
Templates13
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates12
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
>
struct
Templates14
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates13
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
>
struct
Templates15
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates14
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
>
struct
Templates16
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates15
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
>
struct
Templates17
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates16
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
>
struct
Templates18
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates17
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
>
struct
Templates19
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates18
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
>
struct
Templates20
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates19
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
>
struct
Templates21
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates20
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
>
struct
Templates22
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates21
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
>
struct
Templates23
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates22
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
>
struct
Templates24
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates23
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
>
struct
Templates25
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates24
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
>
struct
Templates26
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates25
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
>
struct
Templates27
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates26
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
>
struct
Templates28
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates27
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
>
struct
Templates29
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates28
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
>
struct
Templates30
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates29
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
>
struct
Templates31
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates30
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
>
struct
Templates32
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates31
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
>
struct
Templates33
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates32
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
>
struct
Templates34
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates33
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
>
struct
Templates35
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates34
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
>
struct
Templates36
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates35
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
>
struct
Templates37
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates36
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
>
struct
Templates38
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates37
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
>
struct
Templates39
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates38
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
>
struct
Templates40
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates39
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
>
struct
Templates41
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates40
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
>
struct
Templates42
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates41
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
>
struct
Templates43
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates42
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
>
struct
Templates44
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates43
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
>
struct
Templates45
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates44
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
>
Tail
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
>
struct
Templates46
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates45
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
>
Tail
;
};
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
template
<
GTEST_TEMPLATE_
Head_
>
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
struct
Templates
<
Head_
>
{
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
using
Head
=
TemplateSel
<
Head_
>
;
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
using
Tail
=
None
;
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
>
struct
Templates47
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates46
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
>
Tail
;
};
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
// Tuple-like type lists
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
template
<
typename
Head_
,
typename
...
Tail_
>
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
struct
Types
{
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
using
Head
=
Head_
;
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
using
Tail
=
Types
<
Tail_
...
>
;
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
,
GTEST_TEMPLATE_
T48
>
struct
Templates48
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates47
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
>
Tail
;
};
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
template
<
typename
Head_
>
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
struct
Types
<
Head_
>
{
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
using
Head
=
Head_
;
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
using
Tail
=
None
;
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
,
GTEST_TEMPLATE_
T48
,
GTEST_TEMPLATE_
T49
>
struct
Templates49
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates48
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
>
Tail
;
};
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
// Helper metafunctions to tell apart a single type from types
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
// generated by ::testing::Types
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
template
<
typename
...
Ts
>
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
struct
ProxyTypeList
{
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
using
type
=
Types
<
Ts
...
>
;
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
,
GTEST_TEMPLATE_
T48
,
GTEST_TEMPLATE_
T49
,
GTEST_TEMPLATE_
T50
>
struct
Templates50
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates49
<
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>
Tail
;
};
};
template
<
typename
>
struct
is_proxy_type_list
:
std
::
false_type
{};
// We don't want to require the users to write TemplatesN<...> directly,
template
<
typename
...
Ts
>
// as that would require them to count the length. Templates<...> is much
struct
is_proxy_type_list
<
ProxyTypeList
<
Ts
...
>>
:
std
::
true_type
{};
// easier to write, but generates horrible messages when there is a
// compiler error, as gcc insists on printing out each template
// argument, even if it has the default value (this means Templates<list>
// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
// errors).
//
// Our solution is to combine the best part of the two approaches: a
// user would write Templates<T1, ..., TN>, and Google Test will translate
// that to TemplatesN<T1, ..., TN> internally to make error messages
// readable. The translation is done by the 'type' member of the
// Templates template.
template
<
GTEST_TEMPLATE_
T1
=
NoneT
,
GTEST_TEMPLATE_
T2
=
NoneT
,
GTEST_TEMPLATE_
T3
=
NoneT
,
GTEST_TEMPLATE_
T4
=
NoneT
,
GTEST_TEMPLATE_
T5
=
NoneT
,
GTEST_TEMPLATE_
T6
=
NoneT
,
GTEST_TEMPLATE_
T7
=
NoneT
,
GTEST_TEMPLATE_
T8
=
NoneT
,
GTEST_TEMPLATE_
T9
=
NoneT
,
GTEST_TEMPLATE_
T10
=
NoneT
,
GTEST_TEMPLATE_
T11
=
NoneT
,
GTEST_TEMPLATE_
T12
=
NoneT
,
GTEST_TEMPLATE_
T13
=
NoneT
,
GTEST_TEMPLATE_
T14
=
NoneT
,
GTEST_TEMPLATE_
T15
=
NoneT
,
GTEST_TEMPLATE_
T16
=
NoneT
,
GTEST_TEMPLATE_
T17
=
NoneT
,
GTEST_TEMPLATE_
T18
=
NoneT
,
GTEST_TEMPLATE_
T19
=
NoneT
,
GTEST_TEMPLATE_
T20
=
NoneT
,
GTEST_TEMPLATE_
T21
=
NoneT
,
GTEST_TEMPLATE_
T22
=
NoneT
,
GTEST_TEMPLATE_
T23
=
NoneT
,
GTEST_TEMPLATE_
T24
=
NoneT
,
GTEST_TEMPLATE_
T25
=
NoneT
,
GTEST_TEMPLATE_
T26
=
NoneT
,
GTEST_TEMPLATE_
T27
=
NoneT
,
GTEST_TEMPLATE_
T28
=
NoneT
,
GTEST_TEMPLATE_
T29
=
NoneT
,
GTEST_TEMPLATE_
T30
=
NoneT
,
GTEST_TEMPLATE_
T31
=
NoneT
,
GTEST_TEMPLATE_
T32
=
NoneT
,
GTEST_TEMPLATE_
T33
=
NoneT
,
GTEST_TEMPLATE_
T34
=
NoneT
,
GTEST_TEMPLATE_
T35
=
NoneT
,
GTEST_TEMPLATE_
T36
=
NoneT
,
GTEST_TEMPLATE_
T37
=
NoneT
,
GTEST_TEMPLATE_
T38
=
NoneT
,
GTEST_TEMPLATE_
T39
=
NoneT
,
GTEST_TEMPLATE_
T40
=
NoneT
,
GTEST_TEMPLATE_
T41
=
NoneT
,
GTEST_TEMPLATE_
T42
=
NoneT
,
GTEST_TEMPLATE_
T43
=
NoneT
,
GTEST_TEMPLATE_
T44
=
NoneT
,
GTEST_TEMPLATE_
T45
=
NoneT
,
GTEST_TEMPLATE_
T46
=
NoneT
,
GTEST_TEMPLATE_
T47
=
NoneT
,
GTEST_TEMPLATE_
T48
=
NoneT
,
GTEST_TEMPLATE_
T49
=
NoneT
,
GTEST_TEMPLATE_
T50
=
NoneT
>
struct
Templates
{
typedef
Templates50
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>
type
;
};
template
<
>
struct
Templates
<
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates0
type
;
};
template
<
GTEST_TEMPLATE_
T1
>
struct
Templates
<
T1
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates1
<
T1
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
>
struct
Templates
<
T1
,
T2
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates2
<
T1
,
T2
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
>
struct
Templates
<
T1
,
T2
,
T3
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates3
<
T1
,
T2
,
T3
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates4
<
T1
,
T2
,
T3
,
T4
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates5
<
T1
,
T2
,
T3
,
T4
,
T5
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates6
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates7
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates8
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates9
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates10
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates11
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates12
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates13
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates14
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates15
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates16
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates17
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates18
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates19
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates20
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates21
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates22
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates23
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates24
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates25
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates26
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates27
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates28
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates29
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates30
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates31
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates32
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates33
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates34
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates35
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates36
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates37
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates38
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates39
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates40
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates41
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates42
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates43
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates44
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
NoneT
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates45
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
NoneT
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates46
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
NoneT
,
NoneT
,
NoneT
>
{
typedef
Templates47
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
,
GTEST_TEMPLATE_
T48
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
NoneT
,
NoneT
>
{
typedef
Templates48
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
>
type
;
};
template
<
GTEST_TEMPLATE_
T1
,
GTEST_TEMPLATE_
T2
,
GTEST_TEMPLATE_
T3
,
GTEST_TEMPLATE_
T4
,
GTEST_TEMPLATE_
T5
,
GTEST_TEMPLATE_
T6
,
GTEST_TEMPLATE_
T7
,
GTEST_TEMPLATE_
T8
,
GTEST_TEMPLATE_
T9
,
GTEST_TEMPLATE_
T10
,
GTEST_TEMPLATE_
T11
,
GTEST_TEMPLATE_
T12
,
GTEST_TEMPLATE_
T13
,
GTEST_TEMPLATE_
T14
,
GTEST_TEMPLATE_
T15
,
GTEST_TEMPLATE_
T16
,
GTEST_TEMPLATE_
T17
,
GTEST_TEMPLATE_
T18
,
GTEST_TEMPLATE_
T19
,
GTEST_TEMPLATE_
T20
,
GTEST_TEMPLATE_
T21
,
GTEST_TEMPLATE_
T22
,
GTEST_TEMPLATE_
T23
,
GTEST_TEMPLATE_
T24
,
GTEST_TEMPLATE_
T25
,
GTEST_TEMPLATE_
T26
,
GTEST_TEMPLATE_
T27
,
GTEST_TEMPLATE_
T28
,
GTEST_TEMPLATE_
T29
,
GTEST_TEMPLATE_
T30
,
GTEST_TEMPLATE_
T31
,
GTEST_TEMPLATE_
T32
,
GTEST_TEMPLATE_
T33
,
GTEST_TEMPLATE_
T34
,
GTEST_TEMPLATE_
T35
,
GTEST_TEMPLATE_
T36
,
GTEST_TEMPLATE_
T37
,
GTEST_TEMPLATE_
T38
,
GTEST_TEMPLATE_
T39
,
GTEST_TEMPLATE_
T40
,
GTEST_TEMPLATE_
T41
,
GTEST_TEMPLATE_
T42
,
GTEST_TEMPLATE_
T43
,
GTEST_TEMPLATE_
T44
,
GTEST_TEMPLATE_
T45
,
GTEST_TEMPLATE_
T46
,
GTEST_TEMPLATE_
T47
,
GTEST_TEMPLATE_
T48
,
GTEST_TEMPLATE_
T49
>
struct
Templates
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
NoneT
>
{
typedef
Templates49
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
>
type
;
};
// The TypeList template makes it possible to use either a single type
// or a Types<...> list in TYPED_TEST_SUITE() and
// INSTANTIATE_TYPED_TEST_SUITE_P().
// Generator which conditionally creates type lists.
// It recognizes if a requested type list should be created
// and prevents creating a new type list nested within another one.
template
<
typename
T
>
template
<
typename
T
>
struct
TypeList
{
struct
GenerateTypeList
{
typedef
Types1
<
T
>
type
;
private:
};
using
proxy
=
typename
std
::
conditional
<
is_proxy_type_list
<
T
>::
value
,
T
,
ProxyTypeList
<
T
>>::
type
;
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
public:
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
,
using
type
=
typename
proxy
::
type
;
typename
T11
,
typename
T12
,
typename
T13
,
typename
T14
,
typename
T15
,
typename
T16
,
typename
T17
,
typename
T18
,
typename
T19
,
typename
T20
,
typename
T21
,
typename
T22
,
typename
T23
,
typename
T24
,
typename
T25
,
typename
T26
,
typename
T27
,
typename
T28
,
typename
T29
,
typename
T30
,
typename
T31
,
typename
T32
,
typename
T33
,
typename
T34
,
typename
T35
,
typename
T36
,
typename
T37
,
typename
T38
,
typename
T39
,
typename
T40
,
typename
T41
,
typename
T42
,
typename
T43
,
typename
T44
,
typename
T45
,
typename
T46
,
typename
T47
,
typename
T48
,
typename
T49
,
typename
T50
>
struct
TypeList
<
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>
>
{
typedef
typename
Types
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
,
T11
,
T12
,
T13
,
T14
,
T15
,
T16
,
T17
,
T18
,
T19
,
T20
,
T21
,
T22
,
T23
,
T24
,
T25
,
T26
,
T27
,
T28
,
T29
,
T30
,
T31
,
T32
,
T33
,
T34
,
T35
,
T36
,
T37
,
T38
,
T39
,
T40
,
T41
,
T42
,
T43
,
T44
,
T45
,
T46
,
T47
,
T48
,
T49
,
T50
>::
type
type
;
};
};
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
}
// namespace internal
}
// namespace internal
template
<
typename
...
Ts
>
using
Types
=
internal
::
ProxyTypeList
<
Ts
...
>
;
}
// namespace testing
}
// namespace testing
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
googletest/include/gtest/internal/gtest-type-util.h.pump
deleted
100644 → 0
View file @
540835fa
$$
-*-
mode
:
c
++
;
-*-
$
var
n
=
50
$$
Maximum
length
of
type
lists
we
want
to
support
.
// Copyright 2008 Google Inc.
// All Rights Reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Type utilities needed for implementing typed and type-parameterized
// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
//
// Currently we support at most $n types in a list, and at most $n
// type-parameterized tests in one type-parameterized test suite.
// Please contact googletestframework@googlegroups.com if you need
// more.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
#include "gtest/internal/gtest-port.h"
// #ifdef __GNUC__ is too general here. It is possible to use gcc without using
// libstdc++ (which is where cxxabi.h comes from).
# if GTEST_HAS_CXXABI_H_
# include <cxxabi.h>
# elif defined(__HP_aCC)
# include <acxx_demangle.h>
# endif // GTEST_HASH_CXXABI_H_
namespace
testing
{
namespace
internal
{
// Canonicalizes a given name with respect to the Standard C++ Library.
// This handles removing the inline namespace within `std` that is
// used by various standard libraries (e.g., `std::__1`). Names outside
// of namespace std are returned unmodified.
inline
std
::
string
CanonicalizeForStdLibVersioning
(
std
::
string
s
)
{
static
const
char
prefix
[]
=
"std::__"
;
if
(
s
.
compare
(
0
,
strlen
(
prefix
),
prefix
)
==
0
)
{
std
::
string
::
size_type
end
=
s
.
find
(
"::"
,
strlen
(
prefix
));
if
(
end
!=
s
.
npos
)
{
// Erase everything between the initial `std` and the second `::`.
s
.
erase
(
strlen
(
"std"
),
end
-
strlen
(
"std"
));
}
}
return
s
;
}
// GetTypeName<T>() returns a human-readable name of type T.
// NB: This function is also used in Google Mock, so don't move it inside of
// the typed-test-only section below.
template
<
typename
T
>
std
::
string
GetTypeName
()
{
# if GTEST_HAS_RTTI
const
char
*
const
name
=
typeid
(
T
).
name
();
# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)
int
status
=
0
;
// gcc's implementation of typeid(T).name() mangles the type name,
// so we have to demangle it.
# if GTEST_HAS_CXXABI_H_
using
abi
::
__cxa_demangle
;
# endif // GTEST_HAS_CXXABI_H_
char
*
const
readable_name
=
__cxa_demangle
(
name
,
nullptr
,
nullptr
,
&
status
);
const
std
::
string
name_str
(
status
==
0
?
readable_name
:
name
);
free
(
readable_name
);
return
CanonicalizeForStdLibVersioning
(
name_str
);
# else
return
name
;
# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC
# else
return
"<type>"
;
# endif // GTEST_HAS_RTTI
}
#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
// A unique type used as the default value for the arguments of class
// template Types. This allows us to simulate variadic templates
// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
// support directly.
struct
None
{};
// The following family of struct and struct templates are used to
// represent type lists. In particular, TypesN<T1, T2, ..., TN>
// represents a type list with N types (T1, T2, ..., and TN) in it.
// Except for Types0, every struct in the family has two member types:
// Head for the first type in the list, and Tail for the rest of the
// list.
// The empty type list.
struct
Types0
{};
// Type lists of length 1, 2, 3, and so on.
template
<
typename
T1
>
struct
Types1
{
typedef
T1
Head
;
typedef
Types0
Tail
;
};
$
range
i
2.
.
n
$
for
i
[[
$
range
j
1.
.
i
$
range
k
2.
.
i
template
<
$
for
j
,
[[
typename
T
$
j
]]>
struct
Types
$
i
{
typedef
T1
Head
;
typedef
Types
$
(
i
-
1
)
<
$
for
k
,
[[
T
$
k
]]
>
Tail
;
};
]]
}
// namespace internal
// We don't want to require the users to write TypesN<...> directly,
// as that would require them to count the length. Types<...> is much
// easier to write, but generates horrible messages when there is a
// compiler error, as gcc insists on printing out each template
// argument, even if it has the default value (this means Types<int>
// will appear as Types<int, None, None, ..., None> in the compiler
// errors).
//
// Our solution is to combine the best part of the two approaches: a
// user would write Types<T1, ..., TN>, and Google Test will translate
// that to TypesN<T1, ..., TN> internally to make error messages
// readable. The translation is done by the 'type' member of the
// Types template.
$
range
i
1.
.
n
template
<
$
for
i
,
[[
typename
T
$
i
=
internal
::
None
]]>
struct
Types
{
typedef
internal
::
Types
$
n
<
$
for
i
,
[[
T
$
i
]]
>
type
;
};
template
<
>
struct
Types
<
$
for
i
,
[[
internal
::
None
]]
>
{
typedef
internal
::
Types0
type
;
};
$
range
i
1.
.
n
-
1
$
for
i
[[
$
range
j
1.
.
i
$
range
k
i
+
1.
.
n
template
<
$
for
j
,
[[
typename
T
$
j
]]>
struct
Types
<
$
for
j
,
[[
T
$
j
]]
$
for
k
[[,
internal
::
None
]]
>
{
typedef
internal
::
Types
$
i
<
$
for
j
,
[[
T
$
j
]]
>
type
;
};
]]
namespace
internal
{
# define GTEST_TEMPLATE_ template <typename T> class
// The template "selector" struct TemplateSel<Tmpl> is used to
// represent Tmpl, which must be a class template with one type
// parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined
// as the type Tmpl<T>. This allows us to actually instantiate the
// template "selected" by TemplateSel<Tmpl>.
//
// This trick is necessary for simulating typedef for class templates,
// which C++ doesn't support directly.
template
<
GTEST_TEMPLATE_
Tmpl
>
struct
TemplateSel
{
template
<
typename
T
>
struct
Bind
{
typedef
Tmpl
<
T
>
type
;
};
};
# define GTEST_BIND_(TmplSel, T) \
TmplSel::template Bind<T>::type
// A unique struct template used as the default value for the
// arguments of class template Templates. This allows us to simulate
// variadic templates (e.g. Templates<int>, Templates<int, double>,
// and etc), which C++ doesn't support directly.
template
<
typename
T
>
struct
NoneT
{};
// The following family of struct and struct templates are used to
// represent template lists. In particular, TemplatesN<T1, T2, ...,
// TN> represents a list of N templates (T1, T2, ..., and TN). Except
// for Templates0, every struct in the family has two member types:
// Head for the selector of the first template in the list, and Tail
// for the rest of the list.
// The empty template list.
struct
Templates0
{};
// Template lists of length 1, 2, 3, and so on.
template
<
GTEST_TEMPLATE_
T1
>
struct
Templates1
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates0
Tail
;
};
$
range
i
2.
.
n
$
for
i
[[
$
range
j
1.
.
i
$
range
k
2.
.
i
template
<
$
for
j
,
[[
GTEST_TEMPLATE_
T
$
j
]]>
struct
Templates
$
i
{
typedef
TemplateSel
<
T1
>
Head
;
typedef
Templates
$
(
i
-
1
)
<
$
for
k
,
[[
T
$
k
]]
>
Tail
;
};
]]
// We don't want to require the users to write TemplatesN<...> directly,
// as that would require them to count the length. Templates<...> is much
// easier to write, but generates horrible messages when there is a
// compiler error, as gcc insists on printing out each template
// argument, even if it has the default value (this means Templates<list>
// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
// errors).
//
// Our solution is to combine the best part of the two approaches: a
// user would write Templates<T1, ..., TN>, and Google Test will translate
// that to TemplatesN<T1, ..., TN> internally to make error messages
// readable. The translation is done by the 'type' member of the
// Templates template.
$
range
i
1.
.
n
template
<
$
for
i
,
[[
GTEST_TEMPLATE_
T
$
i
=
NoneT
]]>
struct
Templates
{
typedef
Templates
$
n
<
$
for
i
,
[[
T
$
i
]]
>
type
;
};
template
<
>
struct
Templates
<
$
for
i
,
[[
NoneT
]]
>
{
typedef
Templates0
type
;
};
$
range
i
1.
.
n
-
1
$
for
i
[[
$
range
j
1.
.
i
$
range
k
i
+
1.
.
n
template
<
$
for
j
,
[[
GTEST_TEMPLATE_
T
$
j
]]>
struct
Templates
<
$
for
j
,
[[
T
$
j
]]
$
for
k
[[,
NoneT
]]
>
{
typedef
Templates
$
i
<
$
for
j
,
[[
T
$
j
]]
>
type
;
};
]]
// The TypeList template makes it possible to use either a single type
// or a Types<...> list in TYPED_TEST_SUITE() and
// INSTANTIATE_TYPED_TEST_SUITE_P().
template
<
typename
T
>
struct
TypeList
{
typedef
Types1
<
T
>
type
;
};
$
range
i
1.
.
n
template
<
$
for
i
,
[[
typename
T
$
i
]]>
struct
TypeList
<
Types
<
$
for
i
,
[[
T
$
i
]]
>
>
{
typedef
typename
Types
<
$
for
i
,
[[
T
$
i
]]
>::
type
type
;
};
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
}
// namespace internal
}
// namespace testing
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
googletest/test/gtest-unittest-api_test.cc
View file @
a8b1a66c
...
@@ -188,7 +188,7 @@ TEST(ApiTest, TestSuiteImmutableAccessorsWork) {
...
@@ -188,7 +188,7 @@ TEST(ApiTest, TestSuiteImmutableAccessorsWork) {
ASSERT_TRUE
(
test_suite
!=
nullptr
);
ASSERT_TRUE
(
test_suite
!=
nullptr
);
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
test_suite
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
test_suite
->
name
());
EXPECT_STREQ
(
GetTypeName
<
int
>
().
c_str
(),
test_suite
->
type_param
());
EXPECT_STREQ
(
GetTypeName
<
Types
<
int
>
>
().
c_str
(),
test_suite
->
type_param
());
EXPECT_TRUE
(
test_suite
->
should_run
());
EXPECT_TRUE
(
test_suite
->
should_run
());
EXPECT_EQ
(
0
,
test_suite
->
disabled_test_count
());
EXPECT_EQ
(
0
,
test_suite
->
disabled_test_count
());
EXPECT_EQ
(
1
,
test_suite
->
test_to_run_count
());
EXPECT_EQ
(
1
,
test_suite
->
test_to_run_count
());
...
@@ -199,7 +199,7 @@ TEST(ApiTest, TestSuiteImmutableAccessorsWork) {
...
@@ -199,7 +199,7 @@ TEST(ApiTest, TestSuiteImmutableAccessorsWork) {
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
EXPECT_TRUE
(
IsNull
(
tests
[
0
]
->
value_param
()));
EXPECT_TRUE
(
IsNull
(
tests
[
0
]
->
value_param
()));
EXPECT_STREQ
(
GetTypeName
<
int
>
().
c_str
(),
tests
[
0
]
->
type_param
());
EXPECT_STREQ
(
GetTypeName
<
Types
<
int
>
>
().
c_str
(),
tests
[
0
]
->
type_param
());
EXPECT_TRUE
(
tests
[
0
]
->
should_run
());
EXPECT_TRUE
(
tests
[
0
]
->
should_run
());
delete
[]
tests
;
delete
[]
tests
;
...
@@ -265,7 +265,8 @@ class FinalSuccessChecker : public Environment {
...
@@ -265,7 +265,8 @@ class FinalSuccessChecker : public Environment {
#if GTEST_HAS_TYPED_TEST
#if GTEST_HAS_TYPED_TEST
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
test_suites
[
2
]
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
test_suites
[
2
]
->
name
());
EXPECT_STREQ
(
GetTypeName
<
int
>
().
c_str
(),
test_suites
[
2
]
->
type_param
());
EXPECT_STREQ
(
GetTypeName
<
Types
<
int
>>
().
c_str
(),
test_suites
[
2
]
->
type_param
());
EXPECT_TRUE
(
test_suites
[
2
]
->
should_run
());
EXPECT_TRUE
(
test_suites
[
2
]
->
should_run
());
EXPECT_EQ
(
0
,
test_suites
[
2
]
->
disabled_test_count
());
EXPECT_EQ
(
0
,
test_suites
[
2
]
->
disabled_test_count
());
ASSERT_EQ
(
1
,
test_suites
[
2
]
->
total_test_count
());
ASSERT_EQ
(
1
,
test_suites
[
2
]
->
total_test_count
());
...
@@ -317,7 +318,7 @@ class FinalSuccessChecker : public Environment {
...
@@ -317,7 +318,7 @@ class FinalSuccessChecker : public Environment {
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
EXPECT_TRUE
(
IsNull
(
tests
[
0
]
->
value_param
()));
EXPECT_TRUE
(
IsNull
(
tests
[
0
]
->
value_param
()));
EXPECT_STREQ
(
GetTypeName
<
int
>
().
c_str
(),
tests
[
0
]
->
type_param
());
EXPECT_STREQ
(
GetTypeName
<
Types
<
int
>
>
().
c_str
(),
tests
[
0
]
->
type_param
());
EXPECT_TRUE
(
tests
[
0
]
->
should_run
());
EXPECT_TRUE
(
tests
[
0
]
->
should_run
());
EXPECT_TRUE
(
tests
[
0
]
->
result
()
->
Passed
());
EXPECT_TRUE
(
tests
[
0
]
->
result
()
->
Passed
());
EXPECT_EQ
(
0
,
tests
[
0
]
->
result
()
->
test_property_count
());
EXPECT_EQ
(
0
,
tests
[
0
]
->
result
()
->
test_property_count
());
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment