diff --git a/include/wx/defs.h b/include/wx/defs.h index 24ec7619bb..2c8e1c5a12 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -472,6 +472,18 @@ typedef short int WXTYPE; #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 */ /* ---------------------------------------------------------------------------- */ diff --git a/include/wx/weakref.h b/include/wx/weakref.h index 9ae506798b..d72ab4ccbc 100644 --- a/include/wx/weakref.h +++ b/include/wx/weakref.h @@ -74,8 +74,13 @@ protected: 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 struct wxWeakRefImpl; @@ -169,17 +174,18 @@ protected: 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 wxWeakRef : public -#ifdef HAVE_PARTIAL_SPECIALIZATION - wxWeakRefImpl::value> -#else +#ifdef USE_STATIC_WEAKREF wxWeakRefStatic +#else + wxWeakRefImpl::value> #endif { public: