mixin template bug with opBinary?
Adam D Ruppe
destructionator at gmail.com
Fri Jul 22 12:56:44 UTC 2022
On Friday, 22 July 2022 at 12:33:37 UTC, Anthony Quizon wrote:
> Is this a bug or am I doing something wrong?
I think this is a bug. The compiler must not take well to this
pattern, maybe the assoc array template argument, but idk. It
looks like the first type used gets cached and reused even if it
is supposed to change.
I vaguely recall seeing this before.... but yeah smells buggy
anyway.
An alternative you might consider is dropping some of the type
and using typeof(this):
```
module foo;
mixin template opBi(
alias f0
) {
static foreach (k, f; f0) { typeof(this) opBinary(string op:
k)(typeof(this) r) { return f(this, r); } }
}
struct A {
mixin opBi!(
[ "+": (A a, A b) => a],
);
}
struct B {
mixin opBi!(
[ "+": (B a, B b) => a],
);
}
```
That sidesteps the bug though it just trusts you pass the right
type to `f0`.
More information about the Digitalmars-d-learn
mailing list