[Issue 5363] const + alias this = wrong code
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Oct 6 09:08:57 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=5363
--- Comment #9 from Walter Bright <bugzilla at digitalmars.com> ---
I simplified it a bit more, so it happens at compile time:
struct S {
int dummy;
alias dummy this;
}
int foo(int){ return 1; }
int foo(const(S)){ return 2; }
void test() {
static assert(foo(cast(const)S.init) == 2); // pass
static assert(foo(S.init) == 2); // fail
}
Here's the trouble. With alias this, the conversion of S to int is considered
an 'exact' match, while the conversion of S to const is considered a 'constant'
match, which is not as good as 'exact'. Hence, the 'exact' is selected and
foo(int) is called.
The levels of conversion are:
nomatch
convert
constant
exact
We could change an alias this conversion to a 'convert' match, but it is
unknown how much breakage this will cause. It seems to be a rather drastic
change.
The compiler source code is the TypeStruct.implicitConvTo() function in
mtype.d.
--
More information about the Digitalmars-d-bugs
mailing list