Index: testing/gmock/include/gmock/gmock-printers.h |
diff --git a/testing/gmock/include/gmock/gmock-printers.h b/testing/gmock/include/gmock/gmock-printers.h |
index e07d92af7943f9a61fb971f1cc7121b0c4f34636..cda3545ac75aac26089895b62512952eb4bb5975 100644 |
--- a/testing/gmock/include/gmock/gmock-printers.h |
+++ b/testing/gmock/include/gmock/gmock-printers.h |
@@ -409,12 +409,10 @@ inline void PrintTo(const ::string& s, ::std::ostream* os) { |
} |
#endif // GTEST_HAS_GLOBAL_STRING |
-#if GTEST_HAS_STD_STRING |
void PrintStringTo(const ::std::string&s, ::std::ostream* os); |
inline void PrintTo(const ::std::string& s, ::std::ostream* os) { |
PrintStringTo(s, os); |
} |
-#endif // GTEST_HAS_STD_STRING |
// Overloads for ::wstring and ::std::wstring. |
#if GTEST_HAS_GLOBAL_WSTRING |
@@ -434,63 +432,10 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { |
// Overload for ::std::tr1::tuple. Needed for printing function |
// arguments, which are packed as tuples. |
-typedef ::std::vector<string> Strings; |
- |
-// This helper template allows PrintTo() for tuples and |
-// UniversalTersePrintTupleFieldsToStrings() to be defined by |
-// induction on the number of tuple fields. The idea is that |
-// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N |
-// fields in tuple t, and can be defined in terms of |
-// TuplePrefixPrinter<N - 1>. |
- |
-// The inductive case. |
-template <size_t N> |
-struct TuplePrefixPrinter { |
- // Prints the first N fields of a tuple. |
- template <typename Tuple> |
- static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { |
- TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os); |
- *os << ", "; |
- UniversalPrinter<typename ::std::tr1::tuple_element<N - 1, Tuple>::type> |
- ::Print(::std::tr1::get<N - 1>(t), os); |
- } |
- |
- // Tersely prints the first N fields of a tuple to a string vector, |
- // one element for each field. |
- template <typename Tuple> |
- static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { |
- TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings); |
- ::std::stringstream ss; |
- UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss); |
- strings->push_back(ss.str()); |
- } |
-}; |
- |
-// Base cases. |
-template <> |
-struct TuplePrefixPrinter<0> { |
- template <typename Tuple> |
- static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} |
- |
- template <typename Tuple> |
- static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} |
-}; |
-template <> |
-template <typename Tuple> |
-void TuplePrefixPrinter<1>::PrintPrefixTo(const Tuple& t, ::std::ostream* os) { |
- UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>:: |
- Print(::std::tr1::get<0>(t), os); |
-} |
- |
// Helper function for printing a tuple. T must be instantiated with |
// a tuple type. |
template <typename T> |
-void PrintTupleTo(const T& t, ::std::ostream* os) { |
- *os << "("; |
- TuplePrefixPrinter< ::std::tr1::tuple_size<T>::value>:: |
- PrintPrefixTo(t, os); |
- *os << ")"; |
-} |
+void PrintTupleTo(const T& t, ::std::ostream* os); |
// Overloaded PrintTo() for tuples of various arities. We support |
// tuples of up-to 10 fields. The following implementation works |
@@ -725,6 +670,64 @@ void UniversalPrint(const T& value, ::std::ostream* os) { |
UniversalPrinter<T>::Print(value, os); |
} |
+typedef ::std::vector<string> Strings; |
+ |
+// This helper template allows PrintTo() for tuples and |
+// UniversalTersePrintTupleFieldsToStrings() to be defined by |
+// induction on the number of tuple fields. The idea is that |
+// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N |
+// fields in tuple t, and can be defined in terms of |
+// TuplePrefixPrinter<N - 1>. |
+ |
+// The inductive case. |
+template <size_t N> |
+struct TuplePrefixPrinter { |
+ // Prints the first N fields of a tuple. |
+ template <typename Tuple> |
+ static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { |
+ TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os); |
+ *os << ", "; |
+ UniversalPrinter<typename ::std::tr1::tuple_element<N - 1, Tuple>::type> |
+ ::Print(::std::tr1::get<N - 1>(t), os); |
+ } |
+ |
+ // Tersely prints the first N fields of a tuple to a string vector, |
+ // one element for each field. |
+ template <typename Tuple> |
+ static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { |
+ TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings); |
+ ::std::stringstream ss; |
+ UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss); |
+ strings->push_back(ss.str()); |
+ } |
+}; |
+ |
+// Base cases. |
+template <> |
+struct TuplePrefixPrinter<0> { |
+ template <typename Tuple> |
+ static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} |
+ |
+ template <typename Tuple> |
+ static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} |
+}; |
+template <> |
+template <typename Tuple> |
+void TuplePrefixPrinter<1>::PrintPrefixTo(const Tuple& t, ::std::ostream* os) { |
+ UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>:: |
+ Print(::std::tr1::get<0>(t), os); |
+} |
+ |
+// Helper function for printing a tuple. T must be instantiated with |
+// a tuple type. |
+template <typename T> |
+void PrintTupleTo(const T& t, ::std::ostream* os) { |
+ *os << "("; |
+ TuplePrefixPrinter< ::std::tr1::tuple_size<T>::value>:: |
+ PrintPrefixTo(t, os); |
+ *os << ")"; |
+} |
+ |
// Prints the fields of a tuple tersely to a string vector, one |
// element for each field. See the comment before |
// UniversalTersePrint() for how we define "tersely". |