UFCS and operator overloading

Jens Mueller jens.k.mueller at gmx.de
Tue May 8 12:08:44 PDT 2012


Timon Gehr wrote:
> On 05/07/2012 10:37 PM, Nick Sabalausky wrote:
> >"Jens Mueller"<jens.k.mueller at gmx.de>  wrote in message
> >news:mailman.391.1336410464.24740.digitalmars-d at puremagic.com...
> >>Hi,
> >>
> >>from my understanding UFCS is supposed to work with operator overloading.
> >>I.e.
> >>in the following a + b should work
> >>
> >>struct Foo {}
> >>
> >>Foo opBinary(string op)(Foo lhs, Foo rhs) if (op == "+")
> >>{
> >>    return Foo.init;
> >>}
> >>
> >>unittest
> >>{
> >>    Foo a, b;
> >>    a + b; // fails to compile
> >>}
> >>
> >>Is UFCS supposed to work with operator overloading, isn't it?
> >>
> >>Jens
> >
> >I don't know why that doesn't work (unless you just need to make it "auto c
> >= a + b;" so it isn't a "statement has no effect"?), but FWIW that's not an
> >example of UFCS. UFCS would mean calling your opBinary above like this:
> >
> >a.opBinary!"+"(b)
> >
> >Instead of this:
> >
> >opBinary!"+"(a, b)
> >
> >
> 
>  a + b => a.opBinary!"+"(b) => opBinary!"+"(a, b)
>        ^                    ^
> standard rewrite           UFCS

Yes. That's how it should be. I reported it.

Jens


More information about the Digitalmars-d mailing list