fix wxWeakRef<> for Borland C++ (slightly modified patch 1902415)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52155 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-02-27 18:12:29 +00:00
parent 3dce337969
commit 7005cf4407
2 changed files with 23 additions and 5 deletions

View File

@@ -472,6 +472,18 @@ typedef short int WXTYPE;
#endif #endif
#endif // __VISUALC__ #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 */ /* portable calling conventions macros */
/* ---------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------- */

View File

@@ -74,8 +74,13 @@ protected:
T *m_pobj; 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> template<class T,bool use_static>
struct wxWeakRefImpl; struct wxWeakRefImpl;
@@ -169,17 +174,18 @@ protected:
wxTrackable *m_ptbase; 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 // A weak reference to an object of type T, where T has type wxTrackable
// (usually statically but if not dynamic_cast<> is tried). // (usually statically but if not dynamic_cast<> is tried).
template <class T> template <class T>
class wxWeakRef : public class wxWeakRef : public
#ifdef HAVE_PARTIAL_SPECIALIZATION #ifdef USE_STATIC_WEAKREF
wxWeakRefImpl<T, wxIsStaticTrackable<T>::value>
#else
wxWeakRefStatic<T> wxWeakRefStatic<T>
#else
wxWeakRefImpl<T, wxIsStaticTrackable<T>::value>
#endif #endif
{ {
public: public: