Is the operation “false < true" well defined?

TL;DR:

The operations are well defined according to the draft C++ standard.

Details

We can see that by going to the draft C++ standard section 5.9 Relational operators which says (emphasis mine going forward):

The operands shall have arithmetic, enumeration, or pointer type, or type std::nullptr_t. The operators
< (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) all yield
false or true. The type of the result is bool

and bools are arithematic types from 3.9.1 Fundamental types

Types bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively
called integral types.

and

Integral and floating types are collectively called arithmetic
types.

and true and false are boolean literals from 2.14.6 Boolean literals:

boolean-literal:
    false
    true

Going back to section 5.9 to see the mechanics of the relational operators further, it says:

The usual arithmetic conversions are performed on operands of arithmetic or enumeration type.

the usual arithmetic conversions are covered in section 5 which says:

Otherwise, the integral promotions (4.5) shall be performed on both operands

and section 4.5 says:

A prvalue of type bool can be converted to a prvalue of type int, with false becoming zero and true
becoming one.

and so the expressions:

false < false
false < true
true < false
true < true

using these rules become:

0 < 0
0 < 1
1 < 0
1 < 1

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)