Subject: Re: [boost] [variant] Please vote for behavior
From: Dave Abrahams (dave_at_[hidden])
Date: 2013-01-25 18:58:55
on Fri Jan 25 2013, Neil Groves <neil-AT-grovescomputing.com> wrote:
>> I think variant after move is like int without initialization:
>> int i;
>> cout << i; // don't do this
>> If the fact, that moved-from objects are only good for destruction or
>> assignment-to is accepted, then invariants for moved-from objects are
>> allowed to be violated.
> I completely agree with the notion that a moved-from object simply should
> not be used in any manner.
Well, that's just wrong, for the non-destructive move model used by the
standard. The standard library relies on the ability to both assign
and destroy moved-from elements. If you want destructive move, that's a
whole research project. We on the committee who created rvalue
references couldn't figure out how to make it work.
> It is interestingly divergent from the typical Design by Contract
> idiom. It is much more usual, in my experience for the
> class-invariants to hold up to and including entry to the destructor.
I don't understand what any of that means.
> It seems that this divergence is of little importance to users of the
> language since we are not explicitly interested in calling the
Indeed we are! Trying to keep track of which elements have been
moved-from so you can avoid calling the destructor gets very hairy, very
quickly. Again, we couldn't figure out how to do it.
> If I understand correctly the standard is divergent
divergent from what?
> to allow sensible compiler implementations of clean-up code for
> moved-from objects.
I don't understand what you're saying here, either.
-- 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