Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r79560 - branches/release/boost/move
From: igaztanaga_at_[hidden]
Date: 2012-07-16 05:05:33


Author: igaztanaga
Date: 2012-07-16 05:05:33 EDT (Mon, 16 Jul 2012)
New Revision: 79560
URL: http://svn.boost.org/trac/boost/changeset/79560

Log:
Merged from trunk
Properties modified:
   branches/release/boost/move/ (props changed)
Text files modified:
   branches/release/boost/move/move.hpp | 29 ++++++++++++++++++++++-------
   1 files changed, 22 insertions(+), 7 deletions(-)

Modified: branches/release/boost/move/move.hpp
==============================================================================
--- branches/release/boost/move/move.hpp (original)
+++ branches/release/boost/move/move.hpp 2012-07-16 05:05:33 EDT (Mon, 16 Jul 2012)
@@ -217,7 +217,7 @@
 #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
 
    //Move emulation rv breaks standard aliasing rules so add workarounds for some compilers
- #ifdef __GNUC__
+ #if defined(__GNUC__) && (__GNUC__ >= 4)
       #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))
    #else
       #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS
@@ -812,13 +812,18 @@
    C* container_m;
 
    public:
- typedef C container_type;
+ typedef C container_type;
+ typedef typename C::value_type value_type;
+ typedef typename C::reference reference;
 
    explicit back_move_insert_iterator(C& x) : container_m(&x) { }
 
- back_move_insert_iterator& operator=(typename C::reference x)
+ back_move_insert_iterator& operator=(reference x)
    { container_m->push_back(boost::move(x)); return *this; }
 
+ back_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+ { reference rx = x; return this->operator=(rx); }
+
    back_move_insert_iterator& operator*() { return *this; }
    back_move_insert_iterator& operator++() { return *this; }
    back_move_insert_iterator& operator++(int) { return *this; }
@@ -847,13 +852,18 @@
    C* container_m;
 
 public:
- typedef C container_type;
+ typedef C container_type;
+ typedef typename C::value_type value_type;
+ typedef typename C::reference reference;
 
    explicit front_move_insert_iterator(C& x) : container_m(&x) { }
 
- front_move_insert_iterator& operator=(typename C::reference x)
+ front_move_insert_iterator& operator=(reference x)
    { container_m->push_front(boost::move(x)); return *this; }
 
+ front_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+ { reference rx = x; return this->operator=(rx); }
+
    front_move_insert_iterator& operator*() { return *this; }
    front_move_insert_iterator& operator++() { return *this; }
    front_move_insert_iterator& operator++(int) { return *this; }
@@ -880,19 +890,24 @@
    typename C::iterator pos_;
 
    public:
- typedef C container_type;
+ typedef C container_type;
+ typedef typename C::value_type value_type;
+ typedef typename C::reference reference;
 
    explicit move_insert_iterator(C& x, typename C::iterator pos)
       : container_m(&x), pos_(pos)
    {}
 
- move_insert_iterator& operator=(typename C::reference x)
+ move_insert_iterator& operator=(reference x)
    {
       pos_ = container_m->insert(pos_, ::boost::move(x));
       ++pos_;
       return *this;
    }
 
+ move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+ { reference rx = x; return this->operator=(rx); }
+
    move_insert_iterator& operator*() { return *this; }
    move_insert_iterator& operator++() { return *this; }
    move_insert_iterator& operator++(int) { return *this; }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk