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