]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/scopeguard.h
supporting clang memory management annotations
[wxWidgets.git] / include / wx / scopeguard.h
index da056e08db59b526b4637f69a7289b014164ead2..434c89768d58d4ed29d12fe1476e3c15b9630d9e 100644 (file)
 
 #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<T> wxMakeVarNuller(T& var)
     return wxPrivate::VariableNullerImpl<T>(var);
 }
 
-#endif // wxHAS_NAMESPACES
-
 // ============================================================================
 // macros for declaring unnamed scoped guards (which can't be dismissed)
 // ============================================================================