X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/822fc19ef0224d2a257bf01de60a5f5b8506b857..c058cafa56179e79df02ad370bdeafd725ff2478:/include/wx/scopeguard.h diff --git a/include/wx/scopeguard.h b/include/wx/scopeguard.h index b8152964a0..f1f5a8204c 100644 --- a/include/wx/scopeguard.h +++ b/include/wx/scopeguard.h @@ -51,8 +51,14 @@ #else +#if !defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 95) +// namespace support was first implemented in gcc-2.95, +// so avoid using it for older versions. 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 @@ -75,7 +81,9 @@ 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) @@ -95,6 +103,12 @@ class wxScopeGuardImplBase public: wxScopeGuardImplBase() : m_wasDismissed(false) { } + wxScopeGuardImplBase(const wxScopeGuardImplBase& other) + : m_wasDismissed(other.m_wasDismissed) + { + other.Dismiss(); + } + void Dismiss() const { m_wasDismissed = true; } // for OnScopeExit() only (we can't make it friend, unfortunately)! @@ -103,12 +117,6 @@ public: protected: ~wxScopeGuardImplBase() { } - wxScopeGuardImplBase(const wxScopeGuardImplBase& other) - : m_wasDismissed(other.m_wasDismissed) - { - other.Dismiss(); - } - // must be mutable for copy ctor to work mutable bool m_wasDismissed; @@ -336,7 +344,7 @@ typedef const wxScopeGuardImplBase& wxScopeGuard; wxScopeGuard n = wxMakeObjGuard(o, m); \ wxPrivateUse(n) #define wxON_BLOCK_EXIT_OBJ0(o, m) \ - wxON_BLOCK_EXIT_OBJ0_IMPL(wxGuardName, o, m) + wxON_BLOCK_EXIT_OBJ0_IMPL(wxGuardName, o, &m) #define wxON_BLOCK_EXIT1_IMPL(n, f, p1) \ wxScopeGuard n = wxMakeGuard(f, p1); \ @@ -348,7 +356,7 @@ typedef const wxScopeGuardImplBase& wxScopeGuard; wxScopeGuard n = wxMakeObjGuard(o, m, p1); \ wxPrivateUse(n) #define wxON_BLOCK_EXIT_OBJ1(o, m, p1) \ - wxON_BLOCK_EXIT_OBJ1_IMPL(wxGuardName, o, m, p1) + wxON_BLOCK_EXIT_OBJ1_IMPL(wxGuardName, o, &m, p1) #define wxON_BLOCK_EXIT2_IMPL(n, f, p1, p2) \ wxScopeGuard n = wxMakeGuard(f, p1, p2); \ @@ -360,6 +368,6 @@ typedef const wxScopeGuardImplBase& wxScopeGuard; wxScopeGuard n = wxMakeObjGuard(o, m, p1, p2); \ wxPrivateUse(n) #define wxON_BLOCK_EXIT_OBJ2(o, m, p1, p2) \ - wxON_BLOCK_EXIT_OBJ2_IMPL(wxGuardName, o, m, p1, p2) + wxON_BLOCK_EXIT_OBJ2_IMPL(wxGuardName, o, &m, p1, p2) #endif // _WX_SCOPEGUARD_H_