On Friday, 29 January 2016 at 15:13:45 UTC, Mike Parker wrote:
The first implementation is fine because you're overriding the implementation in the base class (Object). However, the second one fails because it's a template. Templates are non-virtual and cannot override anything. Even if you could, there is no such implementation in Object and, therefore, nothing to override.

Templated functions can be used as overloads, though, but I'm not sure off the top of my head if the compiler accepts templated opEquals on classes at all. My guess is no, but you can find out by removing the override from the template declaration. If not, you should be able to implement non-templated overloads for the types you're interested in (without the override keyword, mind you, since they won't be overriding anything).

Hm, I should've thought to try that. I was able to get things working as I wanted them to by doing this:

    override bool opEquals(Object value) const{
        return this.equals(cast(typeof(this)) value);
    }
    bool opEquals(T)(T value){
        return this.equals(value);
    }

Reply via email to