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).

Reply via email to