diff options
author | shiqian <shiqian@8415998a-534a-0410-bf83-d39667b30386> | 2008-12-11 17:22:59 +0000 |
---|---|---|
committer | shiqian <shiqian@8415998a-534a-0410-bf83-d39667b30386> | 2008-12-11 17:22:59 +0000 |
commit | c97f2f560bc6893b0b535b4312a161917c07854b (patch) | |
tree | 7ce807b758d878835a84b8ca280ec53b0ab6211e | |
parent | c50af1ab55b4067d919c1a83a5093000e7cf5e57 (diff) | |
download | googletest-c97f2f560bc6893b0b535b4312a161917c07854b.tar.gz googletest-c97f2f560bc6893b0b535b4312a161917c07854b.tar.bz2 googletest-c97f2f560bc6893b0b535b4312a161917c07854b.zip |
Fixes compatibility with gcc 4.3's tuple implementation.
-rw-r--r-- | include/gmock/gmock-printers.h | 82 | ||||
-rw-r--r-- | test/gmock-printers_test.cc | 23 |
2 files changed, 97 insertions, 8 deletions
diff --git a/include/gmock/gmock-printers.h b/include/gmock/gmock-printers.h index 628fc744..eae6e52d 100644 --- a/include/gmock/gmock-printers.h +++ b/include/gmock/gmock-printers.h @@ -365,19 +365,85 @@ struct TuplePrefixPrinter<1> { } }; -// We support tuples of up-to 10 fields. Note that an N-tuple type is -// just an (N + 1)-tuple type where the last field has a special, -// unused type. +// 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 << ")"; +} + +// Overloaded PrintTo() for tuples of various arities. We support +// tuples of up-to 10 fields. The following implementation works +// regardless of whether tr1::tuple is implemented using the +// non-standard variadic template feature or not. + +inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1> +void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2> +void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4, typename T5> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4, typename T5, + typename T6> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4, typename T5, + typename T6, typename T7> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4, typename T5, + typename T6, typename T7, typename T8> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + +template <typename T1, typename T2, typename T3, typename T4, typename T5, + typename T6, typename T7, typename T8, typename T9> +void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, + ::std::ostream* os) { + PrintTupleTo(t, os); +} + template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> void PrintTo( const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t, ::std::ostream* os) { - typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Tuple; - *os << "("; - TuplePrefixPrinter< ::std::tr1::tuple_size<Tuple>::value>:: - PrintPrefixTo(t, os); - *os << ")"; + PrintTupleTo(t, os); } // Overload for std::pair. diff --git a/test/gmock-printers_test.cc b/test/gmock-printers_test.cc index 7457af2b..9677491a 100644 --- a/test/gmock-printers_test.cc +++ b/test/gmock-printers_test.cc @@ -754,6 +754,29 @@ TEST(PrintTupleTest, VariousSizes) { tuple<char, bool> t2('a', true); EXPECT_EQ("('a' (97), true)", Print(t2)); + tuple<bool, int, int> t3(false, 2, 3); + EXPECT_EQ("(false, 2, 3)", Print(t3)); + + tuple<bool, int, int, int> t4(false, 2, 3, 4); + EXPECT_EQ("(false, 2, 3, 4)", Print(t4)); + + tuple<bool, int, int, int, bool> t5(false, 2, 3, 4, true); + EXPECT_EQ("(false, 2, 3, 4, true)", Print(t5)); + + tuple<bool, int, int, int, bool, int> t6(false, 2, 3, 4, true, 6); + EXPECT_EQ("(false, 2, 3, 4, true, 6)", Print(t6)); + + tuple<bool, int, int, int, bool, int, int> t7(false, 2, 3, 4, true, 6, 7); + EXPECT_EQ("(false, 2, 3, 4, true, 6, 7)", Print(t7)); + + tuple<bool, int, int, int, bool, int, int, bool> t8( + false, 2, 3, 4, true, 6, 7, true); + EXPECT_EQ("(false, 2, 3, 4, true, 6, 7, true)", Print(t8)); + + tuple<bool, int, int, int, bool, int, int, bool, int> t9( + false, 2, 3, 4, true, 6, 7, true, 9); + EXPECT_EQ("(false, 2, 3, 4, true, 6, 7, true, 9)", Print(t9)); + const char* const str = "8"; tuple<bool, char, short, testing::internal::Int32, // NOLINT testing::internal::Int64, float, double, const char*, void*, string> |