Broken contract programing
iackhtak via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 13 05:27:29 PDT 2015
On Wednesday, 13 May 2015 at 12:05:48 UTC, Timon Gehr wrote:
> On 05/13/2015 12:51 PM, iackhtak wrote:
>> There was discussion about broken contract programing. One
>> broken
>> thing was "in" contract within inheritance. If you add
>> different
>> "in"-contract in overridden parent and derived function only
>> one
>> will be checked.
>
> No, this is incorrect. Only one needs to pass and if one does
> not, the other is checked as well.
>
> class C{
> int foo()in{}out(r){assert(r<=10);}body{
> return 3;
> }
> }
> class D: C{
> override int
> foo()in{assert(false);}out(r){assert(r>=10);}body{
> return 10;
> }
> }
>
> void main(){
> D d=new D();
> d.foo();
> }
>
> What is the problem?
>
> The problem you may have read about is that if no contract is
> specified for an overriding function, the parent contract is
> automatically loosened completely:
>
> class C{
> void foo()in{assert(false);}body{}
> }
> class D: C{
> override void foo(){}
> }
>
> void main(){
> D d=new D();
> d.foo(); // ok
> }
So I misunderstood this feature:( But the topic thing still a
solution.
More information about the Digitalmars-d
mailing list