On Thursday, 6 December 2018 at 07:37:12 UTC, John Chapman wrote:
Is the compiler giving the non-mixed-in function special
treatment?
I think you're running into this bug:
https://issues.dlang.org/show_bug.cgi?id=19365
I see that it is not limited to operator overloading, in general
the overload set directly put into a struct/class completely
overrides the overload set from mixin templates. mixin strings
seem to work fine, so you can use those as temporary workaround.
Example:
```
mixin template F() {
int fun(int i) {return i;}
}
struct S {
mixin F; // (1)
mixin(`int fun(int i) {return i;}`); // (2)
string fun(string s) {return s;} // (3)
}
void main() {
import std.stdio;
S().fun(1).writeln();
}
```
With only the mixin template (1) it works, adding an overload (3)
breaks it, though adding the string mixin (2) fixes it even
though it should be ambiguous with (1).