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

aliak something at something.com
Tue Nov 13 08:23:48 UTC 2018


On Monday, 12 November 2018 at 22:07:39 UTC, Walter Bright wrote:
> On 11/12/2018 12:34 PM, Neia Neutuladh wrote:
>> Tell me more about this "consistency".
>
> int f(short s) { return 1; }
> int f(int i) { return 2; }
>
> enum : int { a = 0 }
> enum A : int { a = 0 }
>
> pragma (msg, f(a));   // calls f(int)
> pragma (msg, f(A.a)); // calls f(short)
>
> I.e. it's consistent.
>
> Here's how it works:
>
> f(a): `a` is a manifest constant of type `int`, and `int` is an 
> exact match for f(int), and f(short) requires an implicit 
> conversion. The exact match of f(int) is better.
>
> f(A.a): `a` is an enum of type `A`. `A` gets implicitly 
> converted to `int`. The `int` then gets exact match to f(int), 
> and an implicit match to f(short). The sequence of conversions 
> is folded into one according to:
>
>     <implicit conversion> <exact>               => <implicit 
> conversion>
>     <implicit conversion> <implicit conversion> => <implicit 
> conversion>

Doesn't the above miss a step, and wouldn't it be:

1) A.a => <implicit-convert-to-int><exact-match-on-f(int)>
2) A.a => 
<implicit-convert-to-int><implicit-convert-to-short><exact-match-on-f(short)>

So basically for the f(short) path you have 3 steps instead of 2 
for the f(int) path.

So does it matter how many implicit conversions need to happen 
before D stops trying? Or is it basically convert as long as you 
can? Does D actually do a "find the shortest path via implicit 
conversions to an overload" algorithm?


>
> One could have <implicit conversion><exact> be treated as 
> "better than" <implicit conversion><implicit conversion>, and 
> it sounds like a good idea, but even C++, not known for 
> simplicity, tried that and had to abandon it as nobody could 
> figure it out once the code examples got beyond trivial 
> examples.

Interesting. This seems simpler intuitively (shorter path, pick 
it), so I'm wondering if there're any links you can point to that 
describe what these problems were?

Cheers,
- Ali




More information about the Digitalmars-d-announce mailing list