On 03/07/14 20:22, Frustrated wrote:
> On Friday, 7 March 2014 at 09:10:45 UTC, John Colvin wrote:
>> functions introduced through mixin templates do not take part in overload
>> resolution when an overload exists outside the mixin.
>> It's a common annoyance, I can't remember if there's a good reason for it.
>
>
> This seems to be the problem. The mixin thinks they are the same function so
> it doesn't insert it. I guess it just looks at the name rather than the
> complete signature. Would be real nice if that wasn't the case or if one
> could chose the behavior. I can see in some cases it being nice to have the
> current behavior but not all(specifically talking about overloads).
You can explicitly add the function(s) to the overload set, ie
mixin template some_mixin_templ() {
void f() {}
}
struct S {
mixin some_mixin_templ blah;
void f(int) {}
alias f = blah.f; // add the one(s) from the mixin template
}
or use a string mixin (which is less problematic inside a /mixin/ template):
mixin template some_mixin_templ(string CODE="") {
void f() {}
mixin (CODE);
}
struct S {
mixin some_mixin_templ!q{
void f(int) {}
};
}
artur