On Friday, 26 April 2013 at 08:00:28 UTC, Walter Bright wrote:
On 4/26/2013 12:07 AM, Maxim Fomin wrote:
Regarding bool type as integer type is C atavism and should be
abandoned.
There's a very loooong history of 0 being regarded as false and
1 as true - it goes well beyond C.
This should be irrelevant in case of long parameter. Such
conversion should not be in the language (like feature of array
to pointer conversion and function to pointer to function
conversion is present in C but not in D).
This leads to comic sitatuation presented in the thread when
changing literal to
lvalue or using different enums changes overloading matching.
Yet I showed an analogous example where different overloads
were selected based on a different integer value.
There's no getting away from having to pay attention when
declaring different overloads of a function. In the original
example, the correct solution is to provide a foo(int). I'd be
suspicious of any code that only had overloads on just bool and
long - it doesn't make sense.
I argue the correct solution is to call integer function with
integer parameter when integer value is passed. Adjusting to
buggy compiler behavior isn't a good idea.