$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r77876 - in trunk/libs/thread/test: . sync/futures/packaged_task
From: vicente.botet_at_[hidden]
Date: 2012-04-09 20:24:08
Author: viboes
Date: 2012-04-09 20:24:07 EDT (Mon, 09 Apr 2012)
New Revision: 77876
URL: http://svn.boost.org/trac/boost/changeset/77876
Log:
Thread: Added pt func_ctor test + update some test to pass Sun compiler regression
Text files modified: 
   trunk/libs/thread/test/Jamfile.v2                                          |     1                                         
   trunk/libs/thread/test/sync/futures/packaged_task/func_ctor_pass.cpp       |    54 ++++++++++++++++++++++++++++++++++++--- 
   trunk/libs/thread/test/sync/futures/packaged_task/move_ctor_pass.cpp       |     2                                         
   trunk/libs/thread/test/sync/futures/packaged_task/non_member_swap_pass.cpp |     2                                         
   4 files changed, 52 insertions(+), 7 deletions(-)
Modified: trunk/libs/thread/test/Jamfile.v2
==============================================================================
--- trunk/libs/thread/test/Jamfile.v2	(original)
+++ trunk/libs/thread/test/Jamfile.v2	2012-04-09 20:24:07 EDT (Mon, 09 Apr 2012)
@@ -243,6 +243,7 @@
           [ thread-compile-fail-V2 ./sync/futures/packaged_task/copy_assign_fail.cpp : : packaged_task__copy_assign_f ]
           [ thread-compile-fail-V2 ./sync/futures/packaged_task/copy_ctor_fail.cpp : : packaged_task__copy_ctor_f ]
           [ thread-run2 ./sync/futures/packaged_task/default_ctor_pass.cpp : packaged_task__default_ctor_p ]
+          [ thread-run2 ./sync/futures/packaged_task/func_ctor_pass.cpp : packaged_task__func_ctor_p ]
           #[ thread-run2 ./sync/futures/packaged_task/dtor_pass.cpp : packaged_task__dtor_p ]
           [ thread-run2 ./sync/futures/packaged_task/get_future_pass.cpp : packaged_task__get_future_p ]
           [ thread-run2 ./sync/futures/packaged_task/move_ctor_pass.cpp : packaged_task__move_ctor_p ]
Modified: trunk/libs/thread/test/sync/futures/packaged_task/func_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/func_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/func_ctor_pass.cpp	2012-04-09 20:24:07 EDT (Mon, 09 Apr 2012)
@@ -32,8 +32,52 @@
     static int n_copies;
 
     explicit A(long i) : data_(i) {}
-    A(A&& a) : data_(a.data_) {++n_moves; a.data_ = -1;}
-    A(const A& a) : data_(a.data_) {++n_copies;}
+#ifndef BOOST_NO_RVALUE_REFERENCES
+  A(A&& a) : data_(a.data_)
+  {
+    ++n_moves; a.data_ = -1;
+  }
+#else
+
+#if defined BOOST_THREAD_USES_MOVE
+  operator ::boost::rv<A>&()
+  {
+    return *static_cast< ::boost::rv<A>* >(this);
+  }
+  operator const ::boost::rv<A>&() const
+  {
+    return *static_cast<const ::boost::rv<A>* >(this);
+  }
+  ::boost::rv<A>& move()
+  {
+    return *static_cast< ::boost::rv<A>* >(this);
+  }
+  const ::boost::rv<A>& move() const
+  {
+    return *static_cast<const ::boost::rv<A>* >(this);
+  }
+
+  A(boost::rv<A>& a) : data_(a.data_)
+  {
+    ++n_moves; a.data_ = -1;
+  }
+#else
+  operator boost::detail::thread_move_t<A>()
+  {
+      return boost::detail::thread_move_t<A>(*this);
+  }
+  boost::detail::thread_move_t<A> move()
+  {
+      return boost::detail::thread_move_t<A>(*this);
+  }
+  A(boost::detail::thread_move_t<A> a) : data_(a.data_)
+  {
+    ++n_moves; a.data_ = -1;
+  }
+
+#endif
+#endif
+  A(const A& a) : data_(a.data_) {++n_copies;}
 
     long operator()() const {return data_;}
     long operator()(long i, long j) const {return data_ + i + j;}
@@ -46,12 +90,12 @@
 int main()
 {
   {
-      boost::packaged_task<double> p(A(5));
+      boost::packaged_task<double> p(BOOST_EXPLICIT_MOVE(A(5)));
       BOOST_TEST(p.valid());
       boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
       //p(3, 'a');
       p();
-      BOOST_TEST(f.get() == 105.0);
+      BOOST_TEST(f.get() == 5.0);
       BOOST_TEST(A::n_copies == 0);
       BOOST_TEST(A::n_moves > 0);
   }
@@ -64,7 +108,7 @@
       boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
       //p(3, 'a');
       p();
-      BOOST_TEST(f.get() == 105.0);
+      BOOST_TEST(f.get() == 5.0);
       BOOST_TEST(A::n_copies > 0);
       BOOST_TEST(A::n_moves > 0);
   }
Modified: trunk/libs/thread/test/sync/futures/packaged_task/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/move_ctor_pass.cpp	2012-04-09 20:24:07 EDT (Mon, 09 Apr 2012)
@@ -42,7 +42,7 @@
     boost::packaged_task<double> p = boost::move(p0);
     BOOST_TEST(!p0.valid());
     BOOST_TEST(p.valid());
-    boost::future<double> f = p.get_future();
+    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/packaged_task/non_member_swap_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/non_member_swap_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/non_member_swap_pass.cpp	2012-04-09 20:24:07 EDT (Mon, 09 Apr 2012)
@@ -42,7 +42,7 @@
       p.swap(p0);
       BOOST_TEST(!p0.valid());
       BOOST_TEST(p.valid());
-      boost::future<double> f = p.get_future();
+      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);