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);
WX_TYPE_HIERARCHY_LEVEL( 2, unsigned char);
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