X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/530646ca27604e0c24a78d0eebd4cf7301b27bc5..7344108e8a129a3f9b4df5ab0f98a1713db03b89:/include/wx/meta/implicitconversion.h?ds=sidebyside diff --git a/include/wx/meta/implicitconversion.h b/include/wx/meta/implicitconversion.h index 16ff312e4c..b93a919aac 100644 --- a/include/wx/meta/implicitconversion.h +++ b/include/wx/meta/implicitconversion.h @@ -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 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); @@ -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