1 matches bool, 2 matches long

Paulo Pinto pjmlp at progtools.org
Tue Apr 30 12:04:20 PDT 2013


Am 30.04.2013 20:50, schrieb Steven Schveighoffer:
> 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

+1


More information about the Digitalmars-d mailing list