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


Walter, Don't you agree that the current way can be confusing?

For example, the following code generates 2 differents results/output:

import std.stdio;

void foo(bool b) { writeln("bool"); }
void foo(long l) { writeln("long"); }

void main()
{
long num = 0;

foo(num);
foo(0);
foo(2);
}

output:

long
bool
long

Regardless the fact that num is a variable (long), the first 2 foo calls in my perspective means foo(0), and should generate the same output. Don't you agree with that?

Reply via email to