Inheritance of purity

Piotr Szturmaj bncrbme at jadamspam.pl
Fri Feb 17 06:02:37 PST 2012


Gor Gyolchanyan wrote:
> This is clearly a bug, because auto is just another way of specifying
> a valid static type.

I don't know if overriding auto makes sense at all. If you override 
something you should specify return type which is covariant with 
overrided function's one. Why would you use auto return type?

But wait... One use case where it can be helpful is overriding a 
function that return derived class and derived class is based on 
template parameter:

class A {}
class B : A {}
class C : A {}

class Test1
{
     A getA() { return new A(); }
}

class Test2(T : A) : Test1
{
     override auto getA() { return new T(); }
}

void test()
{
     (new Test2!B()).getA();
     (new Test2!C()).getA();
}

It doesn't currently compile, but if I change auto to T it does. It may 
be a compiler bug as you've pointed.

It's a simplified example, T may be not directly known (but still 
covariant to A), i.e. accesing it may be far more complex than showed by 
above example.

This is the only use case of override auto that come to my mind.

> On Fri, Feb 17, 2012 at 5:22 PM, Piotr Szturmaj<bncrbme at jadamspam.pl>  wrote:
>> Gor Gyolchanyan wrote:
>>>
>>> Aside the fact, that it's highly ambiguous, the programmers would
>>> start forgetting to write that auto :-)
>>
>>
>> Actually you can't override an auto function so its not ambiguous. It's
>> currently impossible to do:
>>
>> override auto func() { }


More information about the Digitalmars-d mailing list