C11 supports two-arg _Static_assert keyword
C++11 supports two-arg static_assert keyword
C++17 supports one-arg static_assert keyword
C23 supports one-arg static_assert keyword
So when possible expand _STATIC_ASSERT macro to the suitable C/C++ keyword.
---
mingw-w64-headers/crt/crtdbg.h | 8 +++++++-
mingw-w64-headers/crt/malloc.h | 8 +++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/mingw-w64-headers/crt/crtdbg.h b/mingw-w64-headers/crt/crtdbg.h
index e24d5053bb8d..2fa419e9e89d 100644
--- a/mingw-w64-headers/crt/crtdbg.h
+++ b/mingw-w64-headers/crt/crtdbg.h
@@ -94,7 +94,13 @@ extern "C" {
} _CrtMemState;
#ifndef _STATIC_ASSERT
-#if defined(_MSC_VER)
+#if (defined(__cpp_static_assert) && __cpp_static_assert >= 201411L) ||
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L)
+#define _STATIC_ASSERT(expr) static_assert(expr)
+#elif defined(__cpp_static_assert)
+#define _STATIC_ASSERT(expr) static_assert(expr, #expr)
+#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+#define _STATIC_ASSERT(expr) _Static_assert(expr, #expr)
+#elif defined(_MSC_VER)
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr)]
#else
#define _STATIC_ASSERT(expr) extern void __static_assert_t(int [(expr)?1:-1])
diff --git a/mingw-w64-headers/crt/malloc.h b/mingw-w64-headers/crt/malloc.h
index b08f30423a20..d02f3ee7bf5c 100644
--- a/mingw-w64-headers/crt/malloc.h
+++ b/mingw-w64-headers/crt/malloc.h
@@ -21,7 +21,13 @@ extern "C" {
#endif
#ifndef _STATIC_ASSERT
-#if defined(_MSC_VER)
+#if (defined(__cpp_static_assert) && __cpp_static_assert >= 201411L) ||
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L)
+#define _STATIC_ASSERT(expr) static_assert(expr)
+#elif defined(__cpp_static_assert)
+#define _STATIC_ASSERT(expr) static_assert(expr, #expr)
+#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+#define _STATIC_ASSERT(expr) _Static_assert(expr, #expr)
+#elif defined(_MSC_VER)
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr)]
#else
#define _STATIC_ASSERT(expr) extern void __static_assert_t(int [(expr)?1:-1])
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public