Subject: Re: [boost] [variant] Why no move emulation with Boost.Move for C++03?
From: Krzysztof Czainski (1czajnik_at_[hidden])
Date: 2014-04-14 04:53:24
2014-04-14 10:34 GMT+02:00 Antony Polukhin <antoshkka_at_[hidden]>:
> 2014-04-14 10:16 GMT+04:00 Adam Romanek <romanek.adam_at_[hidden]>:
> > On 04/13/2014 02:59 PM, Steven Watanabe wrote:
> >> Boost.Move is not completely backwards
> >> compatible. i.e. adding it to an existing
> >> class can break user code.
> > Steven, could you please elaborate on this? I mean how can it break
> > existing code? And what about backward compatibility? I haven't found
> > anything on it in the documentation. Thanks in advance.
> Main restriction that affect portability is described here:
> operator in classes derived from or holding copyable and
> movable types")
> It is a big problem. For example this limitation broke compilation of
> Boost.ProgramOptions after move emulation was added to Boost.Any:
> Because of that restriction Boost.Variant, Boost.Any and
> Boost.CircularBuffer do not use Boost.Move emulation everywhere. For those
> libraries some of the move functions are available only in C++11 mode.
I think with an assignment operator implemented in terms of the
pass-by-value and swap idiom, you get a CopyAssignamble as well as a
MoveAssignable type without this issue. I described this here  together
with my 'explicit copy' proposition.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk