summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qcompilerdetection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/global/qcompilerdetection.h')
-rw-r--r--src/corelib/global/qcompilerdetection.h14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 64aae8acb2..be167f2a2a 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -110,9 +110,9 @@
# define Q_COMPILER_VARIADIC_MACROS
# endif
-// make sure that these aren't defined when Q_COMPILER_NOEXCEPT is defined
-# define Q_DECL_NOEXCEPT throw()
-# define Q_DECL_NOEXCEPT_EXPR(x)
+/* only defined for MSVC since that's the only compiler that actually optimizes for this */
+/* might get overridden further down when Q_COMPILER_NOEXCEPT is detected */
+# define Q_DECL_NOTHROW throw()
#elif defined(__BORLANDC__) || defined(__TURBOC__)
# define Q_CC_BOR
@@ -717,10 +717,16 @@
#ifdef Q_COMPILER_NOEXCEPT
# define Q_DECL_NOEXCEPT noexcept
# define Q_DECL_NOEXCEPT_EXPR(x) noexcept(x)
-#elif !defined(Q_DECL_NOEXCEPT)
+# ifdef Q_DECL_NOTHROW
+# undef Q_DECL_NOTHROW /* override with C++11 noexcept if available */
+# endif
+#else
# define Q_DECL_NOEXCEPT
# define Q_DECL_NOEXCEPT_EXPR(x)
#endif
+#ifndef Q_DECL_NOTHROW
+# define Q_DECL_NOTHROW Q_DECL_NOEXCEPT
+#endif
#if defined(Q_COMPILER_ALIGNOF) && !defined(Q_ALIGNOF)
# define Q_ALIGNOF(x) alignof(x)