Merge branch 'c23' into 'main'

macros: Add C23/C++23 standards

See merge request GNOME/glib!4831
This commit is contained in:
Marco Trevisan
2025-09-23 21:40:55 +02:00
4 changed files with 35 additions and 4 deletions

View File

@@ -82,6 +82,7 @@
((version) == 99 && G_C_STD_VERSION >= 199901L) || \
((version) == 11 && G_C_STD_VERSION >= 201112L) || \
((version) == 17 && G_C_STD_VERSION >= 201710L) || \
((version) == 23 && G_C_STD_VERSION >= 202311L) || \
0)
#else /* defined (__cplusplus) */
@@ -103,6 +104,7 @@
((version) == 14 && G_CXX_STD_VERSION >= 201402L) || \
((version) == 17 && G_CXX_STD_VERSION >= 201703L) || \
((version) == 20 && G_CXX_STD_VERSION >= 202002L) || \
((version) == 23 && G_CXX_STD_VERSION >= 202302L) || \
0)
#endif /* !defined (__cplusplus) */

View File

@@ -97,7 +97,17 @@ G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (99));
#if G_CXX_STD_VERSION == 202002L
G_STATIC_ASSERT (!G_CXX_STD_CHECK_VERSION (23));
G_STATIC_ASSERT (!G_CXX_STD_CHECK_VERSION (202300L));
G_STATIC_ASSERT (!G_CXX_STD_CHECK_VERSION (202302L));
#endif
#if G_CXX_STD_VERSION >= 202302L
G_STATIC_ASSERT (G_CXX_STD_CHECK_VERSION (23));
G_STATIC_ASSERT (G_CXX_STD_CHECK_VERSION (202302L));
#endif
#if G_CXX_STD_VERSION == 202302L
G_STATIC_ASSERT (!G_CXX_STD_CHECK_VERSION (26));
G_STATIC_ASSERT (!G_CXX_STD_CHECK_VERSION (202600L));
#endif
#ifdef _G_EXPECTED_CXX_STANDARD
@@ -123,6 +133,15 @@ test_cpp_standard (void)
}
#endif
#if !G_GNUC_CHECK_VERSION(14, 0)
if (std_version >= 23)
{
// See: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5388a43f6a3f348929292998bd6d0c1da6f006de
g_test_skip ("Expected standard version is not properly supported by compiler");
return;
}
#endif
g_test_message ("Checking if '" G_STRINGIFY (G_CXX_STD_VERSION) "' respects "
"the expected standard version '" _G_EXPECTED_CXX_STANDARD "'");
g_assert_true (G_CXX_STD_CHECK_VERSION (std_version));

View File

@@ -74,7 +74,17 @@ G_STATIC_ASSERT (G_C_STD_CHECK_VERSION (90));
#if G_C_STD_VERSION == 201710L
G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (23));
G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (202300L));
G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (202311L));
#endif
#if G_C_STD_VERSION >= 202311L
G_STATIC_ASSERT (G_C_STD_CHECK_VERSION (23));
G_STATIC_ASSERT (G_C_STD_CHECK_VERSION (202311L));
#endif
#if G_C_STD_VERSION == 202311L
G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (26));
G_STATIC_ASSERT (!G_C_STD_CHECK_VERSION (202600L));
#endif
#ifdef _G_EXPECTED_C_STANDARD

View File

@@ -18,7 +18,7 @@ fs = import('fs')
cc = meson.get_compiler('c')
c_standards = {}
foreach std : ['89', '99', '11', '17']
foreach std : ['89', '99', '11', '17', '23']
arg = (cc.get_id() == 'msvc' ? '/std:' : '-std=') + 'c' + std
if cc.has_argument(arg)
c_standards += { std: arg }
@@ -41,7 +41,7 @@ if have_cxx
cxx = meson.get_compiler('cpp')
cxx_standards = {}
foreach std : ['98', '03', '11', '14', '17', '20', '2b', 'latest']
foreach std : ['98', '03', '11', '14', '17', '20', '23', '2c', 'latest']
arg = (cxx.get_id() == 'msvc' ? '/std:' : '-std=') + 'c++' + std
if cxx.has_argument(arg)
cxx_standards += { std: arg }