We finally got around to discussing this in the Lang Team meeting. We had the following questions, perhaps @ubsan, @nagisa, or others may be in a position to answer authoritatively:
- Are there any extant platforms where
_Bool
in the C ABI is permitted to take values other than 0 or 1?- How I understood prior answers is “no, truth-y values will coerce to 1”
- Does the C standard permit platforms where
_Bool
is permitted to take values other than 0 or 1? - Side question: are there extant platforms where
sizeof(_Bool) != 1
?- We believe the C standard permits other sizes, but weren’t clear if anyone took advantage of that freedom.
Our preference is to define bool
as _Bool
. This would be what most people expect and avoid massive breakage. If the C standard requires values of 0 or 1, then there seems to be basically no drawback. Otherwise, it implies a potential performance pitfall on matches (matches on bools, mind you) but doesn’t seem like a huge problem. Still, it’d be good to know the answers to those questions before reaching a final consensus.