That code seems needlessly arcane. You can get the same results without resorting to anonymous bitfields:
#define BUILD_BUG_ON_ZERO(e) (sizeof(char[(e) ? -1 : 0]))
which, when it fails, results in error: size of unnamed array is negative
which is no worse than the provided code which results in error: negative width in bit-field '<anonymous>'
It's worth noting that declaring an array with 0 elements is not allowed in C99. However, using a struct with no named members has undefined behavior in C99 [1].[1] http://stackoverflow.com/a/12918937/959866
Edit: You can get around having 0 elements by using
#define BUILD_BUG_ON_ZERO(e) (sizeof(char[(e) ? -1 : 1]) - 1)
but you're starting to lose clarity again.