$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [contract] move operations and class invariants
From: Peter Dimov (lists_at_[hidden])
Date: 2017-11-29 14:15:16
Lorenzo Caminiti wrote:
> C++ requires that moved-from objects can still be destructed. Because
> contract programming requires class invariants to hold at destructor
> entry, it follows that moved-from objects must still satisfy class
> invariants.
No, moved-from objects must be valid objects. Not only can they be
destroyed, they must be usable. Their state is unspecified, but invariants
hold.
> That sounds restrictive... and it might force the class invariants to be
> empty. For example, for vector a class invariant is size() <= capacity().
> Should that sill hold after the vector has been moved?
Yes.
> That means I can still call size() and capacity() on a moved-from object,
> which might not be the case.
No. You must be able to call size() and capacity().