$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r81652 - in trunk/boost/variant: . detail
From: antoshkka_at_[hidden]
Date: 2012-12-01 10:32:08
Author: apolukhin
Date: 2012-12-01 10:32:07 EST (Sat, 01 Dec 2012)
New Revision: 81652
URL: http://svn.boost.org/trac/boost/changeset/81652
Log:
Refs #7718 :
Workaroung GCC-4.7.2 internal compiler error
More functions marked with BOOST_NOEXCEPT
Added move constructors and move assignment operators to recursive_wrapper
Text files modified: 
   trunk/boost/variant/detail/backup_holder.hpp |     7 ++++---                                 
   trunk/boost/variant/recursive_wrapper.hpp    |    39 +++++++++++++++++++++++++++++++++++++-- 
   trunk/boost/variant/variant.hpp              |     2 +-                                      
   3 files changed, 42 insertions(+), 6 deletions(-)
Modified: trunk/boost/variant/detail/backup_holder.hpp
==============================================================================
--- trunk/boost/variant/detail/backup_holder.hpp	(original)
+++ trunk/boost/variant/detail/backup_holder.hpp	2012-12-01 10:32:07 EST (Sat, 01 Dec 2012)
@@ -13,6 +13,7 @@
 #ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
 #define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
 
+#include "boost/config.hpp"
 #include "boost/assert.hpp"
 
 namespace boost {
@@ -32,7 +33,7 @@
         delete backup_;
     }
 
-    explicit backup_holder(T* backup)
+    explicit backup_holder(T* backup) BOOST_NOEXCEPT
         : backup_(backup)
     {
     }
@@ -53,7 +54,7 @@
         return *this;
     }
 
-    void swap(backup_holder& rhs)
+    void swap(backup_holder& rhs) BOOST_NOEXCEPT
     {
         T* tmp = rhs.backup_;
         rhs.backup_ = this->backup_;
@@ -83,7 +84,7 @@
 }
 
 template <typename T>
-void swap(backup_holder<T>& lhs, backup_holder<T>& rhs)
+void swap(backup_holder<T>& lhs, backup_holder<T>& rhs) BOOST_NOEXCEPT
 {
     lhs.swap(rhs);
 }
Modified: trunk/boost/variant/recursive_wrapper.hpp
==============================================================================
--- trunk/boost/variant/recursive_wrapper.hpp	(original)
+++ trunk/boost/variant/recursive_wrapper.hpp	2012-12-01 10:32:07 EST (Sat, 01 Dec 2012)
@@ -14,6 +14,7 @@
 #define BOOST_VARIANT_RECURSIVE_WRAPPER_HPP
 
 #include "boost/variant/recursive_wrapper_fwd.hpp"
+#include "boost/variant/detail/move.hpp"
 #include "boost/checked_delete.hpp"
 
 namespace boost {
@@ -43,6 +44,11 @@
     recursive_wrapper(const recursive_wrapper& operand);
     recursive_wrapper(const T& operand);
 
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES 
+    recursive_wrapper(recursive_wrapper&& operand);
+    recursive_wrapper(T&& operand);
+#endif
+
 private: // helpers, for modifiers (below)
 
     void assign(const T& rhs);
@@ -61,13 +67,28 @@
         return *this;
     }
 
-    void swap(recursive_wrapper& operand)
+    void swap(recursive_wrapper& operand) BOOST_NOEXCEPT
     {
         T* temp = operand.p_;
         operand.p_ = p_;
         p_ = temp;
     }
 
+    
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES 
+    recursive_wrapper& operator=(recursive_wrapper&& rhs) BOOST_NOEXCEPT
+    {
+        swap(rhs);
+        return *this;
+    }
+
+    recursive_wrapper& operator=(T&& rhs)
+    {
+        get() = detail::variant::move(rhs);
+        return *this;
+    }
+#endif
+
 public: // queries
 
     T& get() { return *get_pointer(); }
@@ -102,6 +123,20 @@
 {
 }
 
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES 
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(recursive_wrapper&& operand)
+    : p_(new T( detail::variant::move(operand.get()) ))
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(T&& operand)
+    : p_(new T( detail::variant::move(operand) ))
+{
+}
+#endif
+
 template <typename T>
 void recursive_wrapper<T>::assign(const T& rhs)
 {
@@ -113,7 +148,7 @@
 // Swaps two recursive_wrapper<T> objects of the same type T.
 //
 template <typename T>
-inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs)
+inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs) BOOST_NOEXCEPT
 {
     lhs.swap(rhs);
 }
Modified: trunk/boost/variant/variant.hpp
==============================================================================
--- trunk/boost/variant/variant.hpp	(original)
+++ trunk/boost/variant/variant.hpp	2012-12-01 10:32:07 EST (Sat, 01 Dec 2012)
@@ -1380,7 +1380,7 @@
         destroy_content();
     }
 
-    variant() BOOST_NOEXCEPT_IF(boost::has_nothrow_constructor<internal_T0>::type::value)
+    variant()
     {
         // NOTE TO USER :
         // Compile error from here indicates that the first bound