Yes, that's part of the standard expectations for std::move, and thus
mozilla::Move as well.


On Thu, Jul 7, 2016 at 6:53 AM, Gerald Squelart <squel...@gmail.com> wrote:

> On Monday, May 2, 2016 at 9:49:24 AM UTC+10, Jim Blandy wrote:
> > No, we don't know that [moved-from strings become empty].
> > The contract of a move in C++ is simply that the
> > source object is safe to destruct, but otherwise in an undefined state*.
> You
> > must not make any assumptions about its value.
> * (To be fair, in that context I think you were only arguing there that we
> can't assume anything about the value, but didn't explicitly rule out a
> reassignment.)
>
> Sorry to revive this old thread, but I've just noticed that our MFBT
> Swap() is written in terms of Move()'s:
> > template<typename T>
> > inline void
> > Swap(T& aX, T& aY)
> > {
> >   T tmp(Move(aX));
> >   aX = Move(aY);
> >   aY = Move(tmp);
> > }
> This assumes that a moved-from object can safely be assigned to -- Which
> used to seem reasonable to me, but I got confused after our discussions
> here!
>
> Clang's std::swap does the same! (With extra checks that the type is move
> constructible&assignable.)
>
> So can we assume that any moved-from object should be left in a state that
> is safe to destruct AND safe to be assigned to?
>
> But no assumption can be made about the actual contained value, i.e.: It
> could be the same, it could be empty, or it could be in some unsafe-to-use
> state until destroyed or overwritten.
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
>
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to