
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 destructor.
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