comparison operator values C++

boolean, c, c++, operator-keyword

Solution

Does C++ still restrict the return values of the operators to be 1 vs 0, or does a 'true', from one of these operators, return any 1-byte value, so long as it isn't 0?

The comparison operators, assuming that they have not been overloaded, only ever return `true` and `false`.

`int(true)` is always 1.

`int(false)` is always 0.

So,

int one(1), two(2);
assert( (one<two) == 1 );
assert( (two<one) == 0 );

Problem

We all know C++ (while not a superset) is pretty much derived from C. In C++, the operators <, <=, >, >=, ==, and != all have boolean return values. However, in C, the same operators returned 1 or 0, since there was no 'bool' type in C. Since all integer values except 0 are treated as "true", and 0 is "false", I want to know: Does C++ still restrict the return values of the operators to be 1 vs 0, or does a 'true', from one of these operators, return any 1-byte value, so long as it isn't 0? I want to know since using these return values as explicit 1 or 0 would be useful in bitwise operations without branching. As a terrible example, take the following: ``` bool timesTwo; int value; //... if(timesTwo) value << 1; //vs value << (int) timesTwo; ```

Original source