Boost logo

Boost :

Subject: Re: [boost] [variant] Please vote for behavior
From: Dave Abrahams (dave_at_[hidden])
Date: 2013-01-25 19:05:17


on Fri Jan 25 2013, Gottlob Frege <gottlobfrege-AT-gmail.com> wrote:

> On Fri, Jan 25, 2013 at 10:21 AM, Dave Abrahams <dave_at_[hidden]> 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

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk