]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/scopeguard.h
build fixes
[wxWidgets.git] / include / wx / scopeguard.h
index b8152964a0b3f2a919a05972e6a6f656f2a27015..f1f5a8204c4c7e9406468a57a844625c9a79caf0 100644 (file)
 
 #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_