1 matches bool, 2 matches long

Walter Bright newshound2 at digitalmars.com
Mon Apr 29 11:39:27 PDT 2013


On 4/29/2013 10:10 AM, Steven Schveighoffer wrote:
> On Sat, 27 Apr 2013 13:27:39 -0700, Walter Bright <newshound2 at digitalmars.com>
> wrote:
>
>> On 4/26/2013 11:04 PM, Steven Schveighoffer wrote:
>>> I think the issue (and I am firmly in the foo(1) => long camp) is that bools are
>>> considered better integers than actual integer types (or even floating point
>>> types for that matter).  I agree that bools can be implicitly cast to and from
>>> integers, as a last resort.
>>
>> The overload system in D is explicitly not based on "better". (The C++
>> "better" overloading system is for functions, but not for templates.) The D
>> overload system is based on partial ordering, which is the same as what C++
>> uses for templates.
>>
>> I don't know for a fact, but I'm pretty sure the partial ordering scheme that
>> C++ selected for templates, which came along many years later, was picked
>> because people realized it was better (and more mathematically robust and
>> defensible).
>>
>> One of the problems with a "better" matching system is handling functions with
>> multiple parameters, each with their own "better" match. (The C++ Standard
>> devotes a great deal of complex text to this, it boils down to a bunch of
>> rather arbitrary decisions.) Partial ordering solves this neatly and
>> consistently.
>>
>> As one who implemented C++'s better matching system, I can confidently state
>> that the partial ordering scheme is FAR better overall.
>
> I think you are inventing a strawman problem that this bug solves.  There is no
> need for a "Better" scheme, partial ordering works great, and so do true and false.
>
> bool isn't an integer.  It can implicitly cast to an integer, but that's it.
> Once we implement that rule, everything falls into place.  If you want to pass a
> "true" boolean literal, use true.  If you want to pass a "false" boolean literal
> use false.  Using 1 and 0 may be convenient, and may also be valid, but when it
> matches an integral type as well as bool, then it's ambiguous.

Carefully reading your statement, you are still arguing that matching 1 to long 
should be "better" than matching it to bool.



More information about the Digitalmars-d mailing list