Improve STATIC_ASSERT macro for older compilers
Previously, when using compiler without support for static assertions, the STATIC_ASSERT() macro would be replaced with runtime assertion. Change the STATIC_ASSERT() macro to a version that's compile time assertion even when using pre-C11 compilers. Courtesy of Joseph Quinsey: https://godbolt.org/z/K9RvWS
This commit is contained in:
@@ -228,7 +228,12 @@
|
||||
#elif __has_feature(c_static_assert)
|
||||
#define STATIC_ASSERT(cond, msg) _Static_assert(cond, msg)
|
||||
#else /* if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR >= 6) */
|
||||
#define STATIC_ASSERT(cond, msg) INSIST(cond)
|
||||
|
||||
/* Courtesy of Joseph Quinsey: https://godbolt.org/z/K9RvWS */
|
||||
#define TOKENPASTE(a, b) a##b /* "##" is the "Token Pasting Operator" */
|
||||
#define EXPAND_THEN_PASTE(a, b) TOKENPASTE(a, b) /* expand then paste */
|
||||
#define STATIC_ASSERT(x, msg) \
|
||||
enum { EXPAND_THEN_PASTE(ASSERT_line_, __LINE__) = 1 / ((msg) && (x)) }
|
||||
#endif /* if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR >= 6) */
|
||||
|
||||
#ifdef UNIT_TESTING
|
||||
|
||||
Reference in New Issue
Block a user