In some compilers due to C99 variable length arrays [1], your macro compiles happily if passed a value that is not a compile-time constant.
For example, this compiles but segfaults at runtime (GCC 4.9.2):
int main(int argc, char * argv[]) {
return (sizeof(char[(argc) ? -1 : 1]) - 1);
}
[1] https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html