The most insane macro in that is this monstrosity:<p><pre><code> #define __is_constant(x) \
(sizeof(int) == sizeof(*(1 ? ((void*)((long)(x) * 0l)) : (int*)1)))
</code></pre>
If x is a compile-time constant, (void* )((long)(x) * 0l) is equivalent to NULL, otherwise it's just a regular void* . And if both sides of a ternary are pointers, the rule is:<p>If one side is NULL, the type of the ternary should be the type of the other side (int* in this case).<p>Otherwise, if one side is a void* , the type of the ternary should be void* .<p>So if x is constant, the type of the ternary is int* , and if it's not constant the type is void* . The sizeof(* ()) around it turns that into sizeof(int) or sizeof(void), and in the GNU dialect sizeof(void) is 1, which is different from sizeof(int). Whew.<p>What I want to know is what's wrong with __builtin_constant_p.