@pleb it's not casting in this case, it's promotion. how does promoting bool & bool to an int help compatibility with C? In fact because of the implicit casts you don't need to promote.
I want to pass bools to a generic function that uses logical bit operation and get back a bool, instead I get back an int for no reason. A freaking int not even unsigned, and until c++20 it's implementation defined what happens to a signed integer when you bit twiddle it.
That's why you use &&, ||, != instead of &, | and ^.
Which guarantee bool.