On Tuesday, 19 April 2022 at 20:29:01 UTC, Steven Schveighoffer wrote:
>You can work around the dual context, if you are OK with passing the second context explicitly.
The easiest way is to move the member function to a UFCS function. an example:
struct X
{
int x;
void applyToX(alias fn)() {fn(x);}
}
void applyToX_alt(alias fn)(ref X xval) {
fn(xval.x);
}
void main()
{
auto s = X(5);
int y = 6;
void fn(ref int x) { x += y; }
s.applyToX!fn; // error, dual context needed
s.applyToX_alt!fn; // fine, only single context needed
}
I used struct to understand the problem. I don't actually have an object context to pass like in your example, the only context I have is template parameters.