Fix build with Borland C++ compiler.

Disable some parts of the code that this compiler had problems with. Add
parentheses to work around its bugs elsewhere.

Closes #12558.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66054 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-07 13:16:20 +00:00
parent 0ce0f1e9eb
commit 258593354e
13 changed files with 121 additions and 31 deletions

View File

@@ -30,18 +30,28 @@
namespace wxPrivate
{
// Helper macro to define a constant inside a template class: it's needed
// because MSVC6 doesn't support initializing static integer members but the
// usual workaround of using enums instead doesn't work for Borland (at least
// in template classes).
#ifdef __VISUALC6__
#define wxDEFINE_CLASS_INT_CONST(name, value) enum { name = value }
#else
#define wxDEFINE_CLASS_INT_CONST(name, value) static const int name = value
#endif
template<typename T>
struct TypeHierarchy
{
// consider unknown types (e.g. objects, pointers) to be of highest
// level, always convert to them if they occur
enum { level = 9999 };
wxDEFINE_CLASS_INT_CONST( level, 9999 );
};
#define WX_TYPE_HIERARCHY_LEVEL(level_num, type) \
template<> struct TypeHierarchy<type> \
{ \
enum { level = level_num }; \
wxDEFINE_CLASS_INT_CONST( level, level_num ); \
}
WX_TYPE_HIERARCHY_LEVEL( 1, char);
@@ -84,7 +94,7 @@ struct wxImplicitConversionType
typedef typename wxIf
<
// if T2 is "higher" type, convert to it
(int)wxPrivate::TypeHierarchy<T1>::level < (int)wxPrivate::TypeHierarchy<T2>::level,
(int)(wxPrivate::TypeHierarchy<T1>::level) < (int)(wxPrivate::TypeHierarchy<T2>::level),
T2,
// otherwise use T1
T1