Fixes XL C++ 10.1 compiler errors (based on patch by Hady Zalek); cleans up formatting of GTEST_NO_INLINE_.

This commit is contained in:
zhanyong.wan 2011-04-15 19:50:39 +00:00
parent c006f8c12b
commit c91a353c47
2 changed files with 20 additions and 14 deletions

View File

@ -195,22 +195,31 @@ class GTEST_API_ ScopedTrace {
template <typename T>
String StreamableToString(const T& streamable);
// The Symbian compiler has a bug that prevents it from selecting the
// correct overload of FormatForComparisonFailureMessage (see below)
// unless we pass the first argument by reference. If we do that,
// however, Visual Age C++ 10.1 generates a compiler error. Therefore
// we only apply the work-around for Symbian.
#if defined(__SYMBIAN32__)
# define GTEST_CREF_WORKAROUND_ const&
#else
# define GTEST_CREF_WORKAROUND_
#endif
// When this operand is a const char* or char*, if the other operand
// is a ::std::string or ::string, we print this operand as a C string
// rather than a pointer (we do the same for wide strings); otherwise
// we print it as a pointer to be safe.
// This internal macro is used to avoid duplicated code.
// Making the first operand const reference works around a bug in the
// Symbian compiler which is unable to select the correct specialization of
// FormatForComparisonFailureMessage.
#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
inline String FormatForComparisonFailureMessage(\
operand2_type::value_type* const& str, const operand2_type& /*operand2*/) {\
operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
const operand2_type& /*operand2*/) {\
return operand1_printer(str);\
}\
inline String FormatForComparisonFailureMessage(\
const operand2_type::value_type* const& str, \
const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
const operand2_type& /*operand2*/) {\
return operand1_printer(str);\
}
@ -233,13 +242,10 @@ GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
// printed is a char/wchar_t pointer and the other operand is not a
// string/wstring object. In such cases, we just print the operand as
// a pointer to be safe.
//
// Making the first operand const reference works around a bug in the
// Symbian compiler which is unable to select the correct specialization of
// FormatForComparisonFailureMessage.
#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType) \
template <typename T> \
String FormatForComparisonFailureMessage(CharType* const& p, const T&) { \
String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
const T&) { \
return PrintToString(static_cast<const void*>(p)); \
}

View File

@ -662,12 +662,12 @@
# define GTEST_API_
#endif
#if defined(__GNUC__)
#ifdef __GNUC__
// Ask the compiler to never inline a given function.
#define GTEST_NO_INLINE_ __attribute__((noinline))
# define GTEST_NO_INLINE_ __attribute__((noinline))
#else
#define GTEST_NO_INLINE_
#endif // __GNUC__
# define GTEST_NO_INLINE_
#endif
namespace testing {