1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Copyright 2009 Google Inc.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// All Rights Reserved.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Redistribution and use in source and binary forms, with or without
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// modification, are permitted provided that the following conditions are
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// met:
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     * Redistributions of source code must retain the above copyright
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// notice, this list of conditions and the following disclaimer.
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     * Redistributions in binary form must reproduce the above
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// copyright notice, this list of conditions and the following disclaimer
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// in the documentation and/or other materials provided with the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// distribution.
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//     * Neither the name of Google Inc. nor the names of its
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// contributors may be used to endorse or promote products derived from
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// this software without specific prior written permission.
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Author: wan@google.com (Zhanyong Wan)
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <utility>  // For ::std::pair.
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// The compiler used in Symbian has a bug that prevents us from declaring the
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// tuple template as a friend (it complains that tuple is redefined).  This
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// hack bypasses the bug by declaring the members that should otherwise be
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// private as public.
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Sun Studio versions < 12 also have the above bug.
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   private:
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// GTEST_n_TUPLE_(T) is the type of an n-tuple.
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_0_TUPLE_(T) tuple<>
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    void, void, void>
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    T##7, void, void>
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    T##7, T##8, void>
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    T##7, T##8, T##9>
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_0_TYPENAMES_(T)
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_1_TYPENAMES_(T) typename T##0
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4, typename T##5
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4, typename T##5, typename T##6
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4, typename T##5, typename T##6, \
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##7, typename T##8
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##3, typename T##4, typename T##5, typename T##6, \
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T##7, typename T##8, typename T##9
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// In theory, defining stuff in the ::std namespace is undefined
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// behavior.  We can do this as we are playing the role of a standard
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// library vendor.
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace std {
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace tr1 {
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename T0 = void, typename T1 = void, typename T2 = void,
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T3 = void, typename T4 = void, typename T5 = void,
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T6 = void, typename T7 = void, typename T8 = void,
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typename T9 = void>
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass tuple;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Anything in namespace gtest_internal is Google Test's INTERNAL
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace gtest_internal {
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename T>
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ByRef { typedef const T& type; };  // NOLINT
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename T>
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ByRef<T&> { typedef T& type; };  // NOLINT
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// A handy wrapper for ByRef.
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// is the same as tr1::add_reference<T>::type.
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename T>
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct AddRef { typedef T& type; };  // NOLINT
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename T>
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct AddRef<T&> { typedef T& type; };  // NOLINT
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// A handy wrapper for AddRef.
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// A helper for implementing get<k>().
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int k> class Get;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// A helper for implementing tuple_element<k, T>.  kIndexValid is true
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// iff k < the number of fields in tuple type T.
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <bool kIndexValid, int kIndex, class Tuple>
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement;
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace gtest_internal
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass tuple<> {
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() {}
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& /* t */)  {}
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& /* t */) { return *this; }
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_1_TYPENAMES_(T)>
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_1_TUPLE_(T) {
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_() {}
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_) {}
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_1_TYPENAMES_(U)>
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_1_TYPENAMES_(U)>
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_1_TYPENAMES_(U)>
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_2_TYPENAMES_(T)>
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_2_TUPLE_(T) {
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_() {}
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f1_(f1) {}
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_2_TYPENAMES_(U)>
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <typename U0, typename U1>
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_2_TYPENAMES_(U)>
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <typename U0, typename U1>
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const ::std::pair<U0, U1>& p) {
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = p.first;
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = p.second;
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_2_TYPENAMES_(U)>
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_3_TYPENAMES_(T)>
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_3_TUPLE_(T) {
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_() {}
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_3_TYPENAMES_(U)>
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_3_TYPENAMES_(U)>
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_3_TYPENAMES_(U)>
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_4_TYPENAMES_(T)>
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_4_TUPLE_(T) {
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_() {}
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(f3) {}
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_4_TYPENAMES_(U)>
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_) {}
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_4_TYPENAMES_(U)>
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_4_TYPENAMES_(U)>
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_5_TYPENAMES_(T)>
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_5_TUPLE_(T) {
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_) {}
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_5_TYPENAMES_(U)>
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_) {}
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_5_TYPENAMES_(U)>
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_5_TYPENAMES_(U)>
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_6_TYPENAMES_(T)>
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_6_TUPLE_(T) {
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f5_(f5) {}
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_), f5_(t.f5_) {}
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_6_TYPENAMES_(U)>
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_6_TYPENAMES_(U)>
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_6_TYPENAMES_(U)>
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f5_ = t.f5_;
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T5 f5_;
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_7_TYPENAMES_(T)>
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_7_TUPLE_(T) {
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_7_TYPENAMES_(U)>
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_7_TYPENAMES_(U)>
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_7_TYPENAMES_(U)>
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f5_ = t.f5_;
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f6_ = t.f6_;
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T5 f5_;
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T6 f6_;
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_8_TYPENAMES_(T)>
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_8_TUPLE_(T) {
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f5_(f5), f6_(f6), f7_(f7) {}
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_8_TYPENAMES_(U)>
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_8_TYPENAMES_(U)>
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_8_TYPENAMES_(U)>
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f5_ = t.f5_;
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f6_ = t.f6_;
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f7_ = t.f7_;
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T5 f5_;
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T6 f6_;
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T7 f7_;
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_9_TYPENAMES_(T)>
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass GTEST_9_TUPLE_(T) {
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_9_TYPENAMES_(U)>
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_9_TYPENAMES_(U)>
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_9_TYPENAMES_(U)>
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f5_ = t.f5_;
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f6_ = t.f6_;
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f7_ = t.f7_;
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f8_ = t.f8_;
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T5 f5_;
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T6 f6_;
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T7 f7_;
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T8 f8_;
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass tuple {
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <int k> friend class gtest_internal::Get;
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f9_() {}
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_10_TYPENAMES_(U)>
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      f9_(t.f9_) {}
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const tuple& t) { return CopyFrom(t); }
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_10_TYPENAMES_(U)>
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return CopyFrom(t);
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  GTEST_DECLARE_TUPLE_AS_FRIEND_
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <GTEST_10_TYPENAMES_(U)>
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f0_ = t.f0_;
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f1_ = t.f1_;
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f2_ = t.f2_;
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f3_ = t.f3_;
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f4_ = t.f4_;
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f5_ = t.f5_;
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f6_ = t.f6_;
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f7_ = t.f7_;
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f8_ = t.f8_;
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    f9_ = t.f9_;
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return *this;
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T0 f0_;
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T1 f1_;
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T2 f2_;
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T3 f3_;
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T4 f4_;
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T5 f5_;
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T6 f6_;
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T7 f7_;
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T8 f8_;
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  T9 f9_;
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 6.1.3.2 Tuple creation functions.
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Known limitations: we don't support passing an
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// implement tie().
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline tuple<> make_tuple() { return tuple<>(); }
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_1_TYPENAMES_(T)>
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_1_TUPLE_(T)(f0);
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_2_TYPENAMES_(T)>
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_2_TUPLE_(T)(f0, f1);
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_3_TYPENAMES_(T)>
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_3_TUPLE_(T)(f0, f1, f2);
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_4_TYPENAMES_(T)>
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3) {
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_5_TYPENAMES_(T)>
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4) {
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_6_TYPENAMES_(T)>
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4, const T5& f5) {
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_7_TYPENAMES_(T)>
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_8_TYPENAMES_(T)>
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_9_TYPENAMES_(T)>
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T8& f8) {
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    const T8& f8, const T9& f9) {
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 6.1.3.3 Tuple helper classes.
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <typename Tuple> struct tuple_size;
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_0_TYPENAMES_(T)>
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_1_TYPENAMES_(T)>
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_2_TYPENAMES_(T)>
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_3_TYPENAMES_(T)>
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_4_TYPENAMES_(T)>
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_5_TYPENAMES_(T)>
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_6_TYPENAMES_(T)>
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_7_TYPENAMES_(T)>
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_8_TYPENAMES_(T)>
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_9_TYPENAMES_(T)>
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T)>
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int k, class Tuple>
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tuple_element {
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  typedef typename gtest_internal::TupleElement<
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 6.1.3.4 Element access.
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace gtest_internal {
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<0> {
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f0_; }  // NOLINT
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f0_; }
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<1> {
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f1_; }  // NOLINT
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f1_; }
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<2> {
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f2_; }  // NOLINT
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f2_; }
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<3> {
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f3_; }  // NOLINT
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f3_; }
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<4> {
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f4_; }  // NOLINT
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f4_; }
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<5> {
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f5_; }  // NOLINT
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f5_; }
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<6> {
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f6_; }  // NOLINT
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f6_; }
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<7> {
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f7_; }  // NOLINT
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f7_; }
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<8> {
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f8_; }  // NOLINT
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f8_; }
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass Get<9> {
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public:
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  Field(Tuple& t) { return t.f9_; }  // NOLINT
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple>
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  ConstField(const Tuple& t) { return t.f9_; }
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace gtest_internal
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int k, GTEST_10_TYPENAMES_(T)>
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget(GTEST_10_TUPLE_(T)& t) {
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return gtest_internal::Get<k>::Field(t);
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int k, GTEST_10_TYPENAMES_(T)>
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget(const GTEST_10_TUPLE_(T)& t) {
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return gtest_internal::Get<k>::ConstField(t);
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 6.1.3.5 Relational operators
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// We only implement == and !=, as we don't have a need for the rest yet.
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace gtest_internal {
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// first k fields of t1 equals the first k fields of t2.
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// k1 != k2.
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int kSize1, int kSize2>
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct SameSizeTuplePrefixComparator;
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <>
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct SameSizeTuplePrefixComparator<0, 0> {
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple1, class Tuple2>
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return true;
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <int k>
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct SameSizeTuplePrefixComparator<k, k> {
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  template <class Tuple1, class Tuple2>
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  }
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace gtest_internal
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline bool operator==(const GTEST_10_TUPLE_(T)& t,
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       const GTEST_10_TUPLE_(U)& u) {
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return gtest_internal::SameSizeTuplePrefixComparator<
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      tuple_size<GTEST_10_TUPLE_(T)>::value,
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginline bool operator!=(const GTEST_10_TUPLE_(T)& t,
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 6.1.4 Pairs.
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Unimplemented.
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace tr1
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace std
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_0_TUPLE_
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_1_TUPLE_
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_2_TUPLE_
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_3_TUPLE_
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_4_TUPLE_
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_5_TUPLE_
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_6_TUPLE_
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_7_TUPLE_
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_8_TUPLE_
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_9_TUPLE_
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_10_TUPLE_
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_0_TYPENAMES_
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_1_TYPENAMES_
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_2_TYPENAMES_
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_3_TYPENAMES_
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_4_TYPENAMES_
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_5_TYPENAMES_
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_6_TYPENAMES_
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_7_TYPENAMES_
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_8_TYPENAMES_
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_9_TYPENAMES_
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_10_TYPENAMES_
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_BY_REF_
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_ADD_REF_
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GTEST_TUPLE_ELEMENT_
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
969