MEMO A さんが書きました:(b == 0)・・・bが0の時にTRUE(1)になる。それ以外はFALSE(0)。
(b == 3)・・・bが3の時にTRUE(1)になる。それ以外はFALSE(0)。
C++では、比較演算子の結果は整数ではなく、bool型のtrueまたはfalseです。 (
N3337 5.9, 5.10)
ビットOR演算子は整数(かunscoped enumeration : enum classやenum structではなくenumで宣言された列挙型)でないといけない(N3337 5.13)ので、
この場合bool型のオペランドがint型に変換されて計算されるのだと思います。
boolからintの変換は、falseが0に、trueが1に変換されます。(N3337 4.7)