
on Fri Jan 25 2013, Krzysztof Czainski <1czajnik-AT-gmail.com> wrote:
2013/1/25 Gottlob Frege <gottlobfrege@gmail.com>
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".
If you had opinions on that aspect, you might want to weigh in. It would be appreciated.
Tony
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.
Then you propose to weaken the invariant of variant and as a side-effect, break some existing code. That's fine, as long as you appreciate the consequences of that approach. -- Dave Abrahams BoostPro Computing Software Development Training http://www.boostpro.com Clang/LLVM/EDG Compilers C++ Boost