+1  A: 

I guess the simple answer is that || is a boolean operator: and in C, a "boolean" is 0 or 1. The operands are implicitly converted to booleans (I have not checked that that's what the spec actually says, but it's how C behaves), and the result is a boolean.

Altering the semantics to support this pattern may well be feasible -- until someone relies on || doing what it's always done.

Edmund
qrdl
schot
Thanks. My use of "quotes" indicates that that's the approximate meaning of it. If I'd bean referring to the mythical `boolean` type I would have indicated it as such. My answer as a whole is phrased in terms of behaviour, not abstract specification.
Edmund