Problem with using std.math: abs and std.complex: abs at the same time
H. S. Teoh
hsteoh at quickfur.ath.cx
Wed Sep 18 15:23:50 UTC 2019
On Wed, Sep 18, 2019 at 12:37:28PM +0000, Simen Kjærås via Digitalmars-d-learn wrote:
[...]
> template MergeOverloads(T...) {
> alias MergeOverloads = T[0];
> static if (T.length > 1) {
> alias MergeOverloads = MergeOverloads!(T[1..$]);
> }
> }
>
> I would however label that a horrible hack.
>
> FWIW, I've filed this issue: https://issues.dlang.org/show_bug.cgi?id=20226
[...]
Horrible or not, it's very clever. I wouldn't have thought of that!
But yeah, the way alias can't be overloaded inside a function body is
kinda stupid, esp. seeing that aliasing an overload is exactly how you
resolve an analogous problem inside class scope:
class Base {
int abs(int);
}
class Derived : Base {
float abs(float); // causes ambiguity
alias abs = Base.abs; // brings Base.abs into overload set
void func() {
// now abs(...) will correctly use overload sets
}
}
I would have expected you could do this in function scope as well, and
was surprised the compiler rejected it.
T
--
Famous last words: I wonder what will happen if I do *this*...
More information about the Digitalmars-d-learn
mailing list