contravariant argument types: wanna?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Sep 27 09:52:54 PDT 2009


BCS wrote:
> Hello Walter,
> 
>> Andrei Alexandrescu wrote:
>>
>>> 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.
>>>
>> I would really want to get away from the notion of selecting which
>> function is overridden based on being a "better" match.
>>
> 
> a torture test:
> 
> class B
> {
>   void Fn (D,B) {}
>   void Fn (B,D) {}
> }
> 
> class D : B
> {
>   void Fn(B,B) {} // override D,B or B,D?
> }
> 
> 

This is simple - it overrides both. There are more complicated cases 
with longer inheritance chains and overloads defined in the derived 
classes.

I think it's ok to hold off contravariance for now.

Andrei



More information about the Digitalmars-d mailing list