| 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".
|
|
|