[Issue 19365] operator overloading set of mixin template is not considered
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Dec 6 13:56:40 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=19365
Adam D. Ruppe <destructionator at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |destructionator at gmail.com
--- Comment #1 from Adam D. Ruppe <destructionator at gmail.com> ---
That's not a bug, that's by design. It allows you to override an overload set
from a mixin template while keeping the other things.
To merge the sets, you use alias:
struct S {
mixin Operators ops;
int opBinary(string op: "*")(S rhs) {return 2;}
alias opBinary = ops.opBinary;
}
However, while that works with every other case, with this one.... it is giving
me
Error: alias `ooooo.S.opBinary` conflicts with template ooooo.S.opBinary(string
op : "*")(S rhs) at ooooo.d(7)
So that *might* be a bug, it isn't merging specialized templates... I was going
to close this immediately, but maybe this specific thing is legit.
To work around that, offer a dispatcher function instead of an alias:
struct S {
mixin Operators ops;
int opBinary(string op: "*")(S rhs) {return 2;}
int opBinary(string op)(S rhs) {
// forward all others to the mixin
return ops.opBinary!op(rhs);
}
}
see for design:
https://dlang.org/spec/template-mixin.html#mixin_scope
--
More information about the Digitalmars-d-bugs
mailing list