Shortcut evaluation for hierarchy of in contracts

Walter Bright newshound2 at digitalmars.com
Fri Jul 1 10:57:39 PDT 2011


On 7/1/2011 9:56 AM, Daniel Murphy wrote:
> If I understand this correctly, you think the following code should be
> perfectly valid:
>
> class A { void func(uint x) in { assert(x<  10); } body {} }
> class B : A { void func(uint x) in { assert(x == 50); } body {} }

Yes.

> If A.func can be called with any value 0..10, why is it legal to override it
> with a function that can't accept these values?

It isn't. An overriding function *must* accept all input that the overridden 
function does.

In other words, overriding functions accept a superset of the input, and deliver 
a subset of the output.


> Can you give an example
> where accepting input that is not a superset of the overriden function's
> possible input is valid?

No.



More information about the Digitalmars-d mailing list