Browse Source

Merge topic 'lang-std-c++26'

1ba4a06338 GNU: Add flags for C++26 modes
2038f2c2b1 C++26: Support detection as the default standard

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !9434
Brad King 1 year ago
parent
commit
9bf79a7964

+ 3 - 1
Modules/CMakeCUDACompilerId.cu.in

@@ -25,7 +25,9 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
 #define CXX_STD __cplusplus
 
 const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+  "26"
+#elif CXX_STD > CXX_STD_20
   "23"
 #elif CXX_STD > CXX_STD_17
   "20"

+ 3 - 1
Modules/CMakeCXXCompilerId.cpp.in

@@ -89,7 +89,9 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
 #endif
 
 const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+  "26"
+#elif CXX_STD > CXX_STD_20
   "23"
 #elif CXX_STD > CXX_STD_17
   "20"

+ 3 - 1
Modules/CMakeHIPCompilerId.hip.in

@@ -26,7 +26,9 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
 #define CXX_STD __cplusplus
 
 const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+  "26"
+#elif CXX_STD > CXX_STD_20
   "23"
 #elif CXX_STD > CXX_STD_17
   "20"

+ 3 - 1
Modules/CMakeOBJCXXCompilerId.mm.in

@@ -33,7 +33,9 @@ char const* qnxnto = "INFO" ":" "qnxnto[]";
 #define CXX_STD __cplusplus
 
 const char* info_language_standard_default = "INFO" ":" "standard_default["
-#if CXX_STD > CXX_STD_20
+#if CXX_STD > CXX_STD_23
+  "26"
+#elif CXX_STD > CXX_STD_20
   "23"
 #elif CXX_STD > CXX_STD_17
   "20"

+ 5 - 0
Modules/Compiler/GNU.cmake

@@ -293,4 +293,9 @@ macro(__compiler_gnu_cxx_standards lang)
     set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
     set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
   endif()
+
+  if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
+    set(CMAKE_${lang}26_STANDARD_COMPILE_OPTION "-std=c++26")
+    set(CMAKE_${lang}26_EXTENSION_COMPILE_OPTION "-std=gnu++26")
+  endif()
 endmacro()

+ 1 - 0
Tests/CompileFeatures/CMakeLists.txt

@@ -286,6 +286,7 @@ if (CMAKE_CXX_COMPILE_FEATURES)
     if (std_flag_idx EQUAL -1)
       add_executable(default_dialect default_dialect.cpp)
       target_compile_definitions(default_dialect PRIVATE
+        DEFAULT_CXX26=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},26>
         DEFAULT_CXX23=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},23>
         DEFAULT_CXX20=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},20>
         DEFAULT_CXX17=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},17>

+ 5 - 1
Tests/CompileFeatures/default_dialect.cpp

@@ -3,7 +3,11 @@
 template <long l>
 struct Outputter;
 
-#if DEFAULT_CXX23
+#if DEFAULT_CXX26
+#  if CXX_STD <= CXX_STD_23
+Outputter<CXX_STD> o;
+#  endif
+#elif DEFAULT_CXX23
 #  if CXX_STD <= CXX_STD_20
 Outputter<CXX_STD> o;
 #  endif

+ 2 - 2
Tests/RunCMake/CompileFeatures/compiler_introspection.cmake

@@ -40,6 +40,6 @@ set(${lang}${standard}_EXT_FLAG ${CMAKE_${lang}${standard}_EXTENSION_COMPILE_OPT
   endforeach()
 endmacro()
 
-info(C 90 99 11 17 23)
-info(CXX 98 11 14 17 20 23)
+info(C 90 99 11 17 23 26)
+info(CXX 98 11 14 17 20 23 26)
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/info.cmake" "${info}")