On 4/19/22 8:44 PM, Andrey Zherikov wrote:
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:

```d
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.


That's because your code is not an example of the dual context problem -- only one context is needed. Your code is triggering an actual bug in the compiler.

-Steve

Reply via email to