summaryrefslogtreecommitdiffstats
path: root/Tests/CompileFeatures/default_dialect.cpp
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-04-03 18:26:18 (GMT)
committerBrad King <brad.king@kitware.com>2024-04-04 20:48:46 (GMT)
commit1e774a86d3693b6250e53bf67d3d30b07dddf7b2 (patch)
tree89f10e78939e026de535ba506735215207f27c68 /Tests/CompileFeatures/default_dialect.cpp
parentb9d4db7098898dbaf9dd29f0fbcc166af0e5154e (diff)
downloadCMake-1e774a86d3693b6250e53bf67d3d30b07dddf7b2.zip
CMake-1e774a86d3693b6250e53bf67d3d30b07dddf7b2.tar.gz
CMake-1e774a86d3693b6250e53bf67d3d30b07dddf7b2.tar.bz2
Intel: Fix detection of C++ 17/20 modes on Windows
The Intel Classic C++ compiler for Windows does not always define `_MSVC_LANG` correctly, but does define feature macros that we can use to distinguish these modes.
Diffstat (limited to 'Tests/CompileFeatures/default_dialect.cpp')
-rw-r--r--Tests/CompileFeatures/default_dialect.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/Tests/CompileFeatures/default_dialect.cpp b/Tests/CompileFeatures/default_dialect.cpp
index 88cc12d..3f95b6c 100644
--- a/Tests/CompileFeatures/default_dialect.cpp
+++ b/Tests/CompileFeatures/default_dialect.cpp
@@ -9,14 +9,19 @@ struct Outputter;
#define CXX_STD_20 202002L
#define CXX_STD_23 202302L
-#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && \
- _MSVC_LANG <= CXX_STD_14
-# if defined(__INTEL_CXX11_MODE__)
-# if defined(__cpp_aggregate_nsdmi)
-# define CXX_STD CXX_STD_14
-# else
-# define CXX_STD CXX_STD_11
-# endif
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG)
+# if _MSVC_LANG > CXX_STD_17
+# define CXX_STD _MSVC_LANG
+# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
+# define CXX_STD CXX_STD_20
+# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17
+# define CXX_STD CXX_STD_20
+# elif _MSVC_LANG > CXX_STD_14
+# define CXX_STD CXX_STD_17
+# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)
+# define CXX_STD CXX_STD_14
+# elif defined(__INTEL_CXX11_MODE__)
+# define CXX_STD CXX_STD_11
# else
# define CXX_STD CXX_STD_98
# endif