?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

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