| |
 | Posted by Quirin Schroll in reply to Lukanian | Permalink Reply |
|
Quirin Schroll 
Posted in reply to Lukanian
| On Monday, 9 June 2025 at 11:39:15 UTC, Lukanian wrote:
> Why UFCS doesn't work with "with" statement?
struct MyStruct1
{
int a, b;
int sum(){
return a+b;
}
}
int difference(ref MyStruct1 self)
{
return self.a-self.b;
}
// in main()
MyStruct1 s = { 1, 2 };
s.difference().writeln; // works fine
with(s){
sum().writeln;
difference().writeln; // error: too few arguments, expected 1, got 0
}
The with block changes the lookup rule so that unqualified symbols (sum and difference in this case) are looked up in the scope of the (type of) the with argument first, only then normal lookup rules (innermost scope first) apply. What with(x) doesn’t do is try to resolve any unqualified symbol s as x.s . If it did that, your code would work.
UFCS doesn’t make members and non-members equivalent, it’s just a calling syntax that works in some cases.
|