On Tue, 22 Sep 2009 22:58:24 -0400, Andrei Alexandrescu <[email protected]> wrote:

Practically, there may be cases in which the derived class wants to make clear that it only needs a more general parameter type. Because of that, you'd be able to issue calls that you otherwise can't. Consider:

class A { void fun(Y); }
static if (contravariance)
     class B : A { override void fun(X); }
else
     class B : A { override void fun(Y); }
class X { }
class Y : X { }
class Z : X { }

If what you have is a B and a Z, there is absolutely no way you could make the call B.fun(Z) without contravariance. Z is unrelated to Y and therefore casting it to a Y would throw.

Now the only issue is giving good names for A, B, X, Y, and Z :o).

Ah, yes, I did not think of the case of a tree vs. a line :)

this is a better example than your original...

-Steve

Reply via email to