1 matches bool, 2 matches long

Steven Schveighoffer schveiguy at yahoo.com
Tue Apr 30 11:50:08 PDT 2013


On Tue, 30 Apr 2013 10:43:01 -0700, Rob T <alanb at ucora.com> wrote:

> On Tuesday, 30 April 2013 at 14:47:14 UTC, Steven Schveighoffer wrote:
>>
>> Yes, just like it's better matching to long than string.
>>
>> -Steve
>
> More precise language is to state that there is no "better match" and  
> long should simply not ever match with bool because long is not the same  
> thing as bool, ie, bool should not be seen as an integral type because  
> it clearly isn't because it does not behave like one and has a  
> completely different purpose in the language otherwise there'd be no  
> need for a bool to have special differences that the other integrals do  
> not have.
>
> How do we get the problem fixed? The sooner it is done the better,  
> otherwise  we'll be forever stuck with subtle bugs and D programmers  
> complaining about it for the rest of eternity.

1. bool doesn't match to 1 or 0.
2. cast(bool)0 -> false
3. cast(bool)(anything but 0) -> true
4. true -> (implicit cast) 1
5. false -> (implicit cast) 0.

Then all that is left is to change any place where 1 or 0 implicitly casts  
to true or false to true and false.

The one casualty is any code that passes 1 or 0 to a function overloaded  
with long, short, or byte (or unsigned versions), and bool, will now  
silently switch to calling the integral version.  I would posit that this  
is extremely rare.

-Steve


More information about the Digitalmars-d mailing list