$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r80365 - in sandbox/libpoet/trunk: poet test
From: fmhess_at_[hidden]
Date: 2012-09-02 15:53:15
Author: fmhess
Date: 2012-09-02 15:53:14 EDT (Sun, 02 Sep 2012)
New Revision: 80365
URL: http://svn.boost.org/trac/boost/changeset/80365
Log:
Fixed some compile errors when compiling in C++11 mode.
Text files modified: 
   sandbox/libpoet/trunk/poet/future.hpp        |     9 +                                       
   sandbox/libpoet/trunk/poet/future_select.hpp |     2                                         
   sandbox/libpoet/trunk/poet/monitor_locks.hpp |   238 +++++++++++++++++++++++++++++++-------- 
   sandbox/libpoet/trunk/test/Makefile          |     8                                         
   4 files changed, 200 insertions(+), 57 deletions(-)
Modified: sandbox/libpoet/trunk/poet/future.hpp
==============================================================================
--- sandbox/libpoet/trunk/poet/future.hpp	(original)
+++ sandbox/libpoet/trunk/poet/future.hpp	2012-09-02 15:53:14 EDT (Sun, 02 Sep 2012)
@@ -113,7 +113,10 @@
 
                                         if(_posting_closed) return connection;
 
-					slot_type slot(&waiter_event_queue::post<event_queue::event_type>, this, _1);
+					//The following static_cast is just there to work around what I think is a g++ 4.4.5 bug when
+					//compiling in c++0x mode (it gives a compile error without the cast)
+					slot_type slot(static_cast<void (waiter_event_queue::*)(const event_queue::event_type &)>
+						(&waiter_event_queue::post<event_queue::event_type>), this, _1);
                                         BOOST_ASSERT(_weak_this.expired() == false);
                                         slot.track(_weak_this);
                                         connection = other._event_posted.connect(slot);
@@ -505,7 +508,7 @@
                         {}
                         ~promise_body()
                         {
-				renege(copy_exception(uncertain_future()));
+				renege(poet::copy_exception(uncertain_future()));
                         }
 
                         void fulfill(const T &value)
@@ -960,7 +963,7 @@
                         {
                                 boost::shared_ptr<typename nonvoid_future_body_base<T>::type> new_object(
                                         future_body<typename nonvoid<T>::type>::create());
-				new_object->cancel(copy_exception(uncertain_future()));
+				new_object->cancel(poet::copy_exception(uncertain_future()));
                                 return new_object;
                         }
                 };
Modified: sandbox/libpoet/trunk/poet/future_select.hpp
==============================================================================
--- sandbox/libpoet/trunk/poet/future_select.hpp	(original)
+++ sandbox/libpoet/trunk/poet/future_select.hpp	2012-09-02 15:53:14 EDT (Sun, 02 Sep 2012)
@@ -137,7 +137,7 @@
                                 for(i = 0; i < extra_selected; ++i)
                                 {
                                         dependent = _selected_promises.back().lock();
-					if(dependent) dependent->cancel(copy_exception(uncertain_future()));
+					if(dependent) dependent->cancel(poet::copy_exception(uncertain_future()));
                                         _selected_promises.pop_back();
                                 }
 
Modified: sandbox/libpoet/trunk/poet/monitor_locks.hpp
==============================================================================
--- sandbox/libpoet/trunk/poet/monitor_locks.hpp	(original)
+++ sandbox/libpoet/trunk/poet/monitor_locks.hpp	2012-09-02 15:53:14 EDT (Sun, 02 Sep 2012)
@@ -76,9 +76,16 @@
                         {
                                 set_wait_function();
                         }
+			//move constructors
                         template<typename OtherLock>
+			#if BOOST_NO_RVALUE_REFERENCES
                         lock_wrapper(boost::detail::thread_move_t<OtherLock> other):
                                 _mon(other->_mon), _mon_raw_ptr(other->_mon_raw_ptr), _lock(other->_lock.move())
+			#else
+			lock_wrapper(OtherLock &&other):
+				_mon(std::move(other._mon)), _mon_raw_ptr(std::move(other._mon_raw_ptr)),
+				_lock(std::move(other._lock))
+			#endif
                         {
                                 set_wait_function();
                         }
@@ -222,6 +229,8 @@
                 monitor_unique_lock(Monitor &mon, const U &arg):
                         base_class(mon, arg)
                 {}
+
+		#ifdef BOOST_NO_RVALUE_REFERENCES
                 // move constructors
                 monitor_unique_lock(boost::detail::thread_move_t<monitor_unique_lock> other):
                         base_class(other)
@@ -235,6 +244,7 @@
                 {
                         return boost::detail::thread_move_t<monitor_unique_lock>(*this);
                 }
+
                 template<typename Lock>
                 monitor_unique_lock& operator=(boost::detail::thread_move_t<Lock> other)
                 {
@@ -246,6 +256,30 @@
                 {
                         return move();
                 }
+		
+		#else
+		monitor_unique_lock(monitor_unique_lock &&other):
+			base_class(std::move(other))
+		{}
+		monitor_unique_lock(monitor_upgrade_lock<Monitor> &&other):
+			base_class(std::move(other))
+		{}
+
+		// move emulation
+		monitor_unique_lock&& move()
+		{
+			return std::move(*this);
+		}
+
+		template<typename Lock>
+		monitor_unique_lock& operator=(Lock &&other)
+		{
+			monitor_unique_lock temp(std::move(other));
+			this->swap(temp);
+			return *this;
+		}
+		#endif
+
         };
 
         template<typename Monitor>
@@ -254,12 +288,21 @@
                 lockA.swap(lockB);
         }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
         template<typename Monitor>
         boost::detail::thread_move_t<monitor_unique_lock<Monitor> >
                 move(monitor_unique_lock<Monitor> &lock)
         {
                 return lock.move();
         }
+#else
+	template<typename Monitor>
+	monitor_unique_lock<Monitor> &&
+		move(monitor_unique_lock<Monitor> &lock)
+	{
+		return std::move(lock);
+	}
+#endif
 
         template<typename Monitor>
         class monitor_shared_lock: public detail::lock_wrapper<Monitor,
@@ -279,6 +322,7 @@
                 monitor_shared_lock(Monitor &mon, const U &arg):
                         base_class(mon, arg)
                 {}
+		#ifdef BOOST_NO_RVALUE_REFERENCES
                 // move constructors
                 monitor_shared_lock(boost::detail::thread_move_t<monitor_shared_lock> other):
                         base_class(other)
@@ -290,6 +334,48 @@
                         base_class(other)
                 {}
 
+		// move emulation
+		boost::detail::thread_move_t<monitor_shared_lock> move()
+		{
+			return boost::detail::thread_move_t<monitor_shared_lock>(*this);
+		}
+		template<typename Lock>
+		monitor_shared_lock& operator=(boost::detail::thread_move_t<Lock> other)
+		{
+			monitor_shared_lock temp(other);
+			this->swap(temp);
+			return *this;
+		}
+		operator boost::detail::thread_move_t<monitor_shared_lock>()
+		{
+			return move();
+		}
+		#else
+		// move constructors
+		monitor_shared_lock(monitor_shared_lock<Monitor> &&other):
+			base_class(std::move(other))
+		{}
+		monitor_shared_lock(monitor_upgrade_lock<Monitor> &&other):
+			base_class(std::move(other))
+		{}
+		monitor_shared_lock(monitor_unique_lock<Monitor> &&other):
+			base_class(std::move(other))
+		{}
+
+		// move emulation
+		monitor_shared_lock&& move()
+		{
+			return std::move(*this);
+		}
+		template<typename Lock>
+		monitor_shared_lock& operator=(Lock &&other)
+		{
+			monitor_shared_lock temp(std::move(other));
+			this->swap(temp);
+			return *this;
+		}
+		#endif
+
                 // monitor extensions to lock interface, only allow pointer to const access for shared_lock
                 const typename base_class::element_type* operator->() const
                 {
@@ -307,23 +393,6 @@
                         }
                         return *this->_mon.direct().get();
                 }
-
-		// move emulation
-		boost::detail::thread_move_t<monitor_shared_lock> move()
-		{
-			return boost::detail::thread_move_t<monitor_shared_lock>(*this);
-		}
-		template<typename Lock>
-		monitor_shared_lock& operator=(boost::detail::thread_move_t<Lock> other)
-		{
-			monitor_shared_lock temp(other);
-			this->swap(temp);
-			return *this;
-		}
-		operator boost::detail::thread_move_t<monitor_shared_lock>()
-		{
-			return move();
-		}
         };
 
         template<typename Monitor>
@@ -332,12 +401,21 @@
                 lockA.swap(lockB);
         }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
         template<typename Monitor>
         boost::detail::thread_move_t<monitor_shared_lock<Monitor> >
                 move(monitor_shared_lock<Monitor> &lock)
         {
                 return lock.move();
         }
+#else
+	template<typename Monitor>
+	monitor_shared_lock<Monitor> &&
+		move(monitor_shared_lock<Monitor> &lock)
+	{
+		return std::move(lock);
+	}
+#endif
 
         template<typename Monitor>
         class monitor_upgrade_lock: public detail::lock_wrapper<Monitor,
@@ -357,6 +435,7 @@
                 monitor_upgrade_lock(Monitor &mon, const U &arg):
                         base_class(mon, arg)
                 {}
+		#ifdef BOOST_NO_RVALUE_REFERENCES
                 // move constructors
                 monitor_upgrade_lock(boost::detail::thread_move_t<monitor_upgrade_lock> other):
                         base_class(other)
@@ -365,6 +444,45 @@
                         base_class(other)
                 {}
 
+		// move emulation
+		boost::detail::thread_move_t<monitor_upgrade_lock> move()
+		{
+			return boost::detail::thread_move_t<monitor_upgrade_lock>(*this);
+		}
+		template<typename Lock>
+		monitor_upgrade_lock& operator=(boost::detail::thread_move_t<Lock> other)
+		{
+			monitor_upgrade_lock temp(other);
+			this->swap(temp);
+			return *this;
+		}
+		operator boost::detail::thread_move_t<monitor_upgrade_lock>()
+		{
+			return move();
+		}
+		#else
+		// move constructors
+		monitor_upgrade_lock(monitor_upgrade_lock<Monitor> && other):
+			base_class(std::move(other))
+		{}
+		monitor_upgrade_lock(monitor_unique_lock<Monitor> && other):
+			base_class(std::move(other))
+		{}
+
+		// move emulation
+		monitor_upgrade_lock && move()
+		{
+			return std::move(*this);
+		}
+		template<typename Lock>
+		monitor_upgrade_lock& operator=(Lock && other)
+		{
+			monitor_upgrade_lock temp(std::move(other));
+			this->swap(temp);
+			return *this;
+		}
+		#endif
+
                 // monitor extensions to lock interface, only allow pointer to const access for upgrade_lock
                 const typename base_class::element_type* operator->() const
                 {
@@ -382,23 +500,6 @@
                         }
                         return *this->_mon.direct().get();
                 }
-
-		// move emulation
-		boost::detail::thread_move_t<monitor_upgrade_lock> move()
-		{
-			return boost::detail::thread_move_t<monitor_upgrade_lock>(*this);
-		}
-		template<typename Lock>
-		monitor_upgrade_lock& operator=(boost::detail::thread_move_t<Lock> other)
-		{
-			monitor_upgrade_lock temp(other);
-			this->swap(temp);
-			return *this;
-		}
-		operator boost::detail::thread_move_t<monitor_upgrade_lock>()
-		{
-			return move();
-		}
         };
 
         template<typename Monitor>
@@ -407,12 +508,21 @@
                 lockA.swap(lockB);
         }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
         template<typename Monitor>
         boost::detail::thread_move_t<monitor_upgrade_lock<Monitor> >
                 move(monitor_upgrade_lock<Monitor> &lock)
         {
                 return lock.move();
         }
+#else
+	template<typename Monitor>
+	monitor_upgrade_lock<Monitor> &&
+		move(monitor_upgrade_lock<Monitor> &lock)
+	{
+		return std::move(lock);
+	}
+#endif
 
         template<typename Monitor>
         class monitor_upgrade_to_unique_lock
@@ -427,10 +537,43 @@
                         _mon(upgrade_lock._mon),
                         _lock(upgrade_lock._lock)
                 {}
+		#ifdef BOOST_NO_RVALUE_REFERENCES
                 // move constructor
                 monitor_upgrade_to_unique_lock(boost::detail::thread_move_t<monitor_upgrade_to_unique_lock> other):
                         _mon(other->_mon), _lock(boost::detail::thread_move_t<wrapped_lock_type>(other->_lock))
                 {}
+		// move emulation
+		boost::detail::thread_move_t<monitor_upgrade_to_unique_lock> move()
+		{
+			return boost::detail::thread_move_t<monitor_upgrade_to_unique_lock>(*this);
+		}
+		monitor_upgrade_to_unique_lock& operator=(boost::detail::thread_move_t<monitor_upgrade_to_unique_lock> other)
+		{
+			monitor_upgrade_to_unique_lock temp(other);
+			swap(temp);
+			return *this;
+		}
+		operator boost::detail::thread_move_t<monitor_upgrade_to_unique_lock>()
+		{
+			return move();
+		}
+		#else
+		// move constructor
+		monitor_upgrade_to_unique_lock(monitor_upgrade_to_unique_lock<Monitor> &&other):
+			_mon(std::move(other._mon)), _lock(std::move(other._lock))
+		{}
+		// move emulation
+		monitor_upgrade_to_unique_lock&& move()
+		{
+			return std::move(*this);
+		}
+		monitor_upgrade_to_unique_lock& operator=(monitor_upgrade_to_unique_lock<Monitor> &&other)
+		{
+			monitor_upgrade_to_unique_lock temp(std::move(other));
+			swap(temp);
+			return *this;
+		}
+		#endif
 
                 void swap(monitor_upgrade_to_unique_lock &other)
                 {
@@ -471,21 +614,6 @@
                         return *_mon.direct().get();
                 }
 
-		// move emulation
-		boost::detail::thread_move_t<monitor_upgrade_to_unique_lock> move()
-		{
-			return boost::detail::thread_move_t<monitor_upgrade_to_unique_lock>(*this);
-		}
-		monitor_upgrade_to_unique_lock& operator=(boost::detail::thread_move_t<monitor_upgrade_to_unique_lock> other)
-		{
-			monitor_upgrade_to_unique_lock temp(other);
-			swap(temp);
-			return *this;
-		}
-		operator boost::detail::thread_move_t<monitor_upgrade_to_unique_lock>()
-		{
-			return move();
-		}
         private:
                 monitor_ptr_type _mon;
                 wrapped_lock_type _lock;
@@ -497,16 +625,27 @@
                 lockA.swap(lockB);
         }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
         template<typename Monitor>
         boost::detail::thread_move_t<monitor_upgrade_to_unique_lock<Monitor> >
                 move(monitor_upgrade_to_unique_lock<Monitor> &lock)
         {
                 return lock.move();
         }
+#else
+	template<typename Monitor>
+	monitor_upgrade_to_unique_lock<Monitor> &&
+		move(monitor_upgrade_to_unique_lock<Monitor> &lock)
+	{
+		return std::move(lock);
+	}
+#endif
+	
 };
 
 namespace boost
 {
+#ifdef BOOST_NO_RVALUE_REFERENCES
         template<typename T>
         detail::thread_move_t<poet::monitor_unique_lock<T> >
                 move(const detail::thread_move_t<poet::monitor_unique_lock<T> > &x)
@@ -531,6 +670,7 @@
         {
                 return x;
         }
+#endif
 }
 
 #endif // _POET_MONITOR_LOCKS_HPP
Modified: sandbox/libpoet/trunk/test/Makefile
==============================================================================
--- sandbox/libpoet/trunk/test/Makefile	(original)
+++ sandbox/libpoet/trunk/test/Makefile	2012-09-02 15:53:14 EDT (Sun, 02 Sep 2012)
@@ -1,5 +1,5 @@
-BOOST_INC_DIR=/home/fhess/svn/boost_switch
-BOOST_LIB_DIR=/home/fhess/svn/boost_switch/stage/lib
+BOOST_INC_DIR=/home/fhess/svn/boost_trunk
+BOOST_LIB_DIR=/home/fhess/svn/boost_trunk/stage/lib
 CXX=g++
 #set CC since it is used for linking .o files by built-in rule
 CC=$(CXX)
@@ -15,8 +15,8 @@
         not_default_constructible_test promise_count_test timed_join_test undead_active_function_test
 
 CPPFLAGS= -pthread -I.. -I$(BOOST_INC_DIR)
-CXXFLAGS= -O0 -Wall
-LDFLAGS= -L$(BOOST_LIB_DIR) -lboost_thread-gcc43-mt -pthread
+CXXFLAGS= -O0 -Wall -std=c++0x
+LDFLAGS= -L$(BOOST_LIB_DIR) -lboost_thread -lboost_system -pthread
 .PHONY: all clean dep test valgrind_test
 
 all: $(PROGRAMS)