Use templates for making sure expression is constant
This commit is contained in:
parent
5c8174eda3
commit
672ca3b4e6
|
@ -240,9 +240,9 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
|
|||
#define _ASSERT_STATIC0(_line, _cond) _ASSERT_STATIC1 (_line, (_cond))
|
||||
#define ASSERT_STATIC(_cond) _ASSERT_STATIC0 (__LINE__, (_cond))
|
||||
|
||||
/* Note: C++ allows sizeof() of variable-lengh arrays. So, if _cond is not
|
||||
* constant, it still compiles (ouch!), but at least we'll get a -Wvla warning. */
|
||||
#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (char[(_cond) ? 1 : -1]))
|
||||
template <unsigned int cond> class hb_assert_constant_t {};
|
||||
|
||||
#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (hb_assert_constant_t<_cond>))
|
||||
|
||||
#define _PASTE1(a,b) a##b
|
||||
#define PASTE(a,b) _PASTE1(a,b)
|
||||
|
|
Loading…
Reference in New Issue