http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59852 --- Comment #3 from H. Peter Anvin <hpa at zytor dot com> --- a == b and a != b are permitted. ~a is permitted iff sizeof(a) >= sizeof(int). !a and other booleanizing operations are permitted but produces integer (non-bitwise) results.