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.
Some of Google Test's source files are generated from templates (not in the C++
sense) using a script. For example, the file
include/gtest/internal/gtest-type-util
.h.pump is used to generate
gtest-type-util
.h in the same directory.
*googlemock/include/gmock/gmock-generated-actions
.h.pump
*
is used to generate
*gmock-generated-actions
.h
*
in the same directory.
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
'
[
pump.py
](
google
test
/scripts/pump.py
)
' generator script. See the
[
Pump Manual
](
google
test
/docs/pump_manual.md
)
.
'
[
pump.py
](
google
mock
/scripts/pump.py
)
' generator script. See the
[
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>
Keir Mierle <mierle@gmail.com>
Keith Ray <keith.ray@gmail.com>
Kenton Varda <kenton@google.com>
Krystian Kuzniarek <krystian.kuzniarek@gmail.com>
Manuel Klimek <klimek@google.com>
Markus Heule <markus.heule@gmail.com>
Mika Raento <mikie@iki.fi>
...
...
googletest/include/gtest/gtest-typed-test.h
View file @
a8b1a66c
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
...
...
@@ -189,12 +188,12 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
gtest_type_params_##TestSuiteName##_NameGenerator
#define TYPED_TEST_SUITE(CaseName, Types, ...) \
typedef ::testing::internal::TypeList<Types>::type
GTEST_TYPE_PARAMS_(
\
CaseName);
\
typedef ::testing::internal::
Generate
TypeList<Types>::type
\
GTEST_TYPE_PARAMS_(CaseName);
\
typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \
GTEST_NAME_GENERATOR_(CaseName)
#
define TYPED_TEST(CaseName, TestName) \
#define TYPED_TEST(CaseName, TestName)
\
template <typename gtest_TypeParam_> \
class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
: public CaseName<gtest_TypeParam_> { \
...
...
@@ -204,8 +203,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
void TestBody() override; \
}; \
static bool gtest_##CaseName##_##TestName##_registered_ \
GTEST_ATTRIBUTE_UNUSED_ = \
::testing::internal::TypeParameterizedTest< \
GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \
CaseName, \
::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \
TestName)>, \
...
...
@@ -288,7 +286,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
#define REGISTER_TYPED_TEST_SUITE_P(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_( \
SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \
...
...
@@ -307,7 +305,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
::testing::internal::TypeParameterizedTestSuite< \
SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
::testing::internal::TypeList<Types>::type>::
\
::testing::internal::
Generate
TypeList<Types>::type>:: \
Register(#Prefix, \
::testing::internal::CodeLocation(__FILE__, __LINE__), \
>EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \
...
...
@@ -315,7 +313,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
::testing::internal::GenerateNames< \
::testing::internal::NameGeneratorSelector< \
__VA_ARGS__>::type, \
::testing::internal::TypeList<Types>::type>())
::testing::internal::
Generate
TypeList<Types>::type>())
// Legacy API is deprecated but still available
#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
...
...
googletest/include/gtest/internal/gtest-internal.h
View file @
a8b1a66c
...
...
@@ -662,7 +662,7 @@ struct NameGeneratorSelector {
};
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
>
void
GenerateNamesRecursively
(
Types
,
std
::
vector
<
std
::
string
>*
result
,
int
i
)
{
...
...
@@ -729,7 +729,7 @@ class TypeParameterizedTest {
// The base case for the compile time recursion.
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
internal
::
None
>
{
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
...
...
@@ -781,7 +781,7 @@ class TypeParameterizedTestSuite {
// The base case for the compile time recursion.
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
class
TypeParameterizedTestSuite
<
Fixture
,
Templates0
,
Types
>
{
class
TypeParameterizedTestSuite
<
Fixture
,
internal
::
None
,
Types
>
{
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
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.
// All Rights Reserved.
//
...
...
@@ -32,12 +28,7 @@
// 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 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.
// tests.
// GOOGLETEST_CM0001 DO NOT DELETE
...
...
@@ -105,1524 +96,9 @@ std::string GetTypeName() {
#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.
// A unique type indicating an empty node
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
// The template "selector" struct TemplateSel<Tmpl> is used to
...
...
@@ -1644,1692 +120,64 @@ struct TemplateSel {
# 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
;
};
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_
Head_
,
GTEST_TEMPLATE_
...
Tail_
>
struct
Templates
{
using
Head
=
TemplateSel
<
Head_
>
;
using
Tail
=
Templates
<
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
,
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_
Head_
>
struct
Templates
<
Head_
>
{
using
Head
=
TemplateSel
<
Head_
>
;
using
Tail
=
None
;
};
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
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
;
// Tuple-like type lists
template
<
typename
Head_
,
typename
...
Tail_
>
struct
Types
{
using
Head
=
Head_
;
using
Tail
=
Types
<
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
,
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
<
typename
Head_
>
struct
Types
<
Head_
>
{
using
Head
=
Head_
;
using
Tail
=
None
;
};
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
,
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
;
// Helper metafunctions to tell apart a single type from types
// generated by ::testing::Types
template
<
typename
...
Ts
>
struct
ProxyTypeList
{
using
type
=
Types
<
Ts
...
>
;
};
template
<
typename
>
struct
is_proxy_type_list
:
std
::
false_type
{};
// 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.
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().
template
<
typename
...
Ts
>
struct
is_proxy_type_list
<
ProxyTypeList
<
Ts
...
>>
:
std
::
true_type
{};
// 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
>
struct
TypeList
{
typedef
Types1
<
T
>
type
;
};
struct
GenerateTypeList
{
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
,
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
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
;
public:
using
type
=
typename
proxy
::
type
;
};
#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
}
// namespace internal
template
<
typename
...
Ts
>
using
Types
=
internal
::
ProxyTypeList
<
Ts
...
>
;
}
// namespace testing
#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) {
ASSERT_TRUE
(
test_suite
!=
nullptr
);
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_EQ
(
0
,
test_suite
->
disabled_test_count
());
EXPECT_EQ
(
1
,
test_suite
->
test_to_run_count
());
...
...
@@ -199,7 +199,7 @@ TEST(ApiTest, TestSuiteImmutableAccessorsWork) {
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
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
());
delete
[]
tests
;
...
...
@@ -265,7 +265,8 @@ class FinalSuccessChecker : public Environment {
#if GTEST_HAS_TYPED_TEST
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_EQ
(
0
,
test_suites
[
2
]
->
disabled_test_count
());
ASSERT_EQ
(
1
,
test_suites
[
2
]
->
total_test_count
());
...
...
@@ -317,7 +318,7 @@ class FinalSuccessChecker : public Environment {
EXPECT_STREQ
(
"Dummy"
,
tests
[
0
]
->
name
());
EXPECT_STREQ
(
"TestSuiteWithCommentTest/0"
,
tests
[
0
]
->
test_suite_name
());
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
]
->
result
()
->
Passed
());
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