err, noprissi wrote: return _m[t].bar << 3 || _m[t].foo;
is equal to
return (_m[t].foo!=0);
and all compilers generating -1 for true boolean expressions are broken, because the C standard mandates that the result of a logical expression is either 0 for false or 1 for true.due to the accidental use of the logical or which has only 0 and not zero (most compiler reutrn 1, few -1) here.
On the other hand all input values unequal to 0 are interpreted as true.