On Wed, Oct 2, 2013 at 6:07 AM, Thorsten Ottosen < thorsten.ottosen@dezide.com> wrote:
It's not only a precondition we are dealing with. It's the postcondition of the constructor, that is, the invariant of the class. The normal response to failing to satisfy the postcondition is to throw.
This is very often the case when violating any precondition. The answer is that if you don't violate the precondition, then your variants are not violated. What you describe regarding exceptions actually changes your function's preconditions. In other words, the assert version's precondition is that you do not pass a null pointer. The throw version's precondition does not include that constraint at all -- instead, you've made passing a null pointer acceptable, with the behavior being that an exception is thrown in the case that such a pointer is passed. -- -Matt Calabrese