From 1adca80707ec10c57f34afae1f8348f3e2b30817 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 2 Aug 2012 22:17:27 +0200 Subject: [PATCH] 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 --- src/corelib/global/qcompilerdetection.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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