From: Simon Marchi Date: Tue, 20 Aug 2019 01:54:07 +0000 (-0400) Subject: Make bitfield.h C++-friendly X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=f0c01bee96c083f86cc98af9e3eb635629be128b Make bitfield.h C++-friendly This patch changes bitfield.h to be usable in C++11. It will probably never be compiled as C++ in the context of babeltrace, but this is just to keep things sync'ed across projects. Signed-off-by: Simon Marchi Change-Id: Ib0fa31ee08d0f691841f96676556d2aa9fcd2426 Reviewed-on: https://review.lttng.org/c/babeltrace/+/1965 Tested-by: jenkins Reviewed-by: Francis Deslauriers Reviewed-by: Philippe Proulx --- diff --git a/src/compat/bitfield.h b/src/compat/bitfield.h index e2f2c128..72c857c4 100644 --- a/src/compat/bitfield.h +++ b/src/compat/bitfield.h @@ -70,8 +70,12 @@ * Produce a build-time error if the condition `cond` is non-zero. * Evaluates as a size_t expression. */ +#ifdef __cplusplus +#define _BT_BUILD_ASSERT(cond) ([]{static_assert((cond), "");}, 0) +#else #define _BT_BUILD_ASSERT(cond) \ sizeof(struct { int f:(2 * !!(cond) - 1); }) +#endif /* * Cast value `v` to an unsigned integer of the same size as `v`. @@ -377,7 +381,7 @@ do { \ do { \ __typeof__(*(vptr)) *_vptr = (vptr); \ __typeof__(*_vptr) _v; \ - type *_ptr = (void *) (ptr); \ + type *_ptr = (type *) (ptr); \ unsigned long _start = (start), _length = (length); \ type _mask, _cmask; \ unsigned long _ts = sizeof(type) * CHAR_BIT; /* type size */ \