X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e196e5232a510ad2c78edd21bc9df762a144c38a..7344108e8a129a3f9b4df5ab0f98a1713db03b89:/include/wx/scopeguard.h diff --git a/include/wx/scopeguard.h b/include/wx/scopeguard.h index da056e08db..434c89768d 100644 --- a/include/wx/scopeguard.h +++ b/include/wx/scopeguard.h @@ -51,17 +51,8 @@ #else -// namespace support was first implemented in gcc-2.95, -// so avoid using it for older versions. -#if !defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 95) - -#define wxHAS_NAMESPACES - namespace wxPrivate { -#else -#define wxPrivate -#endif // in the original implementation this was a member template function of // ScopeGuardImplBase but gcc 2.8 which is still used for OS/2 doesn't // support member templates and so we must make it global @@ -84,9 +75,7 @@ namespace wxPrivate void Use(const T& WXUNUSED(t)) { } -#if !defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 95) } // namespace wxPrivate -#endif #define wxPrivateOnScopeExit(n) wxPrivate::OnScopeExit(n) #define wxPrivateUse(n) wxPrivate::Use(n) @@ -397,13 +386,11 @@ wxMakeObjGuard(Obj& obj, MemFun memFun, P1 p1, P2 p2, P3 p3) // setting a variable to some value on block exit // ---------------------------------------------------------------------------- -#ifdef wxHAS_NAMESPACES - namespace wxPrivate { // empty class just to be able to define a reference to it -class VariableSetterBase { }; +class VariableSetterBase : public wxScopeGuardImplBase { }; typedef const VariableSetterBase& VariableSetter; @@ -417,10 +404,9 @@ public: { } - ~VariableSetterImpl() - { - m_var = m_value; - } + ~VariableSetterImpl() { wxPrivateOnScopeExit(*this); } + + void Execute() { m_var = m_value; } private: T& m_var; @@ -439,10 +425,9 @@ public: { } - ~VariableNullerImpl() - { - m_var = NULL; - } + ~VariableNullerImpl() { wxPrivateOnScopeExit(*this); } + + void Execute() { m_var = NULL; } private: T& m_var; @@ -469,8 +454,6 @@ wxPrivate::VariableNullerImpl wxMakeVarNuller(T& var) return wxPrivate::VariableNullerImpl(var); } -#endif // wxHAS_NAMESPACES - // ============================================================================ // macros for declaring unnamed scoped guards (which can't be dismissed) // ============================================================================