contravariant argument types: wanna?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Sep 23 05:26:35 PDT 2009


Walter Bright wrote:
> Andrei Alexandrescu wrote:
>> Today D does not support contravariant arguments, but Walter told me 
>> once he'd be quite willing to implement them. It is definitely the 
>> right thing to do, but Walter would want to see a compelling example 
>> before getting to work.
> 
> The stumbling block to contravariant parameters (not arguments) is how 
> it throws a monkey wrench into the overloading rules. The problem is 
> deciding if a function overrides or overloads, when its parameter types 
> are different.
> 
> The current rule is simple: if the parameter types are identical, it 
> overrides. If they are not identical, it overloads.

I don't see that as a huge problem. First off, right now the override 
keyword is required (and for good reason, I might add). Second, the new 
rule is simple: if the overriding function can be called with the 
overriden function's arguments, it is overriding it. True, things get 
more complicated when the base class also defines a corresponding overload:

class A {
     void fun(A);
     void fun(B);
}

class B : A {
     override void fun(A);
}

This must be either an error, or the case that B.fun overrides both 
overloads of fun in A.


Andrei



More information about the Digitalmars-d mailing list