https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104948
--- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> --- Yes, to be more precise: && produces an int (not a _Bool / bool) with value 0 or 1. _Bool (a.k.a bool) is a distinct type, which might be larger or smaller than int (the only actual requirement is "large enough to store the values 0 and 1"). The name 'bool' is currently just a macro for _Bool defined in <stdbool.h> but C23 might change it to a proper keyword: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2934.pdf