
on Fri Jan 25 2013, Gottlob Frege <gottlobfrege-AT-gmail.com> wrote:
On Fri, Jan 25, 2013 at 10:21 AM, Dave Abrahams <dave@boostpro.com> wrote:
Isn't leaving the class with it's invariants broken simply a defect?
Yes. IIUC the question here is whether the invariant of variant [;-)] shall be weakened to accommodate efficient move semantics, thereby breaking some code, or not, at some cost (the specific costs to be incurred by various strategies presently under discussion).
But I have to admit, I haven't been reading the thread all that carefully, so I could be mis-understanding completely.
Instead of weakened, which is one option discussed, I would also characterize much of the discussion as "let's ignore that the invariant is broken, because no one should rely on invariants after move".
By definition, the invariant can never be broken until the lifetime of the object ends, except during individual mutations to that object. If you "ignore the the invariant is broken," you've just mis-identified the true invariant.
If you had opinions on that aspect, you might want to weigh in. It would be appreciated.
If you want the concept of invariants to have any power at all, e.g. to help you reason about code, the invariant has to describe the actual possible states of the object. Anything else is worse than useless. -- Dave Abrahams BoostPro Computing Software Development Training http://www.boostpro.com Clang/LLVM/EDG Compilers C++ Boost