diff options
Diffstat (limited to 'src/corelib/global/qcompilerdetection.h')
-rw-r--r-- | src/corelib/global/qcompilerdetection.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 2b957782e8..70dddeba29 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -474,12 +474,29 @@ * N2544 Q_COMPILER_UNRESTRICTED_UNIONS * N1653 Q_COMPILER_VARIADIC_MACROS * N2242 N2555 Q_COMPILER_VARIADIC_TEMPLATES + * + * C++1y proposed features + * + * N3472 Q_COMPILER_BINARY_LITERALS + * N3649 Q_COMPILER_GENERIC_LAMBDA + * N3638 Q_COMPILER_LAMBDA_CAPTURES + * N3652 Q_COMPILER_RELAXED_CONSTEXPR_FUNCTIONS + * N3386 N3638 Q_COMPILER_RETURN_TYPE_DEDUCTION + * N3651 Q_COMPILER_VARIABLE_TEMPLATES + * N3639 Q_COMPILER_VLA (see also Q_COMPILER_RESTRICTED_VLA) + * */ #ifdef Q_CC_INTEL +# define Q_COMPILER_RESTRICTED_VLA # if __INTEL_COMPILER < 1200 # define Q_NO_TEMPLATE_FRIENDS # endif +# if __INTEL_COMPILER >= 1310 && !defined(_WIN32) +// ICC supports C++14 binary literals in C, C++98, and C++11 modes +// at least since 13.1, but I can't test further back +# define Q_COMPILER_BINARY_LITERALS +# endif # if __cplusplus >= 201103L # define Q_COMPILER_VARIADIC_MACROS # if __INTEL_COMPILER >= 1200 @@ -525,6 +542,7 @@ #ifdef Q_CC_CLANG /* General C++ features */ +# define Q_COMPILER_RESTRICTED_VLA # if !__has_feature(cxx_exceptions) # ifndef QT_NO_EXCEPTIONS # define QT_NO_EXCEPTIONS @@ -537,6 +555,12 @@ # define Q_DECL_DEPRECATED_X(text) __attribute__ ((__deprecated__(text))) # endif +// Clang supports binary literals in C, C++98 and C++11 modes +// It's been supported "since the dawn of time itself" (cf. commit 179883) +# if __has_extension(cxx_binary_literals) +# define Q_COMPILER_BINARY_LITERALS +# endif + /* C++11 features, see http://clang.llvm.org/cxx_status.html */ # if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) /* Detect C++ features using __has_feature(), see http://clang.llvm.org/docs/LanguageExtensions.html#cxx11 */ @@ -636,9 +660,40 @@ # define Q_COMPILER_VARIADIC_MACROS # endif # endif + +/* C++1y features, see http://clang.llvm.org/cxx_status.html and + * http://clang.llvm.org/docs/LanguageExtensions.html#checks-for-standard-language-features */ +# if __cplusplus > 201103L +//# if __has_feature(cxx_binary_literals) +//# define Q_COMPILER_BINARY_LITERALS // see above +//# endif +# if __has_feature(cxx_generic_lambda) +# define Q_COMPILER_GENERIC_LAMBDA +# endif +# if __has_feature(cxx_init_capture) +# define Q_COMPILER_LAMBDA_CAPTURES +# endif +# if __has_feature(cxx_relaxed_constexpr) +# define Q_COMPILER_RELAXED_CONSTEXPR_FUNCTIONS +# endif +# if __has_feature(cxx_decltype_auto) && __has_feature(cxx_return_type_deduction) +# define Q_COMPILER_RETURN_TYPE_DEDUCTION +# endif +# if __has_feature(cxx_variable_templates) +# define Q_COMPILER_VARIABLE_TEMPLATES +# endif +# if __has_feature(cxx_runtime_array) +# define Q_COMPILER_VLA +# endif +# endif #endif // Q_CC_CLANG #if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) +# define Q_COMPILER_RESTRICTED_VLA +# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403 +// GCC supports binary literals in C, C++98 and C++11 modes +# define Q_COMPILER_BINARY_LITERALS +# endif # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403 /* C++11 features supported in GCC 4.3: */ @@ -701,6 +756,15 @@ # endif /* C++11 features are complete as of GCC 4.8.1 */ # endif +# if __cplusplus > 201103L +# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 + /* C++1y features in GCC 4.9 */ +//# define Q_COMPILER_BINARY_LITERALS // already supported since GCC 4.3 as an extension +# define Q_COMPILER_LAMBDA_CAPTURES +# define Q_COMPILER_RETURN_TYPE_DEDUCTION +# define Q_COMPILER_VLA +# endif +# endif #endif #if defined(Q_CC_MSVC) && !defined(Q_CC_INTEL) |