Bools reloaded
    Oskar Linde 
    oskar.lindeREM at OVEgmail.com
       
    Fri Mar  3 11:06:40 PST 2006
    
    
  
xs0 wrote:
> Don Clugston wrote:
>> And if you read that post, you will find that Derek said:
>>
>> ** It can be explicitly cast to an integer such that false is 0, and 
>> true is 1.
>>
>> whereas Kyle said:
>>
>> integer operations are illegal, and it cant be cast to anything.
>>
>> So there are at least four types of bool being discussed. Probably more.
>> And at least two can be called "pure bool".
>> (a) the existing bool
>> (b) Bruno and I are in here somewhere, and are not necessarily the same.
>> (c) Derek
>> (d) Kyle
>>
>> Right now, (a) and (c) are the only ones which are clearly defined.
> 
> Hmm, how about an expansion of (d):
Yes, this is very similar to the definition I have suggested. I think 
this is a good compromise:
> 1) still allow implicit casts to bool from any type, as in
> - value != 0
> - obj_ref !is null
> - pointer !is null
> - array.ptr !is null
> - !struct.opEquals(0) // does this work now?
This would mean that we would keep if(a && b) and also that the type of 
any conditional could be defined as bool. But it would also mean that 
you could write bool b = 5; I guess.
> 2) forbid casts from bool to anything else (even explicit; besides 
> "foo?1:0" is shorter and more obvious than "cast(int)foo")
I can live with explicit cast both being allowed and not. I don't see it 
as an important detail. The important part is to disallow implicit casts 
from bool to any type.
> 3) when an expression involves a bool operand, all other operands get 
> converted to bool
This is the logical conclusion from 1) and 2).
> 4) forbid all operators on bools, except ==, !=, &&, ||, &, |, and !. (& 
> and | don't short-circuit evaluation, but are otherwise equivalent to && 
> and ||).
For consistency, ~ should be supported too. And ^ too of course.
/Oskar
    
    
More information about the Digitalmars-d
mailing list