[Boost-bugs] [Boost C++ Libraries] #9644: Containers and move-only elements w/Move Emulation

Subject: [Boost-bugs] [Boost C++ Libraries] #9644: Containers and move-only elements w/Move Emulation
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-02-07 23:26:01


#9644: Containers and move-only elements w/Move Emulation
--------------------------------------------+------------------------
 Reporter: John M. DÅ‚ugosz <mpbecey7gu@…> | Owner: igaztanaga
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: container
  Version: Boost 1.49.0 | Severity: Problem
 Keywords: |
--------------------------------------------+------------------------
 The definition of boost::container::vector includes:
 BOOST_COPYABLE_AND_MOVABLE
 rather than BOOST_MOVABLE_BUT_NOT_COPYABLE if the element type cannot be
 copied.

 If I have:

 {{{
     typedef boost::container::vector<MyType> VecType;

     VecType foo()
         {
         â‹®
         return boost::move(some_other_vec);
         }

     VecType x= foo();
 }}}


 On a configuration with BOOST_NO_RVALUE_REFERENCES defined, this gives an
 error within VecType's copy constructor, since MyType cannot be copied.

 If I write

 {{{
     VecType x= boost::move(foo());
 }}}

 then I get an error that no matching move is viable, as the move(T&) wants
 an lvalue as the argument.

 I can't write the return type of foo to be rv<VecType> because that can't
 be copied (fake move-out like auto_pointer) either; the members are
 declared private and never defined.

 This is a bug on Boost.Container, as it defines the copy constructor and
 the move emulation is not good enough to avoid the defined copy
 constructor.

 (The project I found this on was using Boost 1.49. It is unchanged in the
 current version, but I've not tested it on that.)

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/9644>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:15 UTC