should postconditions be evaluated even if Exception is thrown?

Walter Bright newshound1 at digitalmars.com
Wed Dec 2 22:06:07 PST 2009


Brad Roberts wrote:
> Walter Bright wrote:
>> Andrei Alexandrescu wrote:
>>> An exception (not an Error) is an expected and documented outcome of a
>>> function. After having listened to those endless Boeing stories,
>>> please listen to this one :o). Contract Programming covers the
>>> correctness of a program, and exceptions are correct behavior. By your
>>> very Boeing stories that I stoically endured, it seems like the
>>> logical conclusion is that postconditions must be evaluated upon
>>> exceptional return.
>> Consider a constructor. It's postcondition is the class invariant is
>> satisfied. If it throws, the object is not successfully constructed and
>> the invariant does not hold.
> 
> If the constructor fails, the object never existed.  Nothing to validate is valid.

Right. And I can't see how you can validate the output of a function 
that failed. Let's say your function sorts an array, and the post 
condition is the array is sorted. So, what would the postcondition be if 
it failed?

   out (result)
   {
     assert(failed || isSorted(result));
   }

? What's the point?



More information about the Digitalmars-d mailing list