From e6095deec89dcf5237948b3460d84a137622f16c Mon Sep 17 00:00:00 2001 From: "zhanyong.wan" Date: Wed, 24 Jun 2009 23:02:50 +0000 Subject: Makes gtest's tuple implementation work with Symbian 5th edition by bypassing 2 compiler bugs (by Zhanyong Wan); refactors for the event listener API (by Vlad Losev). --- include/gtest/internal/gtest-tuple.h | 79 +++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 29 deletions(-) (limited to 'include/gtest/internal/gtest-tuple.h') diff --git a/include/gtest/internal/gtest-tuple.h b/include/gtest/internal/gtest-tuple.h index be23e8eb..5ef49203 100644 --- a/include/gtest/internal/gtest-tuple.h +++ b/include/gtest/internal/gtest-tuple.h @@ -38,18 +38,38 @@ #include // For ::std::pair. +// The compiler used in Symbian 5th Edition (__S60_50__) has a bug +// that prevents us from declaring the tuple template as a friend (it +// complains that tuple is redefined). This hack bypasses the bug by +// declaring the members that should otherwise be private as public. +#if defined(__SYMBIAN32__) && __S60_50__ +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: +#else +#define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ + template friend class tuple; \ + private: +#endif + // GTEST_n_TUPLE_(T) is the type of an n-tuple. #define GTEST_0_TUPLE_(T) tuple<> -#define GTEST_1_TUPLE_(T) tuple -#define GTEST_2_TUPLE_(T) tuple -#define GTEST_3_TUPLE_(T) tuple -#define GTEST_4_TUPLE_(T) tuple -#define GTEST_5_TUPLE_(T) tuple -#define GTEST_6_TUPLE_(T) tuple -#define GTEST_7_TUPLE_(T) tuple -#define GTEST_8_TUPLE_(T) tuple +#define GTEST_1_TUPLE_(T) tuple +#define GTEST_2_TUPLE_(T) tuple +#define GTEST_3_TUPLE_(T) tuple +#define GTEST_4_TUPLE_(T) tuple +#define GTEST_5_TUPLE_(T) tuple +#define GTEST_6_TUPLE_(T) tuple +#define GTEST_7_TUPLE_(T) tuple +#define GTEST_8_TUPLE_(T) tuple #define GTEST_9_TUPLE_(T) tuple + T##7, T##8, void> #define GTEST_10_TUPLE_(T) tuple @@ -162,7 +182,6 @@ template class GTEST_1_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -180,7 +199,8 @@ class GTEST_1_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { f0_ = t.f0_; @@ -194,7 +214,6 @@ template class GTEST_2_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -221,7 +240,8 @@ class GTEST_2_TUPLE_(T) { return *this; } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { f0_ = t.f0_; @@ -237,7 +257,6 @@ template class GTEST_3_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -256,7 +275,8 @@ class GTEST_3_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { f0_ = t.f0_; @@ -274,7 +294,6 @@ template class GTEST_4_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -295,7 +314,8 @@ class GTEST_4_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { f0_ = t.f0_; @@ -315,7 +335,6 @@ template class GTEST_5_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -337,7 +356,8 @@ class GTEST_5_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { f0_ = t.f0_; @@ -359,7 +379,6 @@ template class GTEST_6_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -382,7 +401,8 @@ class GTEST_6_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { f0_ = t.f0_; @@ -406,7 +426,6 @@ template class GTEST_7_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -429,7 +448,8 @@ class GTEST_7_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { f0_ = t.f0_; @@ -455,7 +475,6 @@ template class GTEST_8_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -479,7 +498,8 @@ class GTEST_8_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { f0_ = t.f0_; @@ -507,7 +527,6 @@ template class GTEST_9_TUPLE_(T) { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -531,7 +550,8 @@ class GTEST_9_TUPLE_(T) { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { f0_ = t.f0_; @@ -561,7 +581,6 @@ template class tuple { public: template friend class gtest_internal::Get; - template friend class tuple; tuple() {} @@ -586,7 +605,8 @@ class tuple { return CopyFrom(t); } - private: + GTEST_DECLARE_TUPLE_AS_FRIEND_ + template tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { f0_ = t.f0_; @@ -938,6 +958,7 @@ inline bool operator!=(const GTEST_10_TUPLE_(T)& t, #undef GTEST_9_TYPENAMES_ #undef GTEST_10_TYPENAMES_ +#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ #undef GTEST_BY_REF_ #undef GTEST_ADD_REF_ #undef GTEST_TUPLE_ELEMENT_ -- cgit v1.2.3