diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index adbd4c7e2..a57bef507 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -77,9 +77,14 @@ inline Type& StructAfter(TObject &X) * Size checking */ +/* Check _assertion in a method environment */ #define _DEFINE_SIZE_ASSERTION(_assertion) \ inline void _size_assertion (void) const \ { ASSERT_STATIC (_assertion); } +/* Check that _code compiles in a method environment */ +#define _DEFINE_COMPILES_ASSERTION(_code) \ + inline void _compiles_assertion (void) const \ + { _code; } #define DEFINE_SIZE_STATIC(size) \ @@ -99,11 +104,13 @@ inline Type& StructAfter(TObject &X) static const unsigned int min_size = (size) #define DEFINE_SIZE_ARRAY(size, array) \ - _DEFINE_SIZE_ASSERTION (sizeof (*this) == (size) + array[0].static_size); \ + _DEFINE_SIZE_ASSERTION (sizeof (*this) == (size) + sizeof (array[0])); \ + _DEFINE_COMPILES_ASSERTION ((void) array[0].static_size) \ static const unsigned int min_size = (size) #define DEFINE_SIZE_ARRAY2(size, array1, array2) \ - _DEFINE_SIZE_ASSERTION (sizeof (*this) == (size) + this->array1[0].static_size + this->array2[0].static_size); \ + _DEFINE_SIZE_ASSERTION (sizeof (*this) == (size) + sizeof (this->array1[0]) + sizeof (this->array2[0])); \ + _DEFINE_COMPILES_ASSERTION ((void) array1[0].static_size; (void) array2[0].static_size) \ static const unsigned int min_size = (size)