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:
parent
c006f8c12b
commit
c91a353c47
|
@ -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)); \
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user