#endif
#endif // __VISUALC__
+
+#ifndef HAVE_TEMPLATE_OVERLOAD_RESOLUTION
+ // assume the compiler can use type or const expressions as template
+ // arguments if it supports partial specialization -- except if it's a
+ // Borland one which can't
+ #ifdef HAVE_PARTIAL_SPECIALIZATION && !defined(__BORLANDC__)
+ #define HAVE_TEMPLATE_OVERLOAD_RESOLUTION
+ #endif
+#endif // __BORLANDC__
+
+#endif // !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION)
+
/* ---------------------------------------------------------------------------- */
/* portable calling conventions macros */
/* ---------------------------------------------------------------------------- */
T *m_pobj;
};
-#ifdef HAVE_PARTIAL_SPECIALIZATION
+#if !defined(HAVE_PARTIAL_SPECIALIZATION) || !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION)
+ #define USE_STATIC_WEAKREF
+#endif
+
+
+#ifndef USE_STATIC_WEAKREF
template<class T,bool use_static>
struct wxWeakRefImpl;
wxTrackable *m_ptbase;
};
-#endif // HAVE_PARTIAL_SPECIALIZATION
+#endif // #ifndef USE_STATIC_WEAKREF
+
// A weak reference to an object of type T, where T has type wxTrackable
// (usually statically but if not dynamic_cast<> is tried).
template <class T>
class wxWeakRef : public
-#ifdef HAVE_PARTIAL_SPECIALIZATION
- wxWeakRefImpl<T, wxIsStaticTrackable<T>::value>
-#else
+#ifdef USE_STATIC_WEAKREF
wxWeakRefStatic<T>
+#else
+ wxWeakRefImpl<T, wxIsStaticTrackable<T>::value>
#endif
{
public: