|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2002-11-17 12:53:52
Thorsten Ottosen <nesotto_at_[hidden]> writes:
> ----- Original Message -----
> From: "Peter Dimov" <pdimov_at_[hidden]>
> [nip]
>> In general, it is recommended practice to always assert() preconditions in
>> client code, instead of relying on in-library asserts. First, the library
> is
>> not required to have asserts, and second, the earlier you catch
> precondition
>> violations, the better (call stacks aren't universally available).
>
> I don't get this. It's a poor library if it does not even check its
> own preconditions in eg. debug mode.
Not all preconditions are effectively checkable.
> Moreover, if you put the precondition in the library, you take the
> burden away from the client
No you don't. Either it's a precondition or it's not. If the library
documents behavior in case of a "precondition violation", it's not a
precondition anymore. The client can call the function and reasonably
expect the documented behavior.
> this is highly recommeded since it encapsulates commen code _one_
> place, not O(n) places!
You can always add wrappers that add the checking you desire, and more
importantly, implement some useful (to you) response to a failed
check. However, there's no way to take away checking if it gets put in
the library, and there's no way to change the response in case of a
failed check if it's not the response you need.
-- David Abrahams dave_at_[hidden] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk