// Author: Vadim Zeitlin
// Modified by:
// Created: 17.09.2003
-// RCS-ID: $Id$
// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_EXCEPT_H_
// macros working whether wxUSE_EXCEPTIONS is 0 or 1
// ----------------------------------------------------------------------------
-#if wxUSE_EXCEPTIONS
- #define wxTRY try
- #define wxCATCH_ALL(code) catch ( ... ) { code }
-#else // !wxUSE_EXCEPTIONS
+// even if the library itself was compiled with exceptions support, the user
+// code using it might be compiling with a compiler switch disabling them in
+// which cases we shouldn't use try/catch in the headers -- this results in
+// compilation errors in e.g. wx/scopeguard.h with at least g++ 4
+#if !wxUSE_EXCEPTIONS || \
+ (defined(__GNUG__) && !defined(__EXCEPTIONS))
+ #ifndef wxNO_EXCEPTIONS
+ #define wxNO_EXCEPTIONS
+ #endif
+#endif
+
+#ifdef wxNO_EXCEPTIONS
#define wxTRY
#define wxCATCH_ALL(code)
-#endif // wxUSE_EXCEPTIONS/!wxUSE_EXCEPTIONS
+#else // do use exceptions
+ #define wxTRY try
+ #define wxCATCH_ALL(code) catch ( ... ) { code }
+#endif // wxNO_EXCEPTIONS/!wxNO_EXCEPTIONS
#endif // _WX_EXCEPT_H_