I recently came upon the need to have compile-time assertions in C++ to check that the sizes of two types were equal.
I found the following macro on the web (stated to have come from the Linux kernel):
#define X_ASSERT(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
which I used like so:
X_ASSERT(sizeof(Botan::byte) != sizeof(char));
This gets me curious – although this works, is there a cleaner way to do so? (obviously there’s more than one way, as it is) Are there advantages or disadvantages to certain methods?
You might want to take a look at Boost StaticAssert. The internals aren’t exactly clean (or weren’t the last time I looked) but at least it’s much more recognizable, so most people know what it means. It also goes to some pains to produce more meaningful error messages if memory serves.