Why UFCS doesn't work with "with" statement?
Doigt
labog at outlook.com
Mon Jun 9 14:43:48 UTC 2025
On Monday, 9 June 2025 at 11:39:15 UTC, Lukanian wrote:
> Why UFCS doesn't work with "with" statement?
>
> ```d
> 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
> }
> ```
It took me a while what you were trying to do, but I think I get
it now. I'm not an expert on D, but from what I understand, the
reason why it doesn't work is because the difference function is
not a method of the struct. The "with" keyword works what's a
member of the argument. So essentially yeah, you're calling
difference without any argument.
More information about the Digitalmars-d
mailing list