Subject: [boost] [contract] invariant checking after destructor throw
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2012-08-28 16:02:54
I have found a potential issue while reading the documentation. (The
documentation is very good BTW). It says that the non-static invariant is
still checked if object's destructor throws an exception. Am I reading it
right? If so, I believe this is not correct. I have two problems with it:
1. According to the standard, an object is considered destroyed (its
life-time has ended) when its destructor *starts*. Even if it throws an
exception, it is considered destroyed, so accessing its members (in order
to check for the invariant) may be illegal (an undefined behavior).
2. Why such an object (that threw on destruction) would need to preserve
the invariant? You cannot access it or use it or even destroy it the second
time, because it has already been destroyed. No-one will notice it anyway.
Or am I missing something?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk