1fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// This file was GENERATED by command:
2fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes//     pump.py gtest-tuple.h.pump
3fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes// DO NOT EDIT BY HAND!!!
441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Copyright 2009 Google Inc.
641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// All Rights Reserved.
741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//
841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Redistribution and use in source and binary forms, with or without
941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// modification, are permitted provided that the following conditions are
1041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// met:
1141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//
1241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//     * Redistributions of source code must retain the above copyright
1341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// notice, this list of conditions and the following disclaimer.
1441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//     * Redistributions in binary form must reproduce the above
1541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// copyright notice, this list of conditions and the following disclaimer
1641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// in the documentation and/or other materials provided with the
1741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// distribution.
1841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//     * Neither the name of Google Inc. nor the names of its
1941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// contributors may be used to endorse or promote products derived from
2041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// this software without specific prior written permission.
2141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//
2241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot//
3441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Author: wan@google.com (Zhanyong Wan)
3541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
3641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
3741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
3841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
3941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
4041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
4141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include <utility>  // For ::std::pair.
4241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
4341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// The compiler used in Symbian has a bug that prevents us from declaring the
4441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// tuple template as a friend (it complains that tuple is redefined).  This
4541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// hack bypasses the bug by declaring the members that should otherwise be
4641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// private as public.
4741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Sun Studio versions < 12 also have the above bug.
4841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
4941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
5041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#else
5141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
5241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
5341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot   private:
5441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif
5541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
5641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// GTEST_n_TUPLE_(T) is the type of an n-tuple.
5741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_0_TUPLE_(T) tuple<>
5841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
5941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
6041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
6141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
6241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
6341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
6441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
6541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
6641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
6741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
6841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
6941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
7041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
7141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    void, void, void>
7241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
7341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    T##7, void, void>
7441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
7541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    T##7, T##8, void>
7641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
7741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    T##7, T##8, T##9>
7841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
7941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
8041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_0_TYPENAMES_(T)
8141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_1_TYPENAMES_(T) typename T##0
8241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
8341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
8441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
8541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3
8641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
8741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4
8841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
8941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4, typename T##5
9041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
9141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4, typename T##5, typename T##6
9241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
9341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
9441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
9541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4, typename T##5, typename T##6, \
9641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##7, typename T##8
9741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
9841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##3, typename T##4, typename T##5, typename T##6, \
9941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T##7, typename T##8, typename T##9
10041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
10141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// In theory, defining stuff in the ::std namespace is undefined
10241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// behavior.  We can do this as we are playing the role of a standard
10341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// library vendor.
10441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace std {
10541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace tr1 {
10641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
10741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T0 = void, typename T1 = void, typename T2 = void,
10841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T3 = void, typename T4 = void, typename T5 = void,
10941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T6 = void, typename T7 = void, typename T8 = void,
11041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    typename T9 = void>
11141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass tuple;
11241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
11341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Anything in namespace gtest_internal is Google Test's INTERNAL
11441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
11541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace gtest_internal {
11641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
11741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
11841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T>
11941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct ByRef { typedef const T& type; };  // NOLINT
12041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T>
12141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct ByRef<T&> { typedef T& type; };  // NOLINT
12241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
12341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A handy wrapper for ByRef.
12441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
12541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
12641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
12741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// is the same as tr1::add_reference<T>::type.
12841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T>
12941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct AddRef { typedef T& type; };  // NOLINT
13041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename T>
13141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct AddRef<T&> { typedef T& type; };  // NOLINT
13241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
13341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A handy wrapper for AddRef.
13441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
13541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
13641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A helper for implementing get<k>().
13741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int k> class Get;
13841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
13941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A helper for implementing tuple_element<k, T>.  kIndexValid is true
14041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// iff k < the number of fields in tuple type T.
14141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <bool kIndexValid, int kIndex, class Tuple>
14241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct TupleElement;
14341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
14441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
145fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 0, GTEST_10_TUPLE_(T) > {
146fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T0 type;
147fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
14841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
14941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
150fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 1, GTEST_10_TUPLE_(T) > {
151fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T1 type;
152fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
15341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
15441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
155fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 2, GTEST_10_TUPLE_(T) > {
156fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T2 type;
157fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
15841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
15941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
160fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 3, GTEST_10_TUPLE_(T) > {
161fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T3 type;
162fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
16341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
16441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
165fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 4, GTEST_10_TUPLE_(T) > {
166fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T4 type;
167fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
16841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
16941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
170fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 5, GTEST_10_TUPLE_(T) > {
171fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T5 type;
172fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
17341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
17441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
175fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 6, GTEST_10_TUPLE_(T) > {
176fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T6 type;
177fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
17841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
17941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
180fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 7, GTEST_10_TUPLE_(T) > {
181fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T7 type;
182fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
18341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
18441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
185fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 8, GTEST_10_TUPLE_(T) > {
186fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T8 type;
187fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
18841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
18941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
190fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct TupleElement<true, 9, GTEST_10_TUPLE_(T) > {
191fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  typedef T9 type;
192fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
19341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
19441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}  // namespace gtest_internal
19541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
19641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
19741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass tuple<> {
19841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
19941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() {}
20041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& /* t */)  {}
20141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& /* t */) { return *this; }
20241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
20341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
20441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_1_TYPENAMES_(T)>
20541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_1_TUPLE_(T) {
20641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
20741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
20841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
20941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_() {}
21041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
21141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
21241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
21341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_) {}
21441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
21541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_1_TYPENAMES_(U)>
21641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
21741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
21841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
21941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
22041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_1_TYPENAMES_(U)>
22141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
22241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
22341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
22441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
22541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
22641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
22741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_1_TYPENAMES_(U)>
22841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
22941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
23041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
23141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
23241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
23341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
23441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
23541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
23641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_2_TYPENAMES_(T)>
23741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_2_TUPLE_(T) {
23841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
23941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
24041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
24141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_() {}
24241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
24341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
24441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f1_(f1) {}
24541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
24641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
24741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
24841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_2_TYPENAMES_(U)>
24941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
25041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <typename U0, typename U1>
25141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
25241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
25341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
25441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
25541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_2_TYPENAMES_(U)>
25641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
25741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
25841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
25941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <typename U0, typename U1>
26041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const ::std::pair<U0, U1>& p) {
26141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = p.first;
26241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = p.second;
26341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
26441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
26541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
26641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
26741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
26841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_2_TYPENAMES_(U)>
26941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
27041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
27141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
27241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
27341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
27441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
27541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
27641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
27741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
27841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
27941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_3_TYPENAMES_(T)>
28041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_3_TUPLE_(T) {
28141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
28241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
28341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
28441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_() {}
28541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
28641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
28741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
28841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
28941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
29041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
29141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_3_TYPENAMES_(U)>
29241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
29341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
29441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
29541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
29641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_3_TYPENAMES_(U)>
29741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
29841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
29941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
30041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
30141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
30241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
30341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_3_TYPENAMES_(U)>
30441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
30541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
30641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
30741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
30841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
30941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
31041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
31141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
31241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
31341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
31441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
31541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
31641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_4_TYPENAMES_(T)>
31741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_4_TUPLE_(T) {
31841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
31941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
32041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
32141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_() {}
32241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
32341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
32441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
32541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(f3) {}
32641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
32741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
32841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
32941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_4_TYPENAMES_(U)>
33041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
33141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_) {}
33241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
33341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
33441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
33541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_4_TYPENAMES_(U)>
33641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
33741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
33841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
33941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
34041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
34141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
34241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_4_TYPENAMES_(U)>
34341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
34441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
34541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
34641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
34741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
34841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
34941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
35041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
35141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
35241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
35341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
35441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
35541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
35641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
35741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_5_TYPENAMES_(T)>
35841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_5_TUPLE_(T) {
35941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
36041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
36141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
36241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
36341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
36441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
36541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
36641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
36741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
36841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
36941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_) {}
37041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
37141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_5_TYPENAMES_(U)>
37241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
37341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_) {}
37441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
37541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
37641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
37741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_5_TYPENAMES_(U)>
37841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
37941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
38041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
38141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
38241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
38341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
38441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_5_TYPENAMES_(U)>
38541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
38641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
38741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
38841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
38941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
39041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
39141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
39241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
39341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
39441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
39541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
39641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
39741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
39841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
39941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
40041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
40141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_6_TYPENAMES_(T)>
40241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_6_TUPLE_(T) {
40341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
40441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
40541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
40641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
40741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
40841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
40941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
41041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
41141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f5_(f5) {}
41241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
41341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
41441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_), f5_(t.f5_) {}
41541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
41641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_6_TYPENAMES_(U)>
41741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
41841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
41941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
42041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
42141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
42241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_6_TYPENAMES_(U)>
42341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
42441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
42541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
42641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
42741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
42841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
42941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_6_TYPENAMES_(U)>
43041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
43141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
43241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
43341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
43441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
43541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
43641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f5_ = t.f5_;
43741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
43841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
43941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
44041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
44141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
44241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
44341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
44441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
44541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T5 f5_;
44641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
44741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
44841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_7_TYPENAMES_(T)>
44941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_7_TUPLE_(T) {
45041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
45141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
45241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
45341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
45441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
45541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
45641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
45741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
45841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
45941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
46041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
46141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
46241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
46341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_7_TYPENAMES_(U)>
46441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
46541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
46641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
46741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
46841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
46941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_7_TYPENAMES_(U)>
47041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
47141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
47241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
47341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
47441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
47541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
47641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_7_TYPENAMES_(U)>
47741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
47841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
47941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
48041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
48141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
48241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
48341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f5_ = t.f5_;
48441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f6_ = t.f6_;
48541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
48641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
48741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
48841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
48941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
49041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
49141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
49241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
49341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T5 f5_;
49441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T6 f6_;
49541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
49641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
49741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_8_TYPENAMES_(T)>
49841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_8_TUPLE_(T) {
49941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
50041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
50141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
50241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
50341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
50441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
50541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
50641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
50741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
50841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f5_(f5), f6_(f6), f7_(f7) {}
50941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
51041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
51141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
51241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
51341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_8_TYPENAMES_(U)>
51441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
51541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
51641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
51741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
51841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
51941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_8_TYPENAMES_(U)>
52041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
52141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
52241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
52341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
52441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
52541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
52641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_8_TYPENAMES_(U)>
52741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
52841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
52941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
53041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
53141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
53241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
53341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f5_ = t.f5_;
53441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f6_ = t.f6_;
53541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f7_ = t.f7_;
53641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
53741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
53841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
53941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
54041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
54141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
54241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
54341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
54441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T5 f5_;
54541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T6 f6_;
54641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T7 f7_;
54741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
54841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
54941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_9_TYPENAMES_(T)>
55041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass GTEST_9_TUPLE_(T) {
55141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
55241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
55341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
55441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
55541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
55641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
55741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
55841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
55941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
56041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
56141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
56241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
56341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
56441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
56541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_9_TYPENAMES_(U)>
56641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
56741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
56841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
56941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
57041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
57141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_9_TYPENAMES_(U)>
57241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
57341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
57441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
57541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
57641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
57741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
57841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_9_TYPENAMES_(U)>
57941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
58041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
58141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
58241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
58341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
58441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
58541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f5_ = t.f5_;
58641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f6_ = t.f6_;
58741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f7_ = t.f7_;
58841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f8_ = t.f8_;
58941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
59041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
59141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
59241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
59341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
59441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
59541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
59641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
59741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T5 f5_;
59841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T6 f6_;
59941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T7 f7_;
60041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T8 f8_;
60141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
60241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
60341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
60441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass tuple {
60541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
60641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <int k> friend class gtest_internal::Get;
60741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
60841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
60941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f9_() {}
61041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
61141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
61241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
61341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
61441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
61541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
61641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
61741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
61841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
61941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
62041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_10_TYPENAMES_(U)>
62141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
62241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
62341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      f9_(t.f9_) {}
62441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
62541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const tuple& t) { return CopyFrom(t); }
62641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
62741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_10_TYPENAMES_(U)>
62841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
62941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return CopyFrom(t);
63041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
63141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
63241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  GTEST_DECLARE_TUPLE_AS_FRIEND_
63341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
63441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <GTEST_10_TYPENAMES_(U)>
63541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
63641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f0_ = t.f0_;
63741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f1_ = t.f1_;
63841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f2_ = t.f2_;
63941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f3_ = t.f3_;
64041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f4_ = t.f4_;
64141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f5_ = t.f5_;
64241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f6_ = t.f6_;
64341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f7_ = t.f7_;
64441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f8_ = t.f8_;
64541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    f9_ = t.f9_;
64641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return *this;
64741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
64841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
64941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T0 f0_;
65041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T1 f1_;
65141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T2 f2_;
65241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T3 f3_;
65341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T4 f4_;
65441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T5 f5_;
65541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T6 f6_;
65641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T7 f7_;
65741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T8 f8_;
65841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  T9 f9_;
65941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
66041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
66141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 6.1.3.2 Tuple creation functions.
66241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
66341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Known limitations: we don't support passing an
66441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
66541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// implement tie().
66641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
66741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline tuple<> make_tuple() { return tuple<>(); }
66841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
66941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_1_TYPENAMES_(T)>
67041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
67141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_1_TUPLE_(T)(f0);
67241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
67341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
67441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_2_TYPENAMES_(T)>
67541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
67641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_2_TUPLE_(T)(f0, f1);
67741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
67841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
67941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_3_TYPENAMES_(T)>
68041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
68141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_3_TUPLE_(T)(f0, f1, f2);
68241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
68341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
68441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_4_TYPENAMES_(T)>
68541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
68641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3) {
68741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
68841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
68941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
69041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_5_TYPENAMES_(T)>
69141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
69241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4) {
69341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
69441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
69541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
69641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_6_TYPENAMES_(T)>
69741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
69841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4, const T5& f5) {
69941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
70041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
70141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
70241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_7_TYPENAMES_(T)>
70341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
70441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
70541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
70641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
70741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
70841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_8_TYPENAMES_(T)>
70941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
71041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
71141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
71241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
71341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
71441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_9_TYPENAMES_(T)>
71541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
71641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
71741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T8& f8) {
71841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
71941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
72041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
72141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
72241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
72341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
72441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    const T8& f8, const T9& f9) {
72541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
72641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
72741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
72841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 6.1.3.3 Tuple helper classes.
72941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
73041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <typename Tuple> struct tuple_size;
73141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
73241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_0_TYPENAMES_(T)>
733fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_0_TUPLE_(T) > {
734fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 0;
735fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
73641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
73741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_1_TYPENAMES_(T)>
738fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_1_TUPLE_(T) > {
739fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 1;
740fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
74141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
74241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_2_TYPENAMES_(T)>
743fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_2_TUPLE_(T) > {
744fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 2;
745fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
74641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
74741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_3_TYPENAMES_(T)>
748fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_3_TUPLE_(T) > {
749fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 3;
750fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
75141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
75241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_4_TYPENAMES_(T)>
753fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_4_TUPLE_(T) > {
754fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 4;
755fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
75641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
75741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_5_TYPENAMES_(T)>
758fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_5_TUPLE_(T) > {
759fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 5;
760fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
76141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
76241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_6_TYPENAMES_(T)>
763fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_6_TUPLE_(T) > {
764fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 6;
765fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
76641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
76741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_7_TYPENAMES_(T)>
768fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_7_TUPLE_(T) > {
769fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 7;
770fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
77141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
77241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_8_TYPENAMES_(T)>
773fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_8_TUPLE_(T) > {
774fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 8;
775fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
77641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
77741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_9_TYPENAMES_(T)>
778fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_9_TUPLE_(T) > {
779fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 9;
780fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
78141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
78241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T)>
783fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstruct tuple_size<GTEST_10_TUPLE_(T) > {
784fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes  static const int value = 10;
785fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes};
78641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
78741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int k, class Tuple>
78841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct tuple_element {
78941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  typedef typename gtest_internal::TupleElement<
79041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
79141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
79241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
79341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
79441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
79541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 6.1.3.4 Element access.
79641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
79741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace gtest_internal {
79841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
79941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
80041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<0> {
80141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
80241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
80341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
80441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f0_; }  // NOLINT
80541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
80641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
80741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
80841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f0_; }
80941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
81041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
81141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
81241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<1> {
81341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
81441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
81541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
81641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f1_; }  // NOLINT
81741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
81841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
81941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
82041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f1_; }
82141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
82241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
82341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
82441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<2> {
82541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
82641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
82741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
82841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f2_; }  // NOLINT
82941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
83041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
83141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
83241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f2_; }
83341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
83441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
83541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
83641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<3> {
83741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
83841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
83941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
84041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f3_; }  // NOLINT
84141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
84241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
84341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
84441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f3_; }
84541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
84641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
84741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
84841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<4> {
84941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
85041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
85141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
85241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f4_; }  // NOLINT
85341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
85441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
85541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
85641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f4_; }
85741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
85841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
85941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
86041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<5> {
86141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
86241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
86341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
86441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f5_; }  // NOLINT
86541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
86641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
86741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
86841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f5_; }
86941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
87041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
87141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
87241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<6> {
87341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
87441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
87541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
87641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f6_; }  // NOLINT
87741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
87841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
87941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
88041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f6_; }
88141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
88241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
88341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
88441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<7> {
88541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
88641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
88741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
88841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f7_; }  // NOLINT
88941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
89041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
89141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
89241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f7_; }
89341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
89441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
89541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
89641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<8> {
89741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
89841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
89941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
90041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f8_; }  // NOLINT
90141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
90241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
90341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
90441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f8_; }
90541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
90641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
90741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
90841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass Get<9> {
90941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public:
91041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
91141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
91241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  Field(Tuple& t) { return t.f9_; }  // NOLINT
91341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
91441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple>
91541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
91641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  ConstField(const Tuple& t) { return t.f9_; }
91741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
91841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
91941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}  // namespace gtest_internal
92041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
92141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int k, GTEST_10_TYPENAMES_(T)>
92241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
92341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotget(GTEST_10_TUPLE_(T)& t) {
92441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return gtest_internal::Get<k>::Field(t);
92541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
92641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
92741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int k, GTEST_10_TYPENAMES_(T)>
92841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
92941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotget(const GTEST_10_TUPLE_(T)& t) {
93041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return gtest_internal::Get<k>::ConstField(t);
93141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
93241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
93341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 6.1.3.5 Relational operators
93441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
93541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// We only implement == and !=, as we don't have a need for the rest yet.
93641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
93741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace gtest_internal {
93841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
93941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
94041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// first k fields of t1 equals the first k fields of t2.
94141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
94241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// k1 != k2.
94341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int kSize1, int kSize2>
94441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct SameSizeTuplePrefixComparator;
94541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
94641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <>
94741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct SameSizeTuplePrefixComparator<0, 0> {
94841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple1, class Tuple2>
94941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
95041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return true;
95141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
95241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
95341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
95441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <int k>
95541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotstruct SameSizeTuplePrefixComparator<k, k> {
95641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  template <class Tuple1, class Tuple2>
95741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
95841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
95941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
96041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  }
96141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot};
96241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
96341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}  // namespace gtest_internal
96441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
96541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
96641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline bool operator==(const GTEST_10_TUPLE_(T)& t,
96741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot                       const GTEST_10_TUPLE_(U)& u) {
96841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot  return gtest_internal::SameSizeTuplePrefixComparator<
969fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes      tuple_size<GTEST_10_TUPLE_(T) >::value,
970fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes      tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u);
97141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}
97241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
97341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabottemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
97441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotinline bool operator!=(const GTEST_10_TUPLE_(T)& t,
97541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
97641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
97741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 6.1.4 Pairs.
97841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Unimplemented.
97941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
98041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}  // namespace tr1
98141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}  // namespace std
98241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
98341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_0_TUPLE_
98441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_1_TUPLE_
98541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_2_TUPLE_
98641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_3_TUPLE_
98741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_4_TUPLE_
98841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_5_TUPLE_
98941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_6_TUPLE_
99041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_7_TUPLE_
99141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_8_TUPLE_
99241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_9_TUPLE_
99341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_10_TUPLE_
99441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
99541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_0_TYPENAMES_
99641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_1_TYPENAMES_
99741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_2_TYPENAMES_
99841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_3_TYPENAMES_
99941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_4_TYPENAMES_
100041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_5_TYPENAMES_
100141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_6_TYPENAMES_
100241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_7_TYPENAMES_
100341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_8_TYPENAMES_
100441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_9_TYPENAMES_
100541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_10_TYPENAMES_
100641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
100741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
100841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_BY_REF_
100941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_ADD_REF_
101041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#undef GTEST_TUPLE_ELEMENT_
101141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot
101241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
1013