What's the correct opEquals signature for structs?

Jonathan M Davis jmdavisProg at gmx.com
Tue Mar 13 17:18:59 PDT 2012


On Wednesday, March 14, 2012 01:14:04 Alex Rønne Petersen wrote:
> On 14-03-2012 01:10, Jonathan M Davis wrote:
> > On Tuesday, March 13, 2012 22:03:45 Alex Rønne Petersen wrote:
> >> Did you see my other post? Maybe we could do something like this:
> >> 
> >> equals_t opEquals()(const auto ref SysTime rhs) const pure nothrow
> > 
> > That would probably work (though I wouldn't use equals_t, since it seems
> > like an utterly pointless alias to me). Still, it shouldn't have to be
> > templated to work with auto ref.
> > 
> > - Jonathan M Davis
> 
> That's arguable...
> 
> The thing is, auto ref, when used on class methods cannot work. The
> reason is simple: Inheritance. An overriding method can't magically take
> both a value and a reference.
> 
> Obviously we can special-case auto ref on structs, but... is this really
> desirable?

As I understand it, auto ref is supposed to work with _any_ function. The 
_compiler_ decides whether it's best to use a ref or a value. That may mean 
that you actually get two of the same function. I don't know. I do know that 
Walter misunderstood what Andrei meant and made it a template thing when it 
wasn't supposed to be. Supposedly, he's going to fix it, but he hasn't yet.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list