clang-cl: Add support for C++23

Although there is no `cl -std:c++23` flag, the underlying Clang compiler
does have a C++23 mode we can activate by passing `-std=c++23` through a
`clang-cl` wrapper flag.

Fixes: #26061
This commit is contained in:
Brad King 2024-09-13 12:26:18 -04:00
parent 747fa20ad6
commit 474eafe28c
2 changed files with 13 additions and 5 deletions

View File

@ -2,9 +2,9 @@ if("$ENV{CMAKE_CI_BUILD_NAME}" MATCHES "(^|_)gnu(_|$)")
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
else()
# FIXME: Implement C23 and C++23 support for clang-cl.
# FIXME: Implement C23 support for clang-cl.
set(CMake_TEST_C_STANDARDS "90;99;11;17" CACHE STRING "")
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20" CACHE STRING "")
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
endif()
set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")

View File

@ -245,17 +245,25 @@ macro(__compiler_clang_cxx_standards lang)
set(CMAKE_${lang}_STANDARD_LATEST 17)
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++20")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++20")
set(CMAKE_${lang}_STANDARD_LATEST 23)
set(CMAKE_${lang}_STANDARD_LATEST 20)
elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}_STANDARD_LATEST 20)
endif()
if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL "17.0")
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-clang:-std=c++23")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-clang:-std=c++23")
set(CMAKE_${lang}_STANDARD_LATEST 23)
elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std:c++latest")
set(CMAKE_${lang}_STANDARD_LATEST 23)
endif()
__compiler_check_default_language_standard(${lang} 3.9 14)
else()
# This version of clang-cl, or the MSVC version it simulates, does not have