Am 30.04.2013 20:50, schrieb Steven Schveighoffer:
On Tue, 30 Apr 2013 10:43:01 -0700, Rob T <[email protected]> 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