193fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev// This file was GENERATED by command:
293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev//     pump.py gtest-tuple.h.pump
393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev// DO NOT EDIT BY HAND!!!
46d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
56d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Copyright 2009 Google Inc.
66d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// All Rights Reserved.
76d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//
86d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Redistribution and use in source and binary forms, with or without
96d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// modification, are permitted provided that the following conditions are
106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// met:
116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//
126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//     * Redistributions of source code must retain the above copyright
136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// notice, this list of conditions and the following disclaimer.
146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//     * Redistributions in binary form must reproduce the above
156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// copyright notice, this list of conditions and the following disclaimer
166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// in the documentation and/or other materials provided with the
176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// distribution.
186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//     * Neither the name of Google Inc. nor the names of its
196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// contributors may be used to endorse or promote products derived from
206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// this software without specific prior written permission.
216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//
226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan//
346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Author: wan@google.com (Zhanyong Wan)
356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
38c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
39c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#include <utility>  // For ::std::pair.
426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
43535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan// The compiler used in Symbian has a bug that prevents us from declaring the
44535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan// tuple template as a friend (it complains that tuple is redefined).  This
45535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan// hack bypasses the bug by declaring the members that should otherwise be
46535de5338c3a76bc75905694ac15731e3f0bfc8dzhanyong.wan// private as public.
47673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev// Sun Studio versions < 12 also have the above bug.
48673a0cb9079f8f37bd61588a3160e12daf70ec44vladlosev#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
49733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
509644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#else
51733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
529644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
539644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan   private:
549644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#endif
559644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
56357070773163979334f922aea127388de17c26fakosak@google.com// Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that conflict
57357070773163979334f922aea127388de17c26fakosak@google.com// with our own definitions. Therefore using our own tuple does not work on
58357070773163979334f922aea127388de17c26fakosak@google.com// those compilers.
59357070773163979334f922aea127388de17c26fakosak@google.com#if defined(_MSC_VER) && _MSC_VER >= 1600  /* 1600 is Visual Studio 2010 */
60357070773163979334f922aea127388de17c26fakosak@google.com# error "gtest's tuple doesn't compile on Visual Studio 2010 or later. \
61357070773163979334f922aea127388de17c26fakosak@google.comGTEST_USE_OWN_TR1_TUPLE must be set to 0 on those compilers."
62357070773163979334f922aea127388de17c26fakosak@google.com#endif
63357070773163979334f922aea127388de17c26fakosak@google.com
646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// GTEST_n_TUPLE_(T) is the type of an n-tuple.
656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_0_TUPLE_(T) tuple<>
669644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
679644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
689644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
699644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
709644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
719644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
729644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
739644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
749644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
759644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
769644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
779644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
789644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
799644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    void, void, void>
809644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
819644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    T##7, void, void>
826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
839644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan    T##7, T##8, void>
846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    T##7, T##8, T##9>
866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_0_TYPENAMES_(T)
896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_1_TYPENAMES_(T) typename T##0
906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3
946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4
966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4, typename T##5
986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4, typename T##5, typename T##6
1006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
1026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4, typename T##5, typename T##6, \
1046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##7, typename T##8
1056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
1066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##3, typename T##4, typename T##5, typename T##6, \
1076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T##7, typename T##8, typename T##9
1086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// In theory, defining stuff in the ::std namespace is undefined
1106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// behavior.  We can do this as we are playing the role of a standard
1116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// library vendor.
1126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wannamespace std {
1136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wannamespace tr1 {
1146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename T0 = void, typename T1 = void, typename T2 = void,
1166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T3 = void, typename T4 = void, typename T5 = void,
1176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T6 = void, typename T7 = void, typename T8 = void,
1186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    typename T9 = void>
1196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass tuple;
1206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Anything in namespace gtest_internal is Google Test's INTERNAL
1226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
1236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wannamespace gtest_internal {
1246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
1266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename T>
1276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct ByRef { typedef const T& type; };  // NOLINT
1286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename T>
1296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct ByRef<T&> { typedef T& type; };  // NOLINT
1306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// A handy wrapper for ByRef.
1326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
1336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
1356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// is the same as tr1::add_reference<T>::type.
1366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename T>
1376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct AddRef { typedef T& type; };  // NOLINT
1386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename T>
1396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct AddRef<T&> { typedef T& type; };  // NOLINT
1406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// A handy wrapper for AddRef.
1426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
1436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// A helper for implementing get<k>().
1456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int k> class Get;
1466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// A helper for implementing tuple_element<k, T>.  kIndexValid is true
1486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// iff k < the number of fields in tuple type T.
1496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <bool kIndexValid, int kIndex, class Tuple>
1506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct TupleElement;
1516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
15345577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 0, GTEST_10_TUPLE_(T) > {
15493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T0 type;
15593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
15845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 1, GTEST_10_TUPLE_(T) > {
15993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T1 type;
16093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
16345577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 2, GTEST_10_TUPLE_(T) > {
16493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T2 type;
16593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
16845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 3, GTEST_10_TUPLE_(T) > {
16993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T3 type;
17093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
17345577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 4, GTEST_10_TUPLE_(T) > {
17493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T4 type;
17593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
17845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 5, GTEST_10_TUPLE_(T) > {
17993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T5 type;
18093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
18345577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 6, GTEST_10_TUPLE_(T) > {
18493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T6 type;
18593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
18845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 7, GTEST_10_TUPLE_(T) > {
18993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T7 type;
19093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
19345577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 8, GTEST_10_TUPLE_(T) > {
19493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T8 type;
19593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
1966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
19845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct TupleElement<true, 9, GTEST_10_TUPLE_(T) > {
19993fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  typedef T9 type;
20093fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
2016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}  // namespace gtest_internal
2036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
2056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass tuple<> {
2066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
2076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple() {}
2086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& /* t */)  {}
2096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& /* t */) { return *this; }
2106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
2116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_1_TYPENAMES_(T)>
2136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_1_TUPLE_(T) {
2146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
2156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
2166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
217fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_() {}
2186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
2206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_) {}
2226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_1_TYPENAMES_(U)>
2246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
2256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
2276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_1_TYPENAMES_(U)>
2296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
2306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
2316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
2326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2339644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
2349644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
2356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_1_TYPENAMES_(U)>
2366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
2376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
2386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
2396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
2406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
2426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
2436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_2_TYPENAMES_(T)>
2456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_2_TUPLE_(T) {
2466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
2476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
2486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
249fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_() {}
2506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
2526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f1_(f1) {}
2536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
2556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_2_TYPENAMES_(U)>
2576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
2586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <typename U0, typename U1>
2596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
2606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
2626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_2_TYPENAMES_(U)>
2646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
2656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
2666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
2676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <typename U0, typename U1>
2686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const ::std::pair<U0, U1>& p) {
2696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = p.first;
2706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = p.second;
2716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
2726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
2736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2749644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
2759644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
2766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_2_TYPENAMES_(U)>
2776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
2786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
2796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
2806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
2816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
2826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
2846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
2856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
2866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_3_TYPENAMES_(T)>
2886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_3_TUPLE_(T) {
2896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
2906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
2916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
292fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_() {}
2936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
2956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
2966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
2986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
2996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_3_TYPENAMES_(U)>
3006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
3016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
3036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_3_TYPENAMES_(U)>
3056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
3066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
3076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
3086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3099644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
3109644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
3116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_3_TYPENAMES_(U)>
3126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
3136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
3146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
3156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
3166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
3176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
3186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
3206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
3216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
3226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
3236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_4_TYPENAMES_(T)>
3256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_4_TUPLE_(T) {
3266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
3276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
3286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
329fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_() {}
3306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
3326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
3336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(f3) {}
3346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
3366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_4_TYPENAMES_(U)>
3386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
3396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_) {}
3406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
3426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_4_TYPENAMES_(U)>
3446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
3456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
3466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
3476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3489644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
3499644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
3506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_4_TYPENAMES_(U)>
3516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
3526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
3536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
3546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
3556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
3566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
3576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
3586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
3606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
3616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
3626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
3636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
3646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_5_TYPENAMES_(T)>
3666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_5_TUPLE_(T) {
3676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
3686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
3696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
370fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
3716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
3736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
3746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
3756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
3776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_) {}
3786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_5_TYPENAMES_(U)>
3806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
3816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_) {}
3826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
3846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_5_TYPENAMES_(U)>
3866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
3876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
3886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
3896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
3909644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
3919644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
3926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_5_TYPENAMES_(U)>
3936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
3946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
3956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
3966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
3976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
3986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
3996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
4006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
4016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
4036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
4046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
4056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
4066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
4076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
4086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_6_TYPENAMES_(T)>
4106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_6_TUPLE_(T) {
4116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
4126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
4136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
414fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
4156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
4176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
4186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
4196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f5_(f5) {}
4206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
4226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_), f5_(t.f5_) {}
4236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_6_TYPENAMES_(U)>
4256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
4266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
4276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
4296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_6_TYPENAMES_(U)>
4316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
4326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
4336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
4346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4359644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
4369644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
4376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_6_TYPENAMES_(U)>
4386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
4396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
4406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
4416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
4426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
4436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
4446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f5_ = t.f5_;
4456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
4466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
4476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
4496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
4506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
4516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
4526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
4536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T5 f5_;
4546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
4556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_7_TYPENAMES_(T)>
4576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_7_TUPLE_(T) {
4586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
4596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
4606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
461fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
4626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
4646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
4656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
4666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
4676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
4696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
4706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_7_TYPENAMES_(U)>
4726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
4736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
4746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
4766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_7_TYPENAMES_(U)>
4786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
4796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
4806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
4816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4829644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
4839644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
4846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_7_TYPENAMES_(U)>
4856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
4866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
4876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
4886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
4896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
4906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
4916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f5_ = t.f5_;
4926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f6_ = t.f6_;
4936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
4946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
4956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
4966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
4976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
4986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
4996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
5006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
5016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T5 f5_;
5026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T6 f6_;
5036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
5046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_8_TYPENAMES_(T)>
5066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_8_TUPLE_(T) {
5076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
5086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
5096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
510fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
5116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
5136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
5146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
5156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
5166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f5_(f5), f6_(f6), f7_(f7) {}
5176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
5196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
5206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_8_TYPENAMES_(U)>
5226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
5236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
5246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
5266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_8_TYPENAMES_(U)>
5286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
5296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
5306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
5316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5329644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
5339644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
5346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_8_TYPENAMES_(U)>
5356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
5366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
5376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
5386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
5396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
5406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
5416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f5_ = t.f5_;
5426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f6_ = t.f6_;
5436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f7_ = t.f7_;
5446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
5456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
5466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
5486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
5496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
5506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
5516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
5526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T5 f5_;
5536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T6 f6_;
5546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T7 f7_;
5556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
5566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_9_TYPENAMES_(T)>
5586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTEST_9_TUPLE_(T) {
5596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
5606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
5616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
562fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
5636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
5656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
5666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
5676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
5686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
5696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
5716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
5726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_9_TYPENAMES_(U)>
5746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
5756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
5766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
5786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_9_TYPENAMES_(U)>
5806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
5816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
5826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
5836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
5849644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
5859644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
5866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_9_TYPENAMES_(U)>
5876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
5886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
5896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
5906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
5916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
5926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
5936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f5_ = t.f5_;
5946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f6_ = t.f6_;
5956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f7_ = t.f7_;
5966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f8_ = t.f8_;
5976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
5986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
5996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
6016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
6026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
6036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
6046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
6056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T5 f5_;
6066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T6 f6_;
6076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T7 f7_;
6086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T8 f8_;
6096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
6106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
6126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass tuple {
6136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
6146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <int k> friend class gtest_internal::Get;
6156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
616fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
617fbd53a53c1e01dec71c65754cf73282e4759bc40vladlosev      f9_() {}
6186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
6206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
6216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
6226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
6236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
6246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
6266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
6276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_10_TYPENAMES_(U)>
6296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
6306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
6316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      f9_(t.f9_) {}
6326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const tuple& t) { return CopyFrom(t); }
6346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_10_TYPENAMES_(U)>
6366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
6376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return CopyFrom(t);
6386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
6396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6409644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan  GTEST_DECLARE_TUPLE_AS_FRIEND_
6419644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan
6426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <GTEST_10_TYPENAMES_(U)>
6436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
6446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f0_ = t.f0_;
6456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f1_ = t.f1_;
6466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f2_ = t.f2_;
6476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f3_ = t.f3_;
6486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f4_ = t.f4_;
6496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f5_ = t.f5_;
6506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f6_ = t.f6_;
6516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f7_ = t.f7_;
6526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f8_ = t.f8_;
6536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    f9_ = t.f9_;
6546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return *this;
6556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
6566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T0 f0_;
6586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T1 f1_;
6596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T2 f2_;
6606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T3 f3_;
6616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T4 f4_;
6626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T5 f5_;
6636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T6 f6_;
6646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T7 f7_;
6656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T8 f8_;
6666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  T9 f9_;
6676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
6686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// 6.1.3.2 Tuple creation functions.
6706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Known limitations: we don't support passing an
6726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
6736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// implement tie().
6746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline tuple<> make_tuple() { return tuple<>(); }
6766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_1_TYPENAMES_(T)>
6786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
6796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_1_TUPLE_(T)(f0);
6806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
6816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_2_TYPENAMES_(T)>
6836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
6846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_2_TUPLE_(T)(f0, f1);
6856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
6866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_3_TYPENAMES_(T)>
6886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
6896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_3_TUPLE_(T)(f0, f1, f2);
6906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
6916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_4_TYPENAMES_(T)>
6936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
6946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3) {
6956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
6966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
6976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
6986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_5_TYPENAMES_(T)>
6996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4) {
7016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
7026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_6_TYPENAMES_(T)>
7056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4, const T5& f5) {
7076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
7086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_7_TYPENAMES_(T)>
7116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
7136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
7146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_8_TYPENAMES_(T)>
7176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
7196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
7206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_9_TYPENAMES_(T)>
7236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
7256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T8& f8) {
7266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
7276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
7306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
7316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
7326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    const T8& f8, const T9& f9) {
7336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
7346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
7356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// 6.1.3.3 Tuple helper classes.
7376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <typename Tuple> struct tuple_size;
7396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_0_TYPENAMES_(T)>
74145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_0_TUPLE_(T) > {
74293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 0;
74393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_1_TYPENAMES_(T)>
74645577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_1_TUPLE_(T) > {
74793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 1;
74893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_2_TYPENAMES_(T)>
75145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_2_TUPLE_(T) > {
75293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 2;
75393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_3_TYPENAMES_(T)>
75645577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_3_TUPLE_(T) > {
75793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 3;
75893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_4_TYPENAMES_(T)>
76145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_4_TUPLE_(T) > {
76293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 4;
76393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_5_TYPENAMES_(T)>
76645577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_5_TUPLE_(T) > {
76793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 5;
76893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_6_TYPENAMES_(T)>
77145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_6_TUPLE_(T) > {
77293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 6;
77393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_7_TYPENAMES_(T)>
77645577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_7_TUPLE_(T) > {
77793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 7;
77893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_8_TYPENAMES_(T)>
78145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_8_TUPLE_(T) > {
78293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 8;
78393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_9_TYPENAMES_(T)>
78645577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_9_TUPLE_(T) > {
78793fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 9;
78893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T)>
79145577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosevstruct tuple_size<GTEST_10_TUPLE_(T) > {
79293fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  static const int value = 10;
79393fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev};
7946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
7956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int k, class Tuple>
7966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct tuple_element {
7976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  typedef typename gtest_internal::TupleElement<
7986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
7996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
8026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// 6.1.3.4 Element access.
8046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wannamespace gtest_internal {
8066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<0> {
8096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
8126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f0_; }  // NOLINT
8136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
8166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f0_; }
8176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<1> {
8216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
8246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f1_; }  // NOLINT
8256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
8286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f1_; }
8296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<2> {
8336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
8366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f2_; }  // NOLINT
8376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
8406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f2_; }
8416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<3> {
8456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
8486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f3_; }  // NOLINT
8496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
8526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f3_; }
8536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<4> {
8576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
8606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f4_; }  // NOLINT
8616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
8646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f4_; }
8656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<5> {
8696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
8726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f5_; }  // NOLINT
8736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
8766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f5_; }
8776d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8786d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<6> {
8816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
8846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f6_; }  // NOLINT
8856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
8886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f6_; }
8896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
8906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
8926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<7> {
8936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
8946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
8966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f7_; }  // NOLINT
8976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
8986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
8996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
9006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f7_; }
9016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
9026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
9046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<8> {
9056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
9066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
9076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
9086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f8_; }  // NOLINT
9096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
9116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
9126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f8_; }
9136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
9146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9156d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
9166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass Get<9> {
9176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan public:
9186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
9196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
9206d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  Field(Tuple& t) { return t.f9_; }  // NOLINT
9216d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9226d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple>
9236d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
9246d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  ConstField(const Tuple& t) { return t.f9_; }
9256d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
9266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9276d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}  // namespace gtest_internal
9286d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9296d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int k, GTEST_10_TYPENAMES_(T)>
9306d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
9316d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanget(GTEST_10_TUPLE_(T)& t) {
9326d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return gtest_internal::Get<k>::Field(t);
9336d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
9346d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9356d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int k, GTEST_10_TYPENAMES_(T)>
9366d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
9376d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanget(const GTEST_10_TUPLE_(T)& t) {
9386d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return gtest_internal::Get<k>::ConstField(t);
9396d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
9406d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9416d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// 6.1.3.5 Relational operators
9426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9436d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// We only implement == and !=, as we don't have a need for the rest yet.
9446d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9456d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wannamespace gtest_internal {
9466d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9476d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
9486d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// first k fields of t1 equals the first k fields of t2.
9496d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
9506d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// k1 != k2.
9516d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int kSize1, int kSize2>
9526d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct SameSizeTuplePrefixComparator;
9536d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9546d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <>
9556d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct SameSizeTuplePrefixComparator<0, 0> {
9566d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple1, class Tuple2>
9576d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
9586d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return true;
9596d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
9606d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
9616d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9626d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <int k>
9636d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanstruct SameSizeTuplePrefixComparator<k, k> {
9646d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  template <class Tuple1, class Tuple2>
9656d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
9666d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
9676d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
9686d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  }
9696d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan};
9706d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9716d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}  // namespace gtest_internal
9726d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9736d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
9746d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline bool operator==(const GTEST_10_TUPLE_(T)& t,
9756d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan                       const GTEST_10_TUPLE_(U)& u) {
9766d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan  return gtest_internal::SameSizeTuplePrefixComparator<
97745577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosev      tuple_size<GTEST_10_TUPLE_(T) >::value,
97845577eac2c9317f5a8adfe7a9d37f62f45832b96vladlosev      tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u);
9796d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}
9806d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9816d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wantemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
9826d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.waninline bool operator!=(const GTEST_10_TUPLE_(T)& t,
9836d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
9846d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9856d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// 6.1.4 Pairs.
9866d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan// Unimplemented.
9876d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9886d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}  // namespace tr1
9896d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan}  // namespace std
9906d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
9916d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_0_TUPLE_
9926d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_1_TUPLE_
9936d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_2_TUPLE_
9946d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_3_TUPLE_
9956d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_4_TUPLE_
9966d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_5_TUPLE_
9976d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_6_TUPLE_
9986d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_7_TUPLE_
9996d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_8_TUPLE_
10006d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_9_TUPLE_
10016d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_10_TUPLE_
10026d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
10036d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_0_TYPENAMES_
10046d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_1_TYPENAMES_
10056d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_2_TYPENAMES_
10066d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_3_TYPENAMES_
10076d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_4_TYPENAMES_
10086d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_5_TYPENAMES_
10096d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_6_TYPENAMES_
10106d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_7_TYPENAMES_
10116d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_8_TYPENAMES_
10126d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_9_TYPENAMES_
10136d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_10_TYPENAMES_
10146d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
10159644db857432db95bc64f5d6db5867b1c7cf1679zhanyong.wan#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
10166d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_BY_REF_
10176d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_ADD_REF_
10186d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan#undef GTEST_TUPLE_ELEMENT_
10196d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wan
1020c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
1021