Robert Jacques wrote: > On Thu, 30 Jun 2011 06:42:57 -0400, Jens Mueller > <jens.k.muel...@gmx.de> wrote: > > >bearophile wrote: > >>Jens Mueller: > >> > >>> unittest { > >>> class Base { > >>> void foo(uint i) > >>> in { assert(i <= 10); } > >>> body { } > >>> } > >>> > >>> class Sub : Base { > >>> override void foo(uint i) > >>> in { assert(i <= 5); } // fails to require less > >>but I won't know > >>> body > >>> { > >>> assert(i <= 5); // fails here because in contract > >>wasn't checked > >>> } > >>> } > >>> > >>> auto s = new Sub; > >>> //s.foo(10); // fails as expected > >>> s.foo(7); // due to shortcut evaluation of in contracts > >>this call passes all contracts > >>> } > >> > >>I think it's a DMD bug, fit for Bugzilla if not already present. > > > >The shortcut evaluation is specified in TDPL. That's why I assume the > >behavior is intended. > > > >Jens > > A subclass must be able to handle all the inputs the base class > accepts, otherwise it isn't true polymorphism anymore. Not being > able to use Sub where Base is expected, and maybe only Base was > tested, can lead to major bugs.
So you agree that the current behavior is error-prone? Jens