DIP 1015--Deprecation of Implicit Conversion of Int. & Char. Literals to bool--Formal Assement

Isaac S. spam-no-reply-isaac at outlook.com
Tue Nov 13 00:08:04 UTC 2018


On Monday, 12 November 2018 at 22:07:39 UTC, Walter Bright wrote:
> *snip*
> Both f(int) and f(short) match, because implicit conversions 
> rank the same.
> To disambiguate, f(short) is pitted against f(int) using 
> partial ordering rules,
> which are:
>
>    Can a short be used to call f(int)? Yes.
>    Can an int be used to call f(short)? No.
>
> So f(short) is selected, because the "Most Specialized" 
> function is selected
> when there is an ambiguous match.
> Note: the "most specialized" partial ordering rules are 
> independent of the arguments being passed.

Well frankly that's bad design. If I declare Foo as an int enum I 
(and any _reasonable_ programmer) would expect Foo to prefer the 
int overload.

Think of it this way, each enum can be thought of like this:

immutable struct EnumName(T) {
     T value;
     alias value this;
}

So, if a programmer declares an enum of type int (EnumName!int), 
the alias-this will convert the enum to an int. Thus, the 
programmer expects the value to implicitly
convert to an int; which is a _direct_ implicit conversion (IE: 
is weighed heavier than just an implicit conversion).

Regardless of what you believe, it is an inconsistent behavior to 
the programmer (IE: The person you should be considering as a 
language designer).

If this horrid design choice stays, this _will_ go down as a 
mistaken "feature" of the language that everyone has to account 
for otherwise it bites them (Example: C++ implicitly converting 
by default instead of requiring an implicit attribute).


If you really want this plaque in the language, at least make it 
not affect those that gave their enum a type. If you at least do 
that, someone can add it to DScanner to tell anyone that doesn't 
type their enum to expect illogical behavior.


More information about the Digitalmars-d-announce mailing list