diff options
| author | KOBAYASHI Shuji <[email protected]> | 2020-08-09 20:39:36 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2020-08-09 20:39:36 +0900 |
| commit | 0d54568b4dea51b7b4d78b66680632ac792efd4e (patch) | |
| tree | bfc6b700caa1a915a5c12a6504dd440ce4c5543b /include/mruby.h | |
| parent | df969b163ad43b7930c6965d457682a2f290553a (diff) | |
| download | mruby-0d54568b4dea51b7b4d78b66680632ac792efd4e.tar.gz mruby-0d54568b4dea51b7b4d78b66680632ac792efd4e.zip | |
Allow `mrb_static_assert()` to be used outside of functions
The use of `struct` is an idea by @dearblue.
Diffstat (limited to 'include/mruby.h')
| -rw-r--r-- | include/mruby.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/include/mruby.h b/include/mruby.h index 5aced9ca7..8625d4521 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -68,9 +68,15 @@ # define mrb_static_assert(exp, str) static_assert(exp, str) #else /* C version of static_assert() */ -# define mrb_static_assert(cond, str) \ - do { int assertion_failed[(cond) ? 1 : -1];\ - (void) assertion_failed; } while(0) +# define _mrb_static_assert_cat0(a, b) a##b +# define _mrb_static_assert_cat(a, b) _mrb_static_assert_cat0(a, b) +# ifdef __COUNTER__ +# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __COUNTER__) +# else +# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __LINE__) +# endif +# define mrb_static_assert(exp, str) \ + struct _mrb_static_assert_id(_mrb_static_assert_) { char x[(exp) ? 1 : -1]; } #endif #define mrb_static_assert1(exp) mrb_static_assert(exp, #exp) |
