On 4/7/2016 2:08 PM, Guido van Rossum wrote:
On Thu, Apr 7, 2016 at 10:39 AM, Michael Selik <mike@selik.org> wrote:
To clarify, the proposal is: ``~True == False`` but every other operation on ``True`` remains the same, including ``True * 42 == 42``. Correct?
Yes. To be more precise, there are some "arithmetic" operations (+, -, *, /, **) and they all treat bools as ints and always return ints; there are also some "bitwise" operations (&, |, ^, ~) and they should all treat bools as bools and return a bool. Currently the only exception to this idea is that ~ returns an int, so the proposal is to fix that. (There are also some "boolean" operations (and, or, not) and they are also unchanged.)
When the proposal is expressed as "Make bools consistently follow this simple rule -- Logical and 'bitwise' operations on bools return the expected bool, while arithmetic operations treat bools as 0 or 1 and return ints.", it makes sense to me. Given that ~bool hardly make any sense currently, I would not expect it to be in much use now. Hence not much to break. -- Terry Jan Reedy