Deprecate implicit `int` to `bool` conversion for integer literals
Michael V. Franklin
slavo5150 at yahoo.com
Sun Nov 12 22:38:24 UTC 2017
On Sunday, 12 November 2017 at 16:57:05 UTC, Andrei Alexandrescu
wrote:
> A DIP could be formulated to only address the problem at hand.
> BTW, here's a really fun example:
>
> void fun(long) { assert(0); }
> void fun(bool) {}
>
> enum int a = 2;
> enum int b = 1;
>
> void main()
> {
> fun(a - b);
> }
>
> The overload being called depends on (a) whether a - b can be
> computed during compilation or not, and (b) the actual value of
> a - b. Clearly a big problem for modular code. This is the
> smoking gun motivating the DIP.
As I understand it, the case above can be solved by changing the
overload resolution rules without deprecating the implicit
conversion to bool. A PR for such a fix was submitted here
https://github.com/dlang/dmd/pull/1942.
I fear a proposal to deprecate the implicit conversion to bool
based solely on the example above could be refused in favor of
overload resolution changes. IMO, the example above, while
certainly a smoking gun, is actually just a symptom of the deeper
problem, so I tried to make that case in the DIP.
The DIP has been submitted here
https://github.com/dlang/DIPs/pull/99
Perhaps I'm not the right person to be formulating these
arguments, but given that the issue has been in Bugzilla for 4
years, I'm probably all you've got. Sorry.
Mike
More information about the Digitalmars-d
mailing list