Boost logo

Boost :

Subject: Re: [boost] [variant] Why no move emulation with Boost.Move for C++03?
From: Krzysztof Czainski (1czajnik_at_[hidden])
Date: 2014-04-14 05:09:03


2014-04-14 10:53 GMT+02:00 Krzysztof Czainski <1czajnik_at_[hidden]>:

> Main restriction that affect portability is described here:
>>
>> http://www.boost.org/doc/libs/1_55_0/doc/html/move/emulation_limitations.html#move.emulation_limitations.assignment_operator(
>> "Assignment
>> 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:
>>
>> http://boost.2283326.n4.nabble.com/any-last-commit-breaks-program-options-td4645378.html
>>
>> 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 [1] together
> with my 'explicit copy' proposition.
>

I don't think this approach is acceptable for in-place containers like
optional or variant, where the swap operation isn't just a simple pointer
swap.

Regards,
Kris


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk