1894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! 2894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 3894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Copyright 2009 Google Inc. 4894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// All Rights Reserved. 5894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Redistribution and use in source and binary forms, with or without 7894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// modification, are permitted provided that the following conditions are 8894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// met: 9894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 10894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// * Redistributions of source code must retain the above copyright 11894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// notice, this list of conditions and the following disclaimer. 12894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// * Redistributions in binary form must reproduce the above 13894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// copyright notice, this list of conditions and the following disclaimer 14894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// in the documentation and/or other materials provided with the 15894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// distribution. 16894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// * Neither the name of Google Inc. nor the names of its 17894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// contributors may be used to endorse or promote products derived from 18894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// this software without specific prior written permission. 19894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 20894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 32894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Author: wan@google.com (Zhanyong Wan) 33894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 34894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Implements a subset of TR1 tuple needed by Google Test and Google Mock. 35894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 36894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 37894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 38894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 39894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#include <utility> // For ::std::pair. 40894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 41894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// The compiler used in Symbian has a bug that prevents us from declaring the 42894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// tuple template as a friend (it complains that tuple is redefined). This 43894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// hack bypasses the bug by declaring the members that should otherwise be 44894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// private as public. 45894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Sun Studio versions < 12 also have the above bug. 46894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: 48894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#else 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ 50894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_10_TYPENAMES_(U)> friend class tuple; \ 51894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman private: 52894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#endif 53894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 54894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// GTEST_n_TUPLE_(T) is the type of an n-tuple. 55894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_0_TUPLE_(T) tuple<> 56894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \ 57894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 58894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \ 59894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 60894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \ 61894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 62894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \ 63894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 64894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \ 65894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 66894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \ 67894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 68894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 69894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman void, void, void> 70894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 71894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T##7, void, void> 72894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 73894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T##7, T##8, void> 74894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 75894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T##7, T##8, T##9> 76894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 77894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// GTEST_n_TYPENAMES_(T) declares a list of n typenames. 78894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_0_TYPENAMES_(T) 79894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_1_TYPENAMES_(T) typename T##0 80894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 81894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 82894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 83894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3 84894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 85894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4 86894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 87894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4, typename T##5 88894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 89894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4, typename T##5, typename T##6 90894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 91894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 92894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 93894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4, typename T##5, typename T##6, \ 94894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##7, typename T##8 95894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 96894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##3, typename T##4, typename T##5, typename T##6, \ 97894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T##7, typename T##8, typename T##9 98894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 99894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// In theory, defining stuff in the ::std namespace is undefined 100894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// behavior. We can do this as we are playing the role of a standard 101894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// library vendor. 102894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumannamespace std { 103894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumannamespace tr1 { 104894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 105894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename T0 = void, typename T1 = void, typename T2 = void, 106894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T3 = void, typename T4 = void, typename T5 = void, 107894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T6 = void, typename T7 = void, typename T8 = void, 108894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typename T9 = void> 109894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass tuple; 110894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 111894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Anything in namespace gtest_internal is Google Test's INTERNAL 112894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. 113894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumannamespace gtest_internal { 114894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 115894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// ByRef<T>::type is T if T is a reference; otherwise it's const T&. 116894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename T> 117894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct ByRef { typedef const T& type; }; // NOLINT 118894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename T> 119894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct ByRef<T&> { typedef T& type; }; // NOLINT 120894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 121894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// A handy wrapper for ByRef. 122894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type 123894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 124894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// AddRef<T>::type is T if T is a reference; otherwise it's T&. This 125894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// is the same as tr1::add_reference<T>::type. 126894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename T> 127894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct AddRef { typedef T& type; }; // NOLINT 128894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename T> 129894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct AddRef<T&> { typedef T& type; }; // NOLINT 130894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 131894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// A handy wrapper for AddRef. 132894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type 133894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 134894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// A helper for implementing get<k>(). 135894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int k> class Get; 136894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 137894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// A helper for implementing tuple_element<k, T>. kIndexValid is true 138894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// iff k < the number of fields in tuple type T. 139894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <bool kIndexValid, int kIndex, class Tuple> 140894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement; 141894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 142894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 143894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; }; 144894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 145894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 146894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; }; 147894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 148894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 149894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; }; 150894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 151894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 152894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; }; 153894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 154894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 155894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; }; 156894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 157894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 158894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; }; 159894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 160894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 161894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; }; 162894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 163894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 164894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; }; 165894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 166894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 167894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; }; 168894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 169894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 170894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; }; 171894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 172894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} // namespace gtest_internal 173894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 174894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 175894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass tuple<> { 176894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 177894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() {} 178894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& /* t */) {} 179894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& /* t */) { return *this; } 180894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 181894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 182894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_1_TYPENAMES_(T)> 183894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_1_TUPLE_(T) { 184894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 185894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 186894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 187894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_() {} 188894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 189894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} 190894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 191894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_) {} 192894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 193894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_1_TYPENAMES_(U)> 194894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} 195894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 196894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 197894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 198894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_1_TYPENAMES_(U)> 199894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_1_TUPLE_(U)& t) { 200894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 201894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 202894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 203894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 204894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 205894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_1_TYPENAMES_(U)> 206894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { 207894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 208894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 209894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 210894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 211894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 212894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 213894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 214894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_2_TYPENAMES_(T)> 215894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_2_TUPLE_(T) { 216894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 217894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 218894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 219894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_() {} 220894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 221894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), 222894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_(f1) {} 223894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 224894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} 225894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 226894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_2_TYPENAMES_(U)> 227894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} 228894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <typename U0, typename U1> 229894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {} 230894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 231894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 232894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 233894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_2_TYPENAMES_(U)> 234894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_2_TUPLE_(U)& t) { 235894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 236894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 237894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <typename U0, typename U1> 238894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const ::std::pair<U0, U1>& p) { 239894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = p.first; 240894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = p.second; 241894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 242894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 243894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 244894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 245894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 246894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_2_TYPENAMES_(U)> 247894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { 248894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 249894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 250894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 251894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 252894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 253894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 254894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 255894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 256894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 257894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_3_TYPENAMES_(T)> 258894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_3_TUPLE_(T) { 259894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 260894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 261894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 262894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_() {} 263894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 264894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 265894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} 266894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 267894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} 268894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 269894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_3_TYPENAMES_(U)> 270894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} 271894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 272894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 273894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 274894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_3_TYPENAMES_(U)> 275894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_3_TUPLE_(U)& t) { 276894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 277894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 278894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 279894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 280894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 281894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_3_TYPENAMES_(U)> 282894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { 283894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 284894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 285894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 286894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 287894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 288894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 289894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 290894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 291894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 292894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 293894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 294894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_4_TYPENAMES_(T)> 295894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_4_TUPLE_(T) { 296894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 297894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 298894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 299894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_() {} 300894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 301894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 302894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), 303894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(f3) {} 304894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 305894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} 306894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 307894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_4_TYPENAMES_(U)> 308894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 309894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_) {} 310894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 311894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 312894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 313894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_4_TYPENAMES_(U)> 314894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_4_TUPLE_(U)& t) { 315894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 316894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 317894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 318894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 319894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 320894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_4_TYPENAMES_(U)> 321894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { 322894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 323894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 324894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 325894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 326894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 327894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 328894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 329894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 330894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 331894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 332894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 333894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 334894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 335894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_5_TYPENAMES_(T)> 336894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_5_TUPLE_(T) { 337894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 338894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 339894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 340894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} 341894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 342894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 343894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, 344894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} 345894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 346894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 347894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_) {} 348894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 349894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_5_TYPENAMES_(U)> 350894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 351894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_) {} 352894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 353894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 354894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 355894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_5_TYPENAMES_(U)> 356894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_5_TUPLE_(U)& t) { 357894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 358894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 359894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 360894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 361894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 362894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_5_TYPENAMES_(U)> 363894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { 364894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 365894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 366894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 367894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 368894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 369894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 370894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 371894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 372894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 373894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 374894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 375894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 376894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 377894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 378894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 379894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_6_TYPENAMES_(T)> 380894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_6_TUPLE_(T) { 381894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 382894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 383894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 384894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} 385894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 386894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 387894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 388894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 389894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_(f5) {} 390894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 391894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 392894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_), f5_(t.f5_) {} 393894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 394894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_6_TYPENAMES_(U)> 395894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 396894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} 397894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 398894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 399894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 400894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_6_TYPENAMES_(U)> 401894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_6_TUPLE_(U)& t) { 402894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 403894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 404894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 405894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 406894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 407894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_6_TYPENAMES_(U)> 408894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { 409894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 410894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 411894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 412894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 413894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 414894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_ = t.f5_; 415894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 416894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 417894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 418894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 419894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 420894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 421894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 422894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 423894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T5 f5_; 424894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 425894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 426894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_7_TYPENAMES_(T)> 427894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_7_TUPLE_(T) { 428894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 429894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 430894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 431894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} 432894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 433894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 434894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 435894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), 436894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} 437894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 438894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 439894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} 440894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 441894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_7_TYPENAMES_(U)> 442894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 443894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} 444894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 445894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 446894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 447894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_7_TYPENAMES_(U)> 448894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_7_TUPLE_(U)& t) { 449894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 450894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 451894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 452894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 453894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 454894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_7_TYPENAMES_(U)> 455894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { 456894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 457894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 458894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 459894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 460894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 461894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_ = t.f5_; 462894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f6_ = t.f6_; 463894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 464894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 465894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 466894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 467894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 468894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 469894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 470894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 471894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T5 f5_; 472894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T6 f6_; 473894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 474894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 475894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_8_TYPENAMES_(T)> 476894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_8_TUPLE_(T) { 477894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 478894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 479894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 480894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} 481894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 482894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 483894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 484894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, 485894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 486894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_(f5), f6_(f6), f7_(f7) {} 487894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 488894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 489894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} 490894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 491894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_8_TYPENAMES_(U)> 492894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 493894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} 494894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 495894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 496894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 497894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_8_TYPENAMES_(U)> 498894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_8_TUPLE_(U)& t) { 499894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 500894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 501894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 502894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 503894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 504894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_8_TYPENAMES_(U)> 505894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { 506894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 507894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 508894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 509894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 510894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 511894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_ = t.f5_; 512894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f6_ = t.f6_; 513894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f7_ = t.f7_; 514894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 515894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 516894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 517894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 518894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 519894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 520894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 521894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 522894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T5 f5_; 523894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T6 f6_; 524894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T7 f7_; 525894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 526894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 527894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_9_TYPENAMES_(T)> 528894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass GTEST_9_TUPLE_(T) { 529894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 530894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 531894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 532894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} 533894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 534894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 535894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 536894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, 537894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 538894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} 539894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 540894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 541894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} 542894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 543894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_9_TYPENAMES_(U)> 544894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 545894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} 546894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 547894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 548894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 549894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_9_TYPENAMES_(U)> 550894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_9_TUPLE_(U)& t) { 551894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 552894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 553894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 554894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 555894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 556894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_9_TYPENAMES_(U)> 557894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { 558894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 559894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 560894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 561894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 562894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 563894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_ = t.f5_; 564894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f6_ = t.f6_; 565894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f7_ = t.f7_; 566894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f8_ = t.f8_; 567894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 568894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 569894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 570894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 571894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 572894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 573894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 574894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 575894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T5 f5_; 576894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T6 f6_; 577894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T7 f7_; 578894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T8 f8_; 579894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 580894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 581894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 582894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass tuple { 583894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 584894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <int k> friend class gtest_internal::Get; 585894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 586894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), 587894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f9_() {} 588894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 589894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 590894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 591894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, 592894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), 593894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} 594894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 595894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 596894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} 597894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 598894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_10_TYPENAMES_(U)> 599894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 600894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), 601894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f9_(t.f9_) {} 602894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 603894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const tuple& t) { return CopyFrom(t); } 604894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 605894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_10_TYPENAMES_(U)> 606894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& operator=(const GTEST_10_TUPLE_(U)& t) { 607894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return CopyFrom(t); 608894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 609894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 610894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman GTEST_DECLARE_TUPLE_AS_FRIEND_ 611894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 612894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <GTEST_10_TYPENAMES_(U)> 613894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { 614894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f0_ = t.f0_; 615894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f1_ = t.f1_; 616894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f2_ = t.f2_; 617894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f3_ = t.f3_; 618894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f4_ = t.f4_; 619894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f5_ = t.f5_; 620894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f6_ = t.f6_; 621894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f7_ = t.f7_; 622894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f8_ = t.f8_; 623894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman f9_ = t.f9_; 624894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return *this; 625894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 626894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 627894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T0 f0_; 628894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T1 f1_; 629894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T2 f2_; 630894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T3 f3_; 631894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T4 f4_; 632894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T5 f5_; 633894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T6 f6_; 634894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T7 f7_; 635894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T8 f8_; 636894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman T9 f9_; 637894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 638894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 639894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6.1.3.2 Tuple creation functions. 640894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 641894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Known limitations: we don't support passing an 642894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// std::tr1::reference_wrapper<T> to make_tuple(). And we don't 643894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// implement tie(). 644894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 645894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline tuple<> make_tuple() { return tuple<>(); } 646894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 647894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_1_TYPENAMES_(T)> 648894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { 649894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_1_TUPLE_(T)(f0); 650894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 651894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 652894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_2_TYPENAMES_(T)> 653894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { 654894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_2_TUPLE_(T)(f0, f1); 655894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 656894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 657894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_3_TYPENAMES_(T)> 658894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { 659894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_3_TUPLE_(T)(f0, f1, f2); 660894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 661894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 662894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_4_TYPENAMES_(T)> 663894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 664894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3) { 665894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); 666894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 667894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 668894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_5_TYPENAMES_(T)> 669894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 670894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4) { 671894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); 672894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 673894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 674894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_6_TYPENAMES_(T)> 675894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 676894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4, const T5& f5) { 677894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); 678894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 679894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 680894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_7_TYPENAMES_(T)> 681894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 682894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4, const T5& f5, const T6& f6) { 683894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); 684894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 685894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 686894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_8_TYPENAMES_(T)> 687894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 688894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { 689894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); 690894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 691894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 692894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_9_TYPENAMES_(T)> 693894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 694894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, 695894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T8& f8) { 696894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); 697894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 698894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 699894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 700894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 701894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, 702894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const T8& f8, const T9& f9) { 703894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); 704894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 705894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 706894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6.1.3.3 Tuple helper classes. 707894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 708894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <typename Tuple> struct tuple_size; 709894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 710894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_0_TYPENAMES_(T)> 711894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; }; 712894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 713894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_1_TYPENAMES_(T)> 714894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; }; 715894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 716894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_2_TYPENAMES_(T)> 717894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; }; 718894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 719894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_3_TYPENAMES_(T)> 720894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; }; 721894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 722894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_4_TYPENAMES_(T)> 723894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; }; 724894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 725894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_5_TYPENAMES_(T)> 726894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; }; 727894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 728894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_6_TYPENAMES_(T)> 729894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; }; 730894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 731894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_7_TYPENAMES_(T)> 732894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; }; 733894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 734894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_8_TYPENAMES_(T)> 735894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; }; 736894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 737894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_9_TYPENAMES_(T)> 738894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; }; 739894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 740894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T)> 741894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; }; 742894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 743894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int k, class Tuple> 744894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct tuple_element { 745894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman typedef typename gtest_internal::TupleElement< 746894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman k < (tuple_size<Tuple>::value), k, Tuple>::type type; 747894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 748894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 749894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type 750894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 751894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6.1.3.4 Element access. 752894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 753894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumannamespace gtest_internal { 754894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 755894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 756894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<0> { 757894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 758894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 759894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) 760894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f0_; } // NOLINT 761894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 762894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 763894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) 764894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f0_; } 765894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 766894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 767894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 768894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<1> { 769894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 770894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 771894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) 772894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f1_; } // NOLINT 773894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 774894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 775894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) 776894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f1_; } 777894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 778894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 779894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 780894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<2> { 781894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 782894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 783894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) 784894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f2_; } // NOLINT 785894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 786894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 787894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) 788894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f2_; } 789894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 790894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 791894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 792894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<3> { 793894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 794894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 795894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) 796894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f3_; } // NOLINT 797894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 798894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 799894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) 800894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f3_; } 801894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 802894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 803894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 804894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<4> { 805894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 806894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 807894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) 808894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f4_; } // NOLINT 809894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 810894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 811894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) 812894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f4_; } 813894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 814894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 815894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 816894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<5> { 817894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 818894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 819894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) 820894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f5_; } // NOLINT 821894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 822894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 823894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) 824894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f5_; } 825894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 826894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 827894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 828894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<6> { 829894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 830894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 831894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) 832894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f6_; } // NOLINT 833894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 834894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 835894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) 836894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f6_; } 837894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 838894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 839894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 840894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<7> { 841894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 842894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 843894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) 844894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f7_; } // NOLINT 845894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 846894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 847894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) 848894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f7_; } 849894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 850894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 851894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 852894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<8> { 853894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 854894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 855894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) 856894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f8_; } // NOLINT 857894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 858894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 859894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) 860894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f8_; } 861894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 862894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 863894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 864894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanclass Get<9> { 865894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman public: 866894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 867894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) 868894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman Field(Tuple& t) { return t.f9_; } // NOLINT 869894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 870894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple> 871894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) 872894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ConstField(const Tuple& t) { return t.f9_; } 873894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 874894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 875894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} // namespace gtest_internal 876894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 877894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int k, GTEST_10_TYPENAMES_(T)> 878894018228b0e0bdbd7aa7e8f47d4a9458789ca82John BaumanGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) 879894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanget(GTEST_10_TUPLE_(T)& t) { 880894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return gtest_internal::Get<k>::Field(t); 881894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 882894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 883894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int k, GTEST_10_TYPENAMES_(T)> 884894018228b0e0bdbd7aa7e8f47d4a9458789ca82John BaumanGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) 885894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanget(const GTEST_10_TUPLE_(T)& t) { 886894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return gtest_internal::Get<k>::ConstField(t); 887894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 888894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 889894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6.1.3.5 Relational operators 890894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 891894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// We only implement == and !=, as we don't have a need for the rest yet. 892894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 893894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumannamespace gtest_internal { 894894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 895894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the 896894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// first k fields of t1 equals the first k fields of t2. 897894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if 898894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// k1 != k2. 899894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int kSize1, int kSize2> 900894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct SameSizeTuplePrefixComparator; 901894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 902894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <> 903894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct SameSizeTuplePrefixComparator<0, 0> { 904894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple1, class Tuple2> 905894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { 906894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return true; 907894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 908894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 909894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 910894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <int k> 911894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumanstruct SameSizeTuplePrefixComparator<k, k> { 912894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman template <class Tuple1, class Tuple2> 913894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman static bool Eq(const Tuple1& t1, const Tuple2& t2) { 914894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) && 915894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2); 916894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman } 917894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman}; 918894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 919894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} // namespace gtest_internal 920894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 921894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> 922894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline bool operator==(const GTEST_10_TUPLE_(T)& t, 923894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const GTEST_10_TUPLE_(U)& u) { 924894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman return gtest_internal::SameSizeTuplePrefixComparator< 925894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple_size<GTEST_10_TUPLE_(T)>::value, 926894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u); 927894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} 928894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 929894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumantemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> 930894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Baumaninline bool operator!=(const GTEST_10_TUPLE_(T)& t, 931894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman const GTEST_10_TUPLE_(U)& u) { return !(t == u); } 932894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 933894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// 6.1.4 Pairs. 934894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman// Unimplemented. 935894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 936894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} // namespace tr1 937894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman} // namespace std 938894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 939894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_0_TUPLE_ 940894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_1_TUPLE_ 941894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_2_TUPLE_ 942894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_3_TUPLE_ 943894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_4_TUPLE_ 944894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_5_TUPLE_ 945894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_6_TUPLE_ 946894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_7_TUPLE_ 947894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_8_TUPLE_ 948894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_9_TUPLE_ 949894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_10_TUPLE_ 950894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 951894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_0_TYPENAMES_ 952894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_1_TYPENAMES_ 953894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_2_TYPENAMES_ 954894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_3_TYPENAMES_ 955894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_4_TYPENAMES_ 956894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_5_TYPENAMES_ 957894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_6_TYPENAMES_ 958894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_7_TYPENAMES_ 959894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_8_TYPENAMES_ 960894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_9_TYPENAMES_ 961894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_10_TYPENAMES_ 962894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 963894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ 964894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_BY_REF_ 965894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_ADD_REF_ 966894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#undef GTEST_TUPLE_ELEMENT_ 967894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman 968894018228b0e0bdbd7aa7e8f47d4a9458789ca82John Bauman#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 969