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