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