1190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
2190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
3190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Copyright 2009 Google Inc.
4190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// All Rights Reserved.
5190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//
6190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Redistribution and use in source and binary forms, with or without
7190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// modification, are permitted provided that the following conditions are
8190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// met:
9190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//
10190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//     * Redistributions of source code must retain the above copyright
11190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// notice, this list of conditions and the following disclaimer.
12190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//     * Redistributions in binary form must reproduce the above
13190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// copyright notice, this list of conditions and the following disclaimer
14190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// in the documentation and/or other materials provided with the
15190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// distribution.
16190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//     * Neither the name of Google Inc. nor the names of its
17190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// contributors may be used to endorse or promote products derived from
18190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// this software without specific prior written permission.
19190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//
20190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer//
32190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Author: wan@google.com (Zhanyong Wan)
33190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
34190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
35190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
36190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
37190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
38190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
39190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#include <utility>  // For ::std::pair.
40190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
41190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The compiler used in Symbian has a bug that prevents us from declaring the
42190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// tuple template as a friend (it complains that tuple is redefined).  This
43190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// hack bypasses the bug by declaring the members that should otherwise be
44190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// private as public.
4557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Sun Studio versions < 12 also have the above bug.
4657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
47b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
48190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#else
49b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
50190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
51190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer   private:
52190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#endif
53190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
54190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// GTEST_n_TUPLE_(T) is the type of an n-tuple.
55190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_0_TUPLE_(T) tuple<>
56190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
57190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
58190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
59190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
60190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
61190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
62190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
63190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
64190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
65190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
66190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
67190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
68190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
69190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    void, void, void>
70190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
71190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    T##7, void, void>
72190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
73190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    T##7, T##8, void>
74190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
75190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    T##7, T##8, T##9>
76190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
77190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
78190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_0_TYPENAMES_(T)
79190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_1_TYPENAMES_(T) typename T##0
80190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
81190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
82190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
83190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3
84190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
85190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4
86190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
87190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4, typename T##5
88190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
89190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4, typename T##5, typename T##6
90190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
91190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
92190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
93190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4, typename T##5, typename T##6, \
94190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##7, typename T##8
95190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
96190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##3, typename T##4, typename T##5, typename T##6, \
97190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T##7, typename T##8, typename T##9
98190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
99190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// In theory, defining stuff in the ::std namespace is undefined
100190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// behavior.  We can do this as we are playing the role of a standard
101190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// library vendor.
102190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramernamespace std {
103190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramernamespace tr1 {
104190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
105190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename T0 = void, typename T1 = void, typename T2 = void,
106190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T3 = void, typename T4 = void, typename T5 = void,
107190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T6 = void, typename T7 = void, typename T8 = void,
108190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    typename T9 = void>
109190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass tuple;
110190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
111190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Anything in namespace gtest_internal is Google Test's INTERNAL
112190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
113190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramernamespace gtest_internal {
114190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
115190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
116190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename T>
117190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct ByRef { typedef const T& type; };  // NOLINT
118190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename T>
119190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct ByRef<T&> { typedef T& type; };  // NOLINT
120190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
121190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A handy wrapper for ByRef.
122190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
123190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
124190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
125190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// is the same as tr1::add_reference<T>::type.
126190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename T>
127190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct AddRef { typedef T& type; };  // NOLINT
128190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename T>
129190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct AddRef<T&> { typedef T& type; };  // NOLINT
130190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
131190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A handy wrapper for AddRef.
132190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
133190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
134190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A helper for implementing get<k>().
135190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int k> class Get;
136190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
137190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A helper for implementing tuple_element<k, T>.  kIndexValid is true
138190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// iff k < the number of fields in tuple type T.
139190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <bool kIndexValid, int kIndex, class Tuple>
140190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement;
141190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
142190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
143190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
144190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
145190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
146190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
147190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
148190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
149190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
150190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
151190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
152190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
153190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
154190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
155190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
156190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
157190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
158190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
159190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
160190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
161190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
162190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
163190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
164190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
165190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
166190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
167190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
168190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
169190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
170190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
171190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
172190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}  // namespace gtest_internal
173190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
174190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
175190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass tuple<> {
176190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
177190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple() {}
178190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& /* t */)  {}
179190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& /* t */) { return *this; }
180190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
181190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
182190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_1_TYPENAMES_(T)>
183190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_1_TUPLE_(T) {
184190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
185190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
186190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
18757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_() {}
188190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
189190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
190190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
191190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_) {}
192190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
193190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_1_TYPENAMES_(U)>
194190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
195190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
196190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
197190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
198190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_1_TYPENAMES_(U)>
199190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
200190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
201190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
202190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
203190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
204190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
205190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_1_TYPENAMES_(U)>
206190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
207190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
208190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
209190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
210190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
211190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
212190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
213190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
214190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_2_TYPENAMES_(T)>
215190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_2_TUPLE_(T) {
216190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
217190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
218190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
21957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_() {}
220190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
221190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
222190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f1_(f1) {}
223190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
224190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
225190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
226190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_2_TYPENAMES_(U)>
227190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
228190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <typename U0, typename U1>
229190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
230190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
231190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
232190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
233190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_2_TYPENAMES_(U)>
234190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
235190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
236190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
237190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <typename U0, typename U1>
238190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const ::std::pair<U0, U1>& p) {
239190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = p.first;
240190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = p.second;
241190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
242190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
243190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
244190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
245190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
246190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_2_TYPENAMES_(U)>
247190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
248190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
249190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
250190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
251190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
252190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
253190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
254190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
255190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
256190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
257190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_3_TYPENAMES_(T)>
258190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_3_TUPLE_(T) {
259190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
260190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
261190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
26257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_() {}
263190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
264190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
265190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
266190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
267190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
268190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
269190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_3_TYPENAMES_(U)>
270190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
271190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
272190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
273190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
274190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_3_TYPENAMES_(U)>
275190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
276190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
277190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
278190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
279190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
280190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
281190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_3_TYPENAMES_(U)>
282190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
283190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
284190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
285190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
286190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
287190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
288190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
289190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
290190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
291190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
292190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
293190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
294190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_4_TYPENAMES_(T)>
295190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_4_TUPLE_(T) {
296190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
297190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
298190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
29957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_() {}
300190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
301190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
302190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
303190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(f3) {}
304190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
305190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
306190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
307190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_4_TYPENAMES_(U)>
308190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
309190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_) {}
310190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
311190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
312190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
313190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_4_TYPENAMES_(U)>
314190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
315190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
316190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
317190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
318190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
319190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
320190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_4_TYPENAMES_(U)>
321190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
322190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
323190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
324190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
325190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
326190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
327190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
328190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
329190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
330190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
331190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
332190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
333190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
334190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
335190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_5_TYPENAMES_(T)>
336190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_5_TUPLE_(T) {
337190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
338190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
339190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
34057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
341190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
342190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
343190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
344190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
345190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
346190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
347190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_) {}
348190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
349190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_5_TYPENAMES_(U)>
350190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
351190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_) {}
352190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
353190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
354190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
355190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_5_TYPENAMES_(U)>
356190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
357190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
358190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
359190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
360190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
361190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
362190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_5_TYPENAMES_(U)>
363190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
364190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
365190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
366190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
367190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
368190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
369190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
370190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
371190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
372190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
373190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
374190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
375190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
376190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
377190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
378190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
379190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_6_TYPENAMES_(T)>
380190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_6_TUPLE_(T) {
381190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
382190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
383190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
38457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
385190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
386190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
387190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
388190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
389190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f5_(f5) {}
390190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
391190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
392190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_), f5_(t.f5_) {}
393190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
394190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_6_TYPENAMES_(U)>
395190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
396190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
397190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
398190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
399190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
400190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_6_TYPENAMES_(U)>
401190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
402190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
403190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
404190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
405190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
406190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
407190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_6_TYPENAMES_(U)>
408190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
409190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
410190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
411190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
412190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
413190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
414190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f5_ = t.f5_;
415190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
416190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
417190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
418190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
419190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
420190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
421190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
422190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
423190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T5 f5_;
424190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
425190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
426190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_7_TYPENAMES_(T)>
427190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_7_TUPLE_(T) {
428190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
429190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
430190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
43157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
432190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
433190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
434190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
435190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
436190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
437190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
438190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
439190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
440190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
441190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_7_TYPENAMES_(U)>
442190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
443190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
444190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
445190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
446190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
447190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_7_TYPENAMES_(U)>
448190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
449190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
450190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
451190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
452190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
453190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
454190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_7_TYPENAMES_(U)>
455190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
456190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
457190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
458190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
459190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
460190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
461190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f5_ = t.f5_;
462190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f6_ = t.f6_;
463190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
464190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
465190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
466190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
467190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
468190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
469190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
470190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
471190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T5 f5_;
472190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T6 f6_;
473190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
474190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
475190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_8_TYPENAMES_(T)>
476190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_8_TUPLE_(T) {
477190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
478190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
479190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
48057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
481190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
482190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
483190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
484190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
485190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
486190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f5_(f5), f6_(f6), f7_(f7) {}
487190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
488190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
489190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
490190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
491190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_8_TYPENAMES_(U)>
492190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
493190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
494190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
495190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
496190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
497190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_8_TYPENAMES_(U)>
498190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
499190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
500190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
501190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
502190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
503190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
504190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_8_TYPENAMES_(U)>
505190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
506190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
507190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
508190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
509190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
510190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
511190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f5_ = t.f5_;
512190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f6_ = t.f6_;
513190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f7_ = t.f7_;
514190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
515190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
516190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
517190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
518190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
519190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
520190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
521190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
522190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T5 f5_;
523190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T6 f6_;
524190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T7 f7_;
525190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
526190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
527190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_9_TYPENAMES_(T)>
528190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass GTEST_9_TUPLE_(T) {
529190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
530190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
531190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
53257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
533190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
534190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
535190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
536190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
537190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
538190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
539190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
540190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
541190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
542190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
543190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_9_TYPENAMES_(U)>
544190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
545190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
546190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
547190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
548190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
549190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_9_TYPENAMES_(U)>
550190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
554190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
555190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
556190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_9_TYPENAMES_(U)>
557190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
558190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
559190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
560190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
561190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
562190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
563190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f5_ = t.f5_;
564190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f6_ = t.f6_;
565190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f7_ = t.f7_;
566190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f8_ = t.f8_;
567190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
568190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
569190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
570190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
571190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
572190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
573190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
574190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
575190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T5 f5_;
576190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T6 f6_;
577190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T7 f7_;
578190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T8 f8_;
579190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
580190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
581190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
582190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass tuple {
583190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
584190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <int k> friend class gtest_internal::Get;
585190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
58657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
58757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer      f9_() {}
588190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
589190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
590190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
591190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
592190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
593190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
594190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
595190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
596190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
597190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
598190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_10_TYPENAMES_(U)>
599190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
600190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
601190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      f9_(t.f9_) {}
602190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
603190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const tuple& t) { return CopyFrom(t); }
604190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
605190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_10_TYPENAMES_(U)>
606190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
607190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return CopyFrom(t);
608190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
609190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
610190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  GTEST_DECLARE_TUPLE_AS_FRIEND_
611190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
612190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <GTEST_10_TYPENAMES_(U)>
613190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
614190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f0_ = t.f0_;
615190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f1_ = t.f1_;
616190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f2_ = t.f2_;
617190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f3_ = t.f3_;
618190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f4_ = t.f4_;
619190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f5_ = t.f5_;
620190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f6_ = t.f6_;
621190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f7_ = t.f7_;
622190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f8_ = t.f8_;
623190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    f9_ = t.f9_;
624190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return *this;
625190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
626190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
627190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T0 f0_;
628190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T1 f1_;
629190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T2 f2_;
630190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T3 f3_;
631190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T4 f4_;
632190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T5 f5_;
633190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T6 f6_;
634190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T7 f7_;
635190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T8 f8_;
636190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  T9 f9_;
637190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
638190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
639190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 6.1.3.2 Tuple creation functions.
640190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
641190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Known limitations: we don't support passing an
642190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
643190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// implement tie().
644190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
645190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline tuple<> make_tuple() { return tuple<>(); }
646190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
647190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_1_TYPENAMES_(T)>
648190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
649190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_1_TUPLE_(T)(f0);
650190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
651190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
652190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_2_TYPENAMES_(T)>
653190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
654190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_2_TUPLE_(T)(f0, f1);
655190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
656190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
657190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_3_TYPENAMES_(T)>
658190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
659190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_3_TUPLE_(T)(f0, f1, f2);
660190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
661190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
662190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_4_TYPENAMES_(T)>
663190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
664190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3) {
665190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
666190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
667190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
668190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_5_TYPENAMES_(T)>
669190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
670190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4) {
671190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
672190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
673190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
674190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_6_TYPENAMES_(T)>
675190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
676190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4, const T5& f5) {
677190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
678190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
679190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
680190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_7_TYPENAMES_(T)>
681190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
682190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
683190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
684190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
685190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
686190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_8_TYPENAMES_(T)>
687190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
688190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
689190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
690190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
691190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
692190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_9_TYPENAMES_(T)>
693190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
694190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
695190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T8& f8) {
696190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
697190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
698190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
699190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
700190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
701190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
702190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    const T8& f8, const T9& f9) {
703190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
704190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
705190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
706190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 6.1.3.3 Tuple helper classes.
707190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
708190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <typename Tuple> struct tuple_size;
709190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
710190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_0_TYPENAMES_(T)>
711190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
712190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
713190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_1_TYPENAMES_(T)>
714190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
715190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
716190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_2_TYPENAMES_(T)>
717190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
718190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
719190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_3_TYPENAMES_(T)>
720190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
721190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
722190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_4_TYPENAMES_(T)>
723190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
724190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
725190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_5_TYPENAMES_(T)>
726190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
727190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
728190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_6_TYPENAMES_(T)>
729190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
730190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
731190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_7_TYPENAMES_(T)>
732190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
733190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
734190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_8_TYPENAMES_(T)>
735190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
736190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
737190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_9_TYPENAMES_(T)>
738190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
739190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
740190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T)>
741190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
742190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
743190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int k, class Tuple>
744190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct tuple_element {
745190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  typedef typename gtest_internal::TupleElement<
746190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
747190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
748190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
749190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
750190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
751190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 6.1.3.4 Element access.
752190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
753190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramernamespace gtest_internal {
754190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
755190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
756190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<0> {
757190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
758190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
759190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
760190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f0_; }  // NOLINT
761190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
762190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
763190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
764190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f0_; }
765190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
766190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
767190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
768190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<1> {
769190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
770190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
771190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
772190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f1_; }  // NOLINT
773190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
774190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
775190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f1_; }
777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
779190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
780190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<2> {
781190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
782190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
783190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
784190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f2_; }  // NOLINT
785190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
786190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
787190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
788190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f2_; }
789190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
790190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
791190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
792190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<3> {
793190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
794190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
795190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
796190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f3_; }  // NOLINT
797190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
798190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
799190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
800190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f3_; }
801190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
802190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
803190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
804190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<4> {
805190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
806190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
807190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
808190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f4_; }  // NOLINT
809190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
810190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
811190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
812190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f4_; }
813190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
814190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
815190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
816190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<5> {
817190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
818190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
819190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
820190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f5_; }  // NOLINT
821190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
822190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
823190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
824190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f5_; }
825190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
826190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
827190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
828190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<6> {
829190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
830190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
831190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
832190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f6_; }  // NOLINT
833190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
834190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
835190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
836190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f6_; }
837190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
838190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
839190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
840190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<7> {
841190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
842190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
843190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
844190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f7_; }  // NOLINT
845190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
846190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
847190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
848190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f7_; }
849190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
850190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
851190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
852190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<8> {
853190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
854190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
855190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
856190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f8_; }  // NOLINT
857190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
858190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
859190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
860190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f8_; }
861190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
862190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
863190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
864190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass Get<9> {
865190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public:
866190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
867190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
868190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  Field(Tuple& t) { return t.f9_; }  // NOLINT
869190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
870190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple>
871190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
872190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  ConstField(const Tuple& t) { return t.f9_; }
873190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
874190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
875190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}  // namespace gtest_internal
876190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
877190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int k, GTEST_10_TYPENAMES_(T)>
878190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
879190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerget(GTEST_10_TUPLE_(T)& t) {
880190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return gtest_internal::Get<k>::Field(t);
881190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
882190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
883190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int k, GTEST_10_TYPENAMES_(T)>
884190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
885190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerget(const GTEST_10_TUPLE_(T)& t) {
886190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return gtest_internal::Get<k>::ConstField(t);
887190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
888190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
889190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 6.1.3.5 Relational operators
890190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
891190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// We only implement == and !=, as we don't have a need for the rest yet.
892190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
893190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramernamespace gtest_internal {
894190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
895190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
896190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// first k fields of t1 equals the first k fields of t2.
897190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
898190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// k1 != k2.
899190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int kSize1, int kSize2>
900190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct SameSizeTuplePrefixComparator;
901190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
902190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <>
903190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct SameSizeTuplePrefixComparator<0, 0> {
904190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple1, class Tuple2>
905190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
906190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return true;
907190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
908190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
909190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
910190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <int k>
911190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerstruct SameSizeTuplePrefixComparator<k, k> {
912190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  template <class Tuple1, class Tuple2>
913190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
914190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
915190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
916190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  }
917190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer};
918190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
919190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}  // namespace gtest_internal
920190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
921190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
922190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline bool operator==(const GTEST_10_TUPLE_(T)& t,
923190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer                       const GTEST_10_TUPLE_(U)& u) {
924190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  return gtest_internal::SameSizeTuplePrefixComparator<
925190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      tuple_size<GTEST_10_TUPLE_(T)>::value,
926190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer      tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
927190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}
928190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
929190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
930190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerinline bool operator!=(const GTEST_10_TUPLE_(T)& t,
931190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
932190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
933190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 6.1.4 Pairs.
934190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Unimplemented.
935190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
936190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}  // namespace tr1
937190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}  // namespace std
938190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
939190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_0_TUPLE_
940190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_1_TUPLE_
941190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_2_TUPLE_
942190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_3_TUPLE_
943190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_4_TUPLE_
944190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_5_TUPLE_
945190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_6_TUPLE_
946190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_7_TUPLE_
947190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_8_TUPLE_
948190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_9_TUPLE_
949190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_10_TUPLE_
950190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
951190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_0_TYPENAMES_
952190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_1_TYPENAMES_
953190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_2_TYPENAMES_
954190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_3_TYPENAMES_
955190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_4_TYPENAMES_
956190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_5_TYPENAMES_
957190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_6_TYPENAMES_
958190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_7_TYPENAMES_
959190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_8_TYPENAMES_
960190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_9_TYPENAMES_
961190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_10_TYPENAMES_
962190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
963190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
964190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_BY_REF_
965190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_ADD_REF_
966190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#undef GTEST_TUPLE_ELEMENT_
967190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer
968190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
969