]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/meta/implicitconversion.h
props
[wxWidgets.git] / include / wx / meta / implicitconversion.h
index 8e65fbcc12fca223db9805ccc3065a0f14d34a37..b93a919aac804cdf247b01fd8252679856e1a95e 100644 (file)
 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);
@@ -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