On 4/29/2013 10:10 AM, Steven Schveighoffer wrote:
On Sat, 27 Apr 2013 13:27:39 -0700, Walter Bright <[email protected]>
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.

Reply via email to