@@ -1695,33 +1695,49 @@ typedef struct w64wrapper {
16951695
16961696 #define WC_CPP_CAT_ (a, b ) a ## b
16971697 #define WC_CPP_CAT (a, b ) WC_CPP_CAT_(a, b)
1698- #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
1699- (defined (_MSVC_LANG) && (_MSVC_LANG >= 201103L ))
1700- #ifndef static_assert2
1701- #define static_assert2 static_assert
1702- #endif
1703- #elif !defined(static_assert)
1704- #if !defined(__cplusplus) && \
1698+ #if defined(WC_NO_STATIC_ASSERT)
1699+ #define wc_static_assert (expr ) struct wc_static_assert_dummy_struct
1700+ #define wc_static_assert2 (expr, msg ) wc_static_assert(expr)
1701+ #elif !defined(wc_static_assert)
1702+ #if (defined(__cplusplus) && (__cplusplus >= 201703L)) || \
1703+ (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L )) || \
1704+ (defined (_MSVC_LANG) && (_MSVC_LANG >= 201103L ))
1705+ /* native variadic static_assert() */
1706+ #define wc_static_assert static_assert
1707+ #ifndef wc_static_assert2
1708+ #define wc_static_assert2 static_assert
1709+ #endif
1710+ #elif defined(_MSC_VER) && (__STDC_VERSION__ >= 201112L)
1711+ /* native 2-argument static_assert() */
1712+ #define wc_static_assert (expr ) static_assert (expr, #expr)
1713+ #ifndef wc_static_assert2
1714+ #define wc_static_assert2 (expr, msg ) static_assert (expr, msg)
1715+ #endif
1716+ #elif !defined(__cplusplus) && \
17051717 !defined (__STRICT_ANSI__) && \
17061718 !defined (WOLF_C89) && \
17071719 defined (__STDC_VERSION__) && \
17081720 (__STDC_VERSION__ >= 201112L ) && \
17091721 ((defined (__GNUC__) && \
17101722 (__GNUC__ >= 5 )) || \
17111723 defined(__clang__))
1712- #define static_assert (expr) _Static_assert(expr, #expr)
1713- #ifndef static_assert2
1714- #define static_assert2 (expr, msg ) _Static_assert (expr, msg)
1724+ /* native 2-argument _Static_assert() */
1725+ #define wc_static_assert (expr) _Static_assert(expr, #expr)
1726+ #ifndef wc_static_assert2
1727+ #define wc_static_assert2 (expr, msg ) _Static_assert (expr, msg)
17151728 #endif
17161729 #else
1717- #define static_assert (expr ) \
1718- struct WC_CPP_CAT (wc_dummy_struct_L, __LINE__)
1719- #ifndef static_assert2
1720- #define static_assert2 (expr, msg ) static_assert (expr)
1730+ /* C89-compatible fallback */
1731+ #define wc_static_assert (expr ) \
1732+ struct WC_CPP_CAT (wc_static_assert_dummy_struct_L, __LINE__) { \
1733+ char t[(expr) ? 1 : -1 ]; \
1734+ }
1735+ #ifndef wc_static_assert2
1736+ #define wc_static_assert2 (expr, msg ) wc_static_assert(expr)
17211737 #endif
17221738 #endif
1723- #elif !defined(static_assert2 )
1724- #define static_assert2 (expr, msg ) static_assert (expr)
1739+ #elif !defined(wc_static_assert2 )
1740+ #define wc_static_assert2 (expr, msg ) wc_static_assert (expr)
17251741 #endif
17261742
17271743 #ifndef SAVE_VECTOR_REGISTERS
0 commit comments