13d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! 23d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 33d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Copyright 2009 Google Inc. 43d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// All Rights Reserved. 53d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 63d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Redistribution and use in source and binary forms, with or without 73d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// modification, are permitted provided that the following conditions are 83d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// met: 93d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// * Redistributions of source code must retain the above copyright 113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// notice, this list of conditions and the following disclaimer. 123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// * Redistributions in binary form must reproduce the above 133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// copyright notice, this list of conditions and the following disclaimer 143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// in the documentation and/or other materials provided with the 153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// distribution. 163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// * Neither the name of Google Inc. nor the names of its 173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// contributors may be used to endorse or promote products derived from 183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// this software without specific prior written permission. 193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Author: wan@google.com (Zhanyong Wan) 333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Implements a subset of TR1 tuple needed by Google Test and Google Mock. 353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#include <utility> // For ::std::pair. 403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// The compiler used in Symbian has a bug that prevents us from declaring the 423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// tuple template as a friend (it complains that tuple is redefined). This 433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// hack bypasses the bug by declaring the members that should otherwise be 443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// private as public. 453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Sun Studio versions < 12 also have the above bug. 463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) 473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: 483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#else 493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ 503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_10_TYPENAMES_(U)> friend class tuple; \ 513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick private: 523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#endif 533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// GTEST_n_TUPLE_(T) is the type of an n-tuple. 553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_0_TUPLE_(T) tuple<> 563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \ 573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \ 593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \ 613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \ 633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \ 653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \ 673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick void, void, void> 703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T##7, void, void> 723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T##7, T##8, void> 743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ 753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T##7, T##8, T##9> 763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// GTEST_n_TYPENAMES_(T) declares a list of n typenames. 783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_0_TYPENAMES_(T) 793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_1_TYPENAMES_(T) typename T##0 803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3 843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4 863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4, typename T##5 883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4, typename T##5, typename T##6 903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4, typename T##5, typename T##6, \ 943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##7, typename T##8 953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ 963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##3, typename T##4, typename T##5, typename T##6, \ 973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T##7, typename T##8, typename T##9 983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// In theory, defining stuff in the ::std namespace is undefined 1003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// behavior. We can do this as we are playing the role of a standard 1013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// library vendor. 1023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicknamespace std { 1033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicknamespace tr1 { 1043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename T0 = void, typename T1 = void, typename T2 = void, 1063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T3 = void, typename T4 = void, typename T5 = void, 1073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T6 = void, typename T7 = void, typename T8 = void, 1083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typename T9 = void> 1093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass tuple; 1103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Anything in namespace gtest_internal is Google Test's INTERNAL 1123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. 1133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicknamespace gtest_internal { 1143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// ByRef<T>::type is T if T is a reference; otherwise it's const T&. 1163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename T> 1173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct ByRef { typedef const T& type; }; // NOLINT 1183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename T> 1193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct ByRef<T&> { typedef T& type; }; // NOLINT 1203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// A handy wrapper for ByRef. 1223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type 1233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// AddRef<T>::type is T if T is a reference; otherwise it's T&. This 1253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// is the same as tr1::add_reference<T>::type. 1263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename T> 1273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct AddRef { typedef T& type; }; // NOLINT 1283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename T> 1293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct AddRef<T&> { typedef T& type; }; // NOLINT 1303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// A handy wrapper for AddRef. 1323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type 1333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// A helper for implementing get<k>(). 1353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int k> class Get; 1363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// A helper for implementing tuple_element<k, T>. kIndexValid is true 1383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// iff k < the number of fields in tuple type T. 1393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <bool kIndexValid, int kIndex, class Tuple> 1403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement; 1413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; }; 1443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; }; 1473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; }; 1503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; }; 1533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; }; 1563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; }; 1593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; }; 1623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; }; 1653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; }; 1683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 1703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; }; 1713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} // namespace gtest_internal 1733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 1753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass tuple<> { 1763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 1773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() {} 1783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& /* t */) {} 1793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& /* t */) { return *this; } 1803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 1813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_1_TYPENAMES_(T)> 1833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_1_TUPLE_(T) { 1843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 1853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 1863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_() {} 1883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} 1903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_) {} 1923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_1_TYPENAMES_(U)> 1943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} 1953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 1973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 1983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_1_TYPENAMES_(U)> 1993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_1_TUPLE_(U)& t) { 2003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 2013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 2043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_1_TYPENAMES_(U)> 2063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { 2073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 2083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 2093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 2123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 2133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_2_TYPENAMES_(T)> 2153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_2_TUPLE_(T) { 2163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 2173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 2183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_() {} 2203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), 2223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_(f1) {} 2233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} 2253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_2_TYPENAMES_(U)> 2273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} 2283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <typename U0, typename U1> 2293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {} 2303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 2323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_2_TYPENAMES_(U)> 2343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_2_TUPLE_(U)& t) { 2353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 2363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <typename U0, typename U1> 2383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const ::std::pair<U0, U1>& p) { 2393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = p.first; 2403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = p.second; 2413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 2423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 2453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_2_TYPENAMES_(U)> 2473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { 2483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 2493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 2503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 2513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 2543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 2553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 2563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_3_TYPENAMES_(T)> 2583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_3_TUPLE_(T) { 2593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 2603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 2613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_() {} 2633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 2653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} 2663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} 2683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_3_TYPENAMES_(U)> 2703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} 2713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 2733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_3_TYPENAMES_(U)> 2753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_3_TUPLE_(U)& t) { 2763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 2773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 2803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_3_TYPENAMES_(U)> 2823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { 2833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 2843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 2853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 2863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 2873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 2883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 2903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 2913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 2923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 2933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_4_TYPENAMES_(T)> 2953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_4_TUPLE_(T) { 2963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 2973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 2983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 2993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_() {} 3003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 3023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), 3033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(f3) {} 3043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} 3063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_4_TYPENAMES_(U)> 3083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 3093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_) {} 3103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 3123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_4_TYPENAMES_(U)> 3143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_4_TUPLE_(U)& t) { 3153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 3163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 3173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 3193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_4_TYPENAMES_(U)> 3213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { 3223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 3233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 3243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 3253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 3263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 3273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 3283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 3303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 3313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 3323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 3333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 3343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_5_TYPENAMES_(T)> 3363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_5_TUPLE_(T) { 3373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 3383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 3393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} 3413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 3433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, 3443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} 3453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 3473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_) {} 3483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_5_TYPENAMES_(U)> 3503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 3513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_) {} 3523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 3543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_5_TYPENAMES_(U)> 3563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_5_TUPLE_(U)& t) { 3573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 3583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 3593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 3613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_5_TYPENAMES_(U)> 3633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { 3643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 3653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 3663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 3673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 3683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 3693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 3703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 3713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 3733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 3743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 3753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 3763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 3773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 3783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_6_TYPENAMES_(T)> 3803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_6_TUPLE_(T) { 3813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 3823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 3833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} 3853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 3873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 3883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 3893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_(f5) {} 3903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 3923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_), f5_(t.f5_) {} 3933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_6_TYPENAMES_(U)> 3953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 3963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} 3973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 3983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 3993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_6_TYPENAMES_(U)> 4013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_6_TUPLE_(U)& t) { 4023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 4033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 4043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 4063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_6_TYPENAMES_(U)> 4083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { 4093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 4103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 4113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 4123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 4133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 4143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_ = t.f5_; 4153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 4163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 4173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 4193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 4203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 4213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 4223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 4233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T5 f5_; 4243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 4253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_7_TYPENAMES_(T)> 4273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_7_TUPLE_(T) { 4283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 4293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 4303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} 4323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 4343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 4353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), 4363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} 4373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 4393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} 4403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_7_TYPENAMES_(U)> 4423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 4433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} 4443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 4463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_7_TYPENAMES_(U)> 4483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_7_TUPLE_(U)& t) { 4493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 4503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 4513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 4533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_7_TYPENAMES_(U)> 4553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { 4563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 4573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 4583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 4593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 4603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 4613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_ = t.f5_; 4623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f6_ = t.f6_; 4633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 4643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 4653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 4673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 4683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 4693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 4703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 4713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T5 f5_; 4723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T6 f6_; 4733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 4743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_8_TYPENAMES_(T)> 4763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_8_TUPLE_(T) { 4773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 4783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 4793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} 4813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 4833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 4843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, 4853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 4863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_(f5), f6_(f6), f7_(f7) {} 4873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 4893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} 4903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_8_TYPENAMES_(U)> 4923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 4933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} 4943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 4963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 4973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_8_TYPENAMES_(U)> 4983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_8_TUPLE_(U)& t) { 4993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 5003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 5013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 5033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_8_TYPENAMES_(U)> 5053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { 5063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 5073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 5083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 5093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 5103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 5113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_ = t.f5_; 5123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f6_ = t.f6_; 5133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f7_ = t.f7_; 5143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 5153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 5163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 5183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 5193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 5203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 5213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 5223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T5 f5_; 5233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T6 f6_; 5243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T7 f7_; 5253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 5263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_9_TYPENAMES_(T)> 5283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass GTEST_9_TUPLE_(T) { 5293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 5303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 5313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} 5333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 5353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 5363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, 5373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), 5383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} 5393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 5413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} 5423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_9_TYPENAMES_(U)> 5443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 5453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} 5463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 5483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_9_TYPENAMES_(U)> 5503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_9_TUPLE_(U)& t) { 5513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 5523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 5533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 5553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_9_TYPENAMES_(U)> 5573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { 5583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 5593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 5603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 5613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 5623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 5633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_ = t.f5_; 5643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f6_ = t.f6_; 5653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f7_ = t.f7_; 5663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f8_ = t.f8_; 5673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 5683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 5693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 5713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 5723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 5733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 5743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 5753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T5 f5_; 5763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T6 f6_; 5773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T7 f7_; 5783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T8 f8_; 5793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 5803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 5823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass tuple { 5833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 5843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <int k> friend class gtest_internal::Get; 5853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), 5873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f9_() {} 5883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, 5903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, 5913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, 5923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), 5933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} 5943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), 5963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} 5973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 5983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_10_TYPENAMES_(U)> 5993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), 6003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), 6013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f9_(t.f9_) {} 6023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const tuple& t) { return CopyFrom(t); } 6043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_10_TYPENAMES_(U)> 6063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& operator=(const GTEST_10_TUPLE_(U)& t) { 6073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return CopyFrom(t); 6083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 6093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick GTEST_DECLARE_TUPLE_AS_FRIEND_ 6113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <GTEST_10_TYPENAMES_(U)> 6133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { 6143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f0_ = t.f0_; 6153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f1_ = t.f1_; 6163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f2_ = t.f2_; 6173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f3_ = t.f3_; 6183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f4_ = t.f4_; 6193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f5_ = t.f5_; 6203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f6_ = t.f6_; 6213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f7_ = t.f7_; 6223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f8_ = t.f8_; 6233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick f9_ = t.f9_; 6243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return *this; 6253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 6263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T0 f0_; 6283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T1 f1_; 6293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T2 f2_; 6303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T3 f3_; 6313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T4 f4_; 6323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T5 f5_; 6333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T6 f6_; 6343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T7 f7_; 6353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T8 f8_; 6363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick T9 f9_; 6373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 6383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 6.1.3.2 Tuple creation functions. 6403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Known limitations: we don't support passing an 6423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// std::tr1::reference_wrapper<T> to make_tuple(). And we don't 6433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// implement tie(). 6443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline tuple<> make_tuple() { return tuple<>(); } 6463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_1_TYPENAMES_(T)> 6483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { 6493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_1_TUPLE_(T)(f0); 6503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_2_TYPENAMES_(T)> 6533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { 6543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_2_TUPLE_(T)(f0, f1); 6553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_3_TYPENAMES_(T)> 6583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { 6593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_3_TUPLE_(T)(f0, f1, f2); 6603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_4_TYPENAMES_(T)> 6633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3) { 6653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); 6663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_5_TYPENAMES_(T)> 6693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4) { 6713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); 6723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_6_TYPENAMES_(T)> 6753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4, const T5& f5) { 6773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); 6783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_7_TYPENAMES_(T)> 6813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4, const T5& f5, const T6& f6) { 6833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); 6843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_8_TYPENAMES_(T)> 6873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { 6893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); 6903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_9_TYPENAMES_(T)> 6933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 6943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, 6953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T8& f8) { 6963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); 6973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 6983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 6993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 7003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, 7013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, 7023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const T8& f8, const T9& f9) { 7033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); 7043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 7053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 6.1.3.3 Tuple helper classes. 7073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <typename Tuple> struct tuple_size; 7093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_0_TYPENAMES_(T)> 7113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; }; 7123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_1_TYPENAMES_(T)> 7143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; }; 7153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_2_TYPENAMES_(T)> 7173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; }; 7183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_3_TYPENAMES_(T)> 7203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; }; 7213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_4_TYPENAMES_(T)> 7233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; }; 7243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_5_TYPENAMES_(T)> 7263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; }; 7273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_6_TYPENAMES_(T)> 7293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; }; 7303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_7_TYPENAMES_(T)> 7323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; }; 7333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_8_TYPENAMES_(T)> 7353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; }; 7363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_9_TYPENAMES_(T)> 7383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; }; 7393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T)> 7413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; }; 7423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int k, class Tuple> 7443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct tuple_element { 7453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick typedef typename gtest_internal::TupleElement< 7463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick k < (tuple_size<Tuple>::value), k, Tuple>::type type; 7473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 7483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type 7503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 6.1.3.4 Element access. 7523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicknamespace gtest_internal { 7543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 7563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<0> { 7573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 7583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) 7603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f0_; } // NOLINT 7613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) 7643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f0_; } 7653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 7663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 7683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<1> { 7693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 7703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) 7723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f1_; } // NOLINT 7733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) 7763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f1_; } 7773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 7783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 7803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<2> { 7813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 7823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) 7843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f2_; } // NOLINT 7853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) 7883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f2_; } 7893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 7903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 7923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<3> { 7933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 7943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) 7963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f3_; } // NOLINT 7973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 7983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 7993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) 8003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f3_; } 8013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<4> { 8053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) 8083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f4_; } // NOLINT 8093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) 8123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f4_; } 8133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<5> { 8173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) 8203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f5_; } // NOLINT 8213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) 8243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f5_; } 8253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<6> { 8293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) 8323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f6_; } // NOLINT 8333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) 8363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f6_; } 8373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<7> { 8413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) 8443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f7_; } // NOLINT 8453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) 8483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f7_; } 8493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<8> { 8533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) 8563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f8_; } // NOLINT 8573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) 8603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f8_; } 8613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 8643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickclass Get<9> { 8653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick public: 8663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) 8683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick Field(Tuple& t) { return t.f9_; } // NOLINT 8693d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8703d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple> 8713d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) 8723d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ConstField(const Tuple& t) { return t.f9_; } 8733d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 8743d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8753d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} // namespace gtest_internal 8763d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8773d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int k, GTEST_10_TYPENAMES_(T)> 8783d000e7dd14c3185b9e27a6c38a67288b4d10431Ian RomanickGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) 8793d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickget(GTEST_10_TUPLE_(T)& t) { 8803d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return gtest_internal::Get<k>::Field(t); 8813d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 8823d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8833d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int k, GTEST_10_TYPENAMES_(T)> 8843d000e7dd14c3185b9e27a6c38a67288b4d10431Ian RomanickGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) 8853d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickget(const GTEST_10_TUPLE_(T)& t) { 8863d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return gtest_internal::Get<k>::ConstField(t); 8873d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 8883d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8893d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 6.1.3.5 Relational operators 8903d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8913d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// We only implement == and !=, as we don't have a need for the rest yet. 8923d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8933d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicknamespace gtest_internal { 8943d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 8953d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the 8963d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// first k fields of t1 equals the first k fields of t2. 8973d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if 8983d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// k1 != k2. 8993d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int kSize1, int kSize2> 9003d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct SameSizeTuplePrefixComparator; 9013d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9023d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <> 9033d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct SameSizeTuplePrefixComparator<0, 0> { 9043d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple1, class Tuple2> 9053d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { 9063d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return true; 9073d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 9083d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 9093d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9103d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <int k> 9113d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickstruct SameSizeTuplePrefixComparator<k, k> { 9123d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick template <class Tuple1, class Tuple2> 9133d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick static bool Eq(const Tuple1& t1, const Tuple2& t2) { 9143d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) && 9153d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2); 9163d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick } 9173d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick}; 9183d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9193d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} // namespace gtest_internal 9203d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9213d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> 9223d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline bool operator==(const GTEST_10_TUPLE_(T)& t, 9233d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const GTEST_10_TUPLE_(U)& u) { 9243d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick return gtest_internal::SameSizeTuplePrefixComparator< 9253d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple_size<GTEST_10_TUPLE_(T)>::value, 9263d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u); 9273d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} 9283d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9293d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanicktemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> 9303d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanickinline bool operator!=(const GTEST_10_TUPLE_(T)& t, 9313d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick const GTEST_10_TUPLE_(U)& u) { return !(t == u); } 9323d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9333d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// 6.1.4 Pairs. 9343d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick// Unimplemented. 9353d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9363d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} // namespace tr1 9373d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick} // namespace std 9383d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9393d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_0_TUPLE_ 9403d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_1_TUPLE_ 9413d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_2_TUPLE_ 9423d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_3_TUPLE_ 9433d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_4_TUPLE_ 9443d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_5_TUPLE_ 9453d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_6_TUPLE_ 9463d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_7_TUPLE_ 9473d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_8_TUPLE_ 9483d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_9_TUPLE_ 9493d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_10_TUPLE_ 9503d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9513d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_0_TYPENAMES_ 9523d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_1_TYPENAMES_ 9533d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_2_TYPENAMES_ 9543d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_3_TYPENAMES_ 9553d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_4_TYPENAMES_ 9563d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_5_TYPENAMES_ 9573d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_6_TYPENAMES_ 9583d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_7_TYPENAMES_ 9593d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_8_TYPENAMES_ 9603d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_9_TYPENAMES_ 9613d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_10_TYPENAMES_ 9623d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9633d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ 9643d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_BY_REF_ 9653d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_ADD_REF_ 9663d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#undef GTEST_TUPLE_ELEMENT_ 9673d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick 9683d000e7dd14c3185b9e27a6c38a67288b4d10431Ian Romanick#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ 969