X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a52475807e0521097764e5fe4cc738d80f13baad..ca77701441e39245dcbfce903049e76f166979e5:/include/wx/meta/implicitconversion.h diff --git a/include/wx/meta/implicitconversion.h b/include/wx/meta/implicitconversion.h index 8e65fbcc12..b93a919aac 100644 --- a/include/wx/meta/implicitconversion.h +++ b/include/wx/meta/implicitconversion.h @@ -30,19 +30,29 @@ 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 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 \ { \ - enum { level = level_num }; \ - }; + wxDEFINE_CLASS_INT_CONST( level, level_num ); \ + } WX_TYPE_HIERARCHY_LEVEL( 1, char); WX_TYPE_HIERARCHY_LEVEL( 2, unsigned char); @@ -84,7 +94,7 @@ struct wxImplicitConversionType typedef typename wxIf < // if T2 is "higher" type, convert to it - (int)wxPrivate::TypeHierarchy::level < (int)wxPrivate::TypeHierarchy::level, + (int)(wxPrivate::TypeHierarchy::level) < (int)(wxPrivate::TypeHierarchy::level), T2, // otherwise use T1 T1