summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qcompilerdetection.h
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-08-02 22:17:27 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-06 20:31:38 +0200
commit1adca80707ec10c57f34afae1f8348f3e2b30817 (patch)
tree22e07bf37c92099a7897e5224626fd4d51e10f4f /src/corelib/global/qcompilerdetection.h
parent38dc1f7597c66e205e5ece0e677187ea2dfa8052 (diff)
MSVC's throw() behaviour matches the C++11 noexcept, so use it
This allows code using methods marked Q_DECL_NOEXCEPT to benefit from optimisations before MSVC supports the C++11 keyword. Even MSVC 2012 doesn't have it yet. Using throw() in other compilers is not a good idea because they might actually be implementing the C++ standard -- which is broken. Change-Id: Id07ab4fe40a641583d5285d5abb536998bc419ba Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
Diffstat (limited to 'src/corelib/global/qcompilerdetection.h')
-rw-r--r--src/corelib/global/qcompilerdetection.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 6cc754c412..9a9e78b44f 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -110,6 +110,10 @@
# 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)
+
#if defined(Q_CC_MSVC) && _MSC_VER >= 1600
# define Q_COMPILER_RVALUE_REFS
# define Q_COMPILER_AUTO_TYPE
@@ -724,7 +728,7 @@
#ifdef Q_COMPILER_NOEXCEPT
# define Q_DECL_NOEXCEPT noexcept
# define Q_DECL_NOEXCEPT_EXPR(x) noexcept(x)
-#else
+#elif !defined(Q_DECL_NOEXCEPT)
# define Q_DECL_NOEXCEPT
# define Q_DECL_NOEXCEPT_EXPR(x)
#endif