struct opEquals does not work with parameter of same type - bug or feature?

Jonathan M Davis jmdavisProg at gmx.com
Mon Aug 29 18:00:38 PDT 2011


On Monday, August 29, 2011 22:41:26 Sean Eskapp wrote:
> I am trying to build a struct with equality testing, using this code:
> 
> struct Foo
> {
>     const bool opEquals(Foo f)
>     {
>         return true;
>     }
> }
> 
> This gives me the error that the parameter should be of type "ref const
> Foo". Fine.
> 
> struct Foo
> {
>     const bool opEquals(ref const Foo f)
>     {
>         return true;
>     }
> }
> 
> This, however, does not work with code like:
> 
> Foo bar()
> {
>     return Foo();
> }
> 
> assert(Foo() == bar());
> 
> "function Foo.opEquals(ref const const(Foo) f) const is not callable using
> argument types (Foo)" and "bar() is not an lvalue".
> 
> How can I do this?

http://d.puremagic.com/issues/show_bug.cgi?id=3659

http://stackoverflow.com/questions/6986175/const-ref-and-rvalue-in-d

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list