|
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