$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r77918 - in trunk: boost/thread boost/thread/detail libs/thread/doc libs/thread/example libs/thread/test libs/thread/test/sync/futures/future libs/thread/test/sync/futures/packaged_task libs/thread/test/sync/futures/promise libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons libs/thread/test/threads/container libs/thread/test/threads/thread/constr
From: vicente.botet_at_[hidden]
Date: 2012-04-11 13:16:49
Author: viboes
Date: 2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
New Revision: 77918
URL: http://svn.boost.org/trac/boost/changeset/77918
Log:
Thread: remove some warnings + rename BOOST_EXPLICIT_MOVE by BOOST_THREAD_MAKE_RV_REF
Added:
   trunk/libs/thread/test/threads/container/
   trunk/libs/thread/test/threads/container/thread_ptr_list_pass.cpp   (contents, props changed)
   trunk/libs/thread/test/threads/container/thread_vector_pass.cpp   (contents, props changed)
Text files modified: 
   trunk/boost/thread/detail/move.hpp                                                                  |    51 +++++++++++++++++++++++++++++++++++---- 
   trunk/boost/thread/detail/thread.hpp                                                                |     4 ---                                     
   trunk/boost/thread/locks.hpp                                                                        |     5 ++-                                     
   trunk/boost/thread/reverse_lock.hpp                                                                 |     2                                         
   trunk/libs/thread/doc/compliance.qbk                                                                |     8 +++---                                  
   trunk/libs/thread/doc/emulations.qbk                                                                |     2                                         
   trunk/libs/thread/example/condition.cpp                                                             |     2                                         
   trunk/libs/thread/example/monitor.cpp                                                               |     3 +                                       
   trunk/libs/thread/example/once.cpp                                                                  |     2                                         
   trunk/libs/thread/example/shared_monitor.cpp                                                        |     2                                         
   trunk/libs/thread/example/starvephil.cpp                                                            |     4 +-                                      
   trunk/libs/thread/example/thread.cpp                                                                |     4 +-                                      
   trunk/libs/thread/example/thread_group.cpp                                                          |     4 +-                                      
   trunk/libs/thread/example/tss.cpp                                                                   |     4 +-                                      
   trunk/libs/thread/example/xtime.cpp                                                                 |     4 +-                                      
   trunk/libs/thread/test/Jamfile.v2                                                                   |    21 ++++++++++-----                         
   trunk/libs/thread/test/sync/futures/future/dtor_pass.cpp                                            |    12 ++++----                                
   trunk/libs/thread/test/sync/futures/future/move_assign_pass.cpp                                     |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/future/move_ctor_pass.cpp                                       |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/future/share_pass.cpp                                           |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/packaged_task/alloc_ctor_pass.cpp                               |    12 ++++----                                
   trunk/libs/thread/test/sync/futures/packaged_task/dtor_pass.cpp                                     |     4 +-                                      
   trunk/libs/thread/test/sync/futures/packaged_task/func_ctor_pass.cpp                                |    12 ++++----                                
   trunk/libs/thread/test/sync/futures/packaged_task/get_future_pass.cpp                               |     8 +++---                                  
   trunk/libs/thread/test/sync/futures/packaged_task/member_swap_pass.cpp                              |     2                                         
   trunk/libs/thread/test/sync/futures/packaged_task/move_assign_pass.cpp                              |     2                                         
   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                                         
   trunk/libs/thread/test/sync/futures/packaged_task/operator_pass.cpp                                 |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/packaged_task/reset_pass.cpp                                    |     2                                         
   trunk/libs/thread/test/sync/futures/promise/alloc_ctor_pass.cpp                                     |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/promise/default_pass.cpp                                        |     6 ++--                                    
   trunk/libs/thread/test/sync/futures/promise/dtor_pass.cpp                                           |    12 ++++----                                
   trunk/libs/thread/test/sync/futures/promise/get_future_pass.cpp                                     |     8 +++---                                  
   trunk/libs/thread/test/sync/futures/promise/move_assign_pass.cpp                                    |    24 +++++++++---------                      
   trunk/libs/thread/test/sync/futures/promise/move_ctor_pass.cpp                                      |    24 +++++++++---------                      
   trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp            |    10 +++---                                  
   trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp              |     2                                         
   trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp            |     2                                         
   trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp              |     2                                         
   trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp |     2                                         
   trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp           |     6 ++--                                    
   trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp             |     2                                         
   trunk/libs/thread/test/test_4521.cpp                                                                |     2                                         
   trunk/libs/thread/test/threads/thread/constr/FrvalueArgs_pass.cpp                                   |     2                                         
   trunk/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp                                       |     4 +-                                      
   trunk/libs/thread/test/threads/thread/constr/move_pass.cpp                                          |     2                                         
   47 files changed, 182 insertions(+), 138 deletions(-)
Modified: trunk/boost/thread/detail/move.hpp
==============================================================================
--- trunk/boost/thread/detail/move.hpp	(original)
+++ trunk/boost/thread/detail/move.hpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -11,11 +11,12 @@
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 #include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
 #endif
 
 #include <boost/move/move.hpp>
 
-#include <boost/config/abi_prefix.hpp>
+//#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
@@ -62,15 +63,53 @@
 }
 
 #if ! defined  BOOST_NO_RVALUE_REFERENCES
-//&& ! defined  BOOST_NO_DELETED_FUNCTIONS
-#define BOOST_EXPLICIT_MOVE(RVALUE) RVALUE
+#define BOOST_THREAD_RV_REF(TYPE) BOOST_RV_REF(TYPE)
+#define BOOST_THREAD_MAKE_RV_REF(RVALUE) RVALUE
+
+
 #elif ! defined  BOOST_NO_RVALUE_REFERENCES && defined  BOOST_MSVC
-#define BOOST_EXPLICIT_MOVE(RVALUE) RVALUE
+#define BOOST_THREAD_RV_REF(TYPE) BOOST_RV_REF(TYPE)
+#define BOOST_THREAD_MAKE_RV_REF(RVALUE) RVALUE
+#else
+
+namespace boost
+{
+namespace detail
+{
+
+#if defined BOOST_THREAD_USES_MOVE
+#define BOOST_THREAD_RV_REF(TYPE) BOOST_RV_REF(TYPE)
 #else
-#define BOOST_EXPLICIT_MOVE(RVALUE) RVALUE.move()
+#define BOOST_THREAD_RV_REF(TYPE) thread_move_t<TYPE>
 #endif
+  template <typename T>
+  BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type)
+  make_rv_ref(T v)  BOOST_NOEXCEPT
+  {
+    return (BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type))(v);
+  }
+//  template <typename T>
+//  BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type)
+//  make_rv_ref(T &v)  BOOST_NOEXCEPT
+//  {
+//    return (BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type))(v);
+//  }
+//  template <typename T>
+//  const BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type)
+//  make_rv_ref(T const&v)  BOOST_NOEXCEPT
+//  {
+//    return (const BOOST_THREAD_RV_REF(typename ::boost::remove_cv<typename ::boost::remove_reference<T>::type>::type))(v);
+//  }
+}
+}
+
+#define BOOST_THREAD_MAKE_RV_REF(RVALUE) RVALUE.move()
+//#define BOOST_THREAD_MAKE_RV_REF(RVALUE) boost::detail::make_rv_ref(RVALUE)
+#endif
+
+
 
 
-#include <boost/config/abi_suffix.hpp>
+//#include <boost/config/abi_suffix.hpp>
 
 #endif
Modified: trunk/boost/thread/detail/thread.hpp
==============================================================================
--- trunk/boost/thread/detail/thread.hpp	(original)
+++ trunk/boost/thread/detail/thread.hpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -11,11 +11,7 @@
 #ifndef BOOST_NO_IOSTREAM
 #include <ostream>
 #endif
-#if defined BOOST_THREAD_USES_MOVE
-#include <boost/move/move.hpp>
-#else
 #include <boost/thread/detail/move.hpp>
-#endif
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/xtime.hpp>
 #include <boost/thread/detail/thread_heap_alloc.hpp>
Modified: trunk/boost/thread/locks.hpp
==============================================================================
--- trunk/boost/thread/locks.hpp	(original)
+++ trunk/boost/thread/locks.hpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -383,7 +383,8 @@
         }
         BOOST_THREAD_EXPLICIT_LOCK_CONVERSION unique_lock(boost::rv<upgrade_lock<Mutex> >& other);
 
-        operator ::boost::rv<unique_lock<Mutex> >&()
+        //operator boost::rv<boost::unique_lock<boost::mutex> >&
+        operator boost::rv<unique_lock<Mutex> >&()
         {
           return *static_cast< ::boost::rv<unique_lock<Mutex> >* >(this);
         }
@@ -1948,7 +1949,7 @@
         {
             if(source)
             {
-                *source=BOOST_EXPLICIT_MOVE(upgrade_lock<Mutex>(::boost::move(exclusive)));
+                *source=BOOST_THREAD_MAKE_RV_REF(upgrade_lock<Mutex>(::boost::move(exclusive)));
             }
         }
 
Modified: trunk/boost/thread/reverse_lock.hpp
==============================================================================
--- trunk/boost/thread/reverse_lock.hpp	(original)
+++ trunk/boost/thread/reverse_lock.hpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -40,7 +40,7 @@
         {
           if (mtx) {
             mtx->lock();
-            m = BOOST_EXPLICIT_MOVE(Lock(*mtx, adopt_lock));
+            m = BOOST_THREAD_MAKE_RV_REF(Lock(*mtx, adopt_lock));
           }
         }
 
Modified: trunk/libs/thread/doc/compliance.qbk
==============================================================================
--- trunk/libs/thread/doc/compliance.qbk	(original)
+++ trunk/libs/thread/doc/compliance.qbk	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -5,12 +5,12 @@
   http://www.boost.org/LICENSE_1_0.txt).
 ]
 
-[section:compliance Compliance and Extension]
+[section:compliance Conformace and Extension]
 
 [section:cpp11 C++11 standard Thread library]
 
 
-[table Compliance C++11 standard
+[table C++11 standard Conformace
     [[Section]        [Description]  [Status] [Comments] [Ticket]]
     [[30]        [Thread support library]  [Partial] [-] [-]]
     [[30.1]        [General]  [-] [-] [-]]
@@ -69,7 +69,7 @@
     [[30.6.6]        [Class template future]  [Partial] [allocator,unique_future is the closest to future, renamed in V2] [#6228]]
     [[30.6.7]        [Class template shared_future]  [Partial] [allocator] [#6228]]
     [[30.6.8]        [Function template async]  [No] [async] [#4710]]
-    [[30.6.8]        [Class template packaged_task]  [Partial] [move] [#yyyy]]
+    [[30.6.9]        [Class template packaged_task]  [Partial] [move] [#yyyy]]
 ]
 
 [/
@@ -89,7 +89,7 @@
 
 [section:shared Shared Locking extensions]
 
-[table Compliance with Howard's Shared Locking proposal
+[table Howard's Shared Locking Proposal Conformace
     [[Section]  [Description]  [Status] [Comments]]
     [[X]        [Shared Locking]  [Yes] [Needs `BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION]]
     [[X.1]      [Shared Lockables Concepts]  [Yes] [ - ]]
Modified: trunk/libs/thread/doc/emulations.qbk
==============================================================================
--- trunk/libs/thread/doc/emulations.qbk	(original)
+++ trunk/libs/thread/doc/emulations.qbk	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -66,7 +66,7 @@
 
   thread mkth() 
   {
-    return BOOST_EXPLICIT_MOVE(thread(f));
+    return BOOST_THREAD_MAKE_RV_REF(thread(f));
   }
 
 See the Boost.Move documentation for a complete description on how to declare new Movable classes and its limitations. 
Modified: trunk/libs/thread/example/condition.cpp
==============================================================================
--- trunk/libs/thread/example/condition.cpp	(original)
+++ trunk/libs/thread/example/condition.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <iostream>
Modified: trunk/libs/thread/example/monitor.cpp
==============================================================================
--- trunk/libs/thread/example/monitor.cpp	(original)
+++ trunk/libs/thread/example/monitor.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <vector>
@@ -89,6 +89,7 @@
 template <typename M>
 void do_test(M* dummy=0)
 {
+    (void)dummy;
     typedef buffer_t<M> buffer_type;
     buffer_type::get_buffer();
     boost::thread thrd1(&buffer_type::do_receiver_thread);
Modified: trunk/libs/thread/example/once.cpp
==============================================================================
--- trunk/libs/thread/example/once.cpp	(original)
+++ trunk/libs/thread/example/once.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -28,7 +28,7 @@
     boost::call_once(&init, once);
 }
 
-int main(int argc, char* argv[])
+int main()
 {
     boost::thread_group threads;
     for (int i=0; i<5; ++i)
Modified: trunk/libs/thread/example/shared_monitor.cpp
==============================================================================
--- trunk/libs/thread/example/shared_monitor.cpp	(original)
+++ trunk/libs/thread/example/shared_monitor.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -128,7 +128,7 @@
     v.push_back(&thr2);
     boost::thread thr3(test_w);
     v.push_back(&thr3);
-    for (int i = 0; i < v.size(); ++i)
+    for (std::size_t i = 0; i < v.size(); ++i)
         v[i]->join();
     Clock::time_point t1 = Clock::now();
     std::cout << sec(t1-t0) << '\n';
Modified: trunk/libs/thread/example/starvephil.cpp
==============================================================================
--- trunk/libs/thread/example/starvephil.cpp	(original)
+++ trunk/libs/thread/example/starvephil.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/thread/mutex.hpp>
@@ -164,7 +164,7 @@
     void* _param;
 };
 
-int main(int argc, char* argv[])
+int main()
 {
     boost::thread thrd_chef(&chef);
     phil p[] = { phil(0), phil(1), phil(2), phil(3), phil(4) };
Modified: trunk/libs/thread/example/thread.cpp
==============================================================================
--- trunk/libs/thread/example/thread.cpp	(original)
+++ trunk/libs/thread/example/thread.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/thread/thread.hpp>
@@ -25,7 +25,7 @@
     int m_secs;
 };
 
-int main(int argc, char* argv[])
+int main()
 {
     int secs = 5;
     std::cout << "setting alarm for 5 seconds..." << std::endl;
Modified: trunk/libs/thread/example/thread_group.cpp
==============================================================================
--- trunk/libs/thread/example/thread_group.cpp	(original)
+++ trunk/libs/thread/example/thread_group.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/thread/thread.hpp>
@@ -16,7 +16,7 @@
     std::cout << "count = " << ++count << std::endl;
 }
 
-int main(int argc, char* argv[])
+int main()
 {
     boost::thread_group threads;
     for (int i = 0; i < 10; ++i)
Modified: trunk/libs/thread/example/tss.cpp
==============================================================================
--- trunk/libs/thread/example/tss.cpp	(original)
+++ trunk/libs/thread/example/tss.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,7 +1,7 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/thread/thread.hpp>
@@ -27,7 +27,7 @@
     }
 }
 
-int main(int argc, char* argv[])
+int main()
 {
     boost::thread_group threads;
     for (int i=0; i<5; ++i)
Modified: trunk/libs/thread/example/xtime.cpp
==============================================================================
--- trunk/libs/thread/example/xtime.cpp	(original)
+++ trunk/libs/thread/example/xtime.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -1,13 +1,13 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
 //
-//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/thread/thread.hpp>
 #include <boost/thread/xtime.hpp>
 
-int main(int argc, char* argv[])
+int main()
 {
     boost::xtime xt;
     boost::xtime_get(&xt, boost::TIME_UTC);
Modified: trunk/libs/thread/test/Jamfile.v2
==============================================================================
--- trunk/libs/thread/test/Jamfile.v2	(original)
+++ trunk/libs/thread/test/Jamfile.v2	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -33,7 +33,7 @@
         <toolset>darwin:<cxxflags>-Wextra
         <toolset>darwin:<cxxflags>-pedantic
         <toolset>darwin:<cxxflags>-Wno-long-long
-        #<toolset>darwin:<cxxflags>-ansi
+        #<toolset>darwin:<cxxflags>-ansi # doesn't work for 4.1.2
         <toolset>darwin:<cxxflags>-fpermissive
 
         #<toolset>pathscale:<cxxflags>-Wextra
@@ -44,7 +44,7 @@
         <toolset>clang:<cxxflags>-pedantic
         <toolset>clang:<cxxflags>-Wno-long-long
         <toolset>clang:<cxxflags>-ansi
-        #<toolset>clang:<cxxflags>-fpermissive
+        #<toolset>clang:<cxxflags>-fpermissive # doesn't work 
 
         <toolset>gcc-mingw-4.4.0:<cxxflags>-fdiagnostics-show-option
         <toolset>gcc-mingw-4.5.0:<cxxflags>-fdiagnostics-show-option
@@ -53,8 +53,10 @@
         <toolset>gcc-mingw-4.7.0:<cxxflags>-fdiagnostics-show-option
         <toolset>gcc-mingw-4.8.0:<cxxflags>-fdiagnostics-show-option
 
-        #<toolset>darwin-4.6.2:<cxxflags>-Wno-delete-non-virtual-dtor
-        #<toolset>darwin-4.7.0:<cxxflags>-Wno-delete-non-virtual-dtor
+        <toolset>darwin-4.6.2:<cxxflags>-ansi
+        #<toolset>darwin-4.6.2:<cxxflags>-Wno-delete-non-virtual-dtor # doesn't work
+        <toolset>darwin-4.7.0:<cxxflags>-ansi
+        <toolset>darwin-4.7.0:<cxxflags>-Wno-delete-non-virtual-dtor
 
         #<toolset>clang-2.8:<cxxflags>-Wno-delete-non-virtual-dtor
         #<toolset>clang-2.8:<cxxflags>-Wno-unused-function
@@ -463,11 +465,16 @@
           [ thread-run2 ./threads/thread/members/swap_pass.cpp : thread__swap_p ]
           [ thread-run2 ./threads/thread/non_members/swap_pass.cpp : swap_threads_p ]
           [ thread-run2 ./threads/thread/static/hardware_concurrency_pass.cpp : thread__hardware_concurrency_p ]
-          #[ thread-run2 ./threads/container/thread_vector_pass.cpp : thread_vector_p ]
-          #[ thread-run2 ./threads/container/thread_ptr_list_pass.cpp : thread_ptr_list_p ]
     ;
 
-    #explicit examples ;
+    #explicit ts_container ;
+    test-suite ts_container
+    :
+          [ thread-run2 ./threads/container/thread_vector_pass.cpp : container__thread_vector_p ]
+          [ thread-run2 ./threads/container/thread_ptr_list_pass.cpp : container__thread_ptr_list_p ]
+    ;
+
+    explicit examples ;
     test-suite ts_examples
     :
           [ thread-run ../example/monitor.cpp ]
Modified: trunk/libs/thread/test/sync/futures/future/dtor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/future/dtor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/future/dtor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -37,7 +37,7 @@
       {
           boost::promise<T> p(boost::allocator_arg, test_allocator<T>());
           BOOST_TEST(test_alloc_base::count == 1);
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(test_alloc_base::count == 1);
           BOOST_TEST(f.valid());
       }
@@ -51,7 +51,7 @@
       {
           boost::promise<T> p(boost::allocator_arg, test_allocator<int>());
           BOOST_TEST(test_alloc_base::count == 1);
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(test_alloc_base::count == 1);
           BOOST_TEST(f.valid());
       }
@@ -65,7 +65,7 @@
       {
           boost::promise<T> p(boost::allocator_arg, test_allocator<T>());
           BOOST_TEST(test_alloc_base::count == 1);
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(test_alloc_base::count == 1);
           BOOST_TEST(f.valid());
       }
@@ -79,7 +79,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(f.valid());
       }
       BOOST_TEST(f.valid());
@@ -89,7 +89,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(f.valid());
       }
       BOOST_TEST(f.valid());
@@ -99,7 +99,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(f.valid());
       }
       BOOST_TEST(f.valid());
Modified: trunk/libs/thread/test/sync/futures/future/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/future/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/future/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -31,7 +31,7 @@
   {
       typedef int T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f;
       f = boost::move(f0);
       BOOST_TEST(!f0.valid());
@@ -48,7 +48,7 @@
   {
       typedef int& T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f;
       f = boost::move(f0);
       BOOST_TEST(!f0.valid());
@@ -65,7 +65,7 @@
   {
       typedef void T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f;
       f = boost::move(f0);
       BOOST_TEST(!f0.valid());
Modified: trunk/libs/thread/test/sync/futures/future/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/future/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/future/move_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -30,7 +30,7 @@
   {
       typedef int T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f = boost::move(f0);
       BOOST_TEST(!f0.valid());
       BOOST_TEST(f.valid());
@@ -45,7 +45,7 @@
   {
       typedef int& T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f = boost::move(f0);
       BOOST_TEST(!f0.valid());
       BOOST_TEST(f.valid());
@@ -60,7 +60,7 @@
   {
       typedef void T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::future<T> f = boost::move(f0);
       BOOST_TEST(!f0.valid());
       BOOST_TEST(f.valid());
Modified: trunk/libs/thread/test/sync/futures/future/share_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/future/share_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/future/share_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -29,7 +29,7 @@
   {
       typedef int T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::shared_future<T> sf = f0.share();
       boost::shared_future<T> f = sf;
       BOOST_TEST(!f0.valid());
@@ -46,7 +46,7 @@
   {
       typedef int& T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::shared_future<T> sf = f0.share();
       boost::shared_future<T> f = sf;
       BOOST_TEST(!f0.valid());
@@ -63,7 +63,7 @@
   {
       typedef void T;
       boost::promise<T> p;
-      boost::future<T> f0 = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::shared_future<T> sf = f0.share();
       boost::shared_future<T> f = sf;
       BOOST_TEST(!f0.valid());
Modified: trunk/libs/thread/test/sync/futures/packaged_task/alloc_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/alloc_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/alloc_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -113,10 +113,10 @@
 {
   {
     boost::packaged_task<double> p(boost::allocator_arg,
-        test_allocator<A>(), BOOST_EXPLICIT_MOVE(A(5)));
+        test_allocator<A>(), BOOST_THREAD_MAKE_RV_REF(A(5)));
     BOOST_TEST(test_alloc_base::count > 0);
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
@@ -132,7 +132,7 @@
         test_allocator<A>(), a);
     BOOST_TEST(test_alloc_base::count > 0);
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
@@ -148,7 +148,7 @@
         test_allocator<A>(), a);
     BOOST_TEST(test_alloc_base::count > 0);
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
@@ -161,7 +161,7 @@
         test_allocator<A>(), fct);
     BOOST_TEST(test_alloc_base::count > 0);
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
@@ -171,7 +171,7 @@
         test_allocator<A>(), &lfct);
     BOOST_TEST(test_alloc_base::count > 0);
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/packaged_task/dtor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/dtor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/dtor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -50,7 +50,7 @@
 {
   {
       boost::packaged_task<double> p(A(5));
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::thread(func, boost::move(p)).detach();
       try
       {
@@ -64,7 +64,7 @@
   }
   {
       boost::packaged_task<double> p(A(5));
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       boost::thread(func2, boost::move(p)).detach();
       BOOST_TEST(f.get() == 5.0);
   }
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-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -99,9 +99,9 @@
 int main()
 {
   {
-      boost::packaged_task<double> p(BOOST_EXPLICIT_MOVE(A(5)));
+      boost::packaged_task<double> p(BOOST_THREAD_MAKE_RV_REF(A(5)));
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
@@ -114,7 +114,7 @@
       A a(5);
       boost::packaged_task<double> p(a);
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
@@ -128,7 +128,7 @@
       const A a(5);
       boost::packaged_task<double> p(a);
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
@@ -138,7 +138,7 @@
   {
       boost::packaged_task<double> p(fct);
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
@@ -146,7 +146,7 @@
   {
       boost::packaged_task<double> p(&lfct);
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/packaged_task/get_future_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/get_future_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/get_future_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -39,17 +39,17 @@
 {
   {
       boost::packaged_task<double> p(A(5));
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
   }
   {
       boost::packaged_task<double> p(A(5));
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       try
       {
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(false);
       }
       catch (const boost::future_error& e)
@@ -61,7 +61,7 @@
       boost::packaged_task<double> p;
       try
       {
-          boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+          boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(false);
       }
       catch (const boost::future_error& e)
Modified: trunk/libs/thread/test/sync/futures/packaged_task/member_swap_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/member_swap_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/member_swap_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -51,7 +51,7 @@
     p.swap(p0);
     BOOST_TEST(!p0.valid());
     BOOST_TEST(p.valid());
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/packaged_task/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -44,7 +44,7 @@
       p = boost::move(p0);
       BOOST_TEST(!p0.valid());
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       // p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.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-11 13:16:45 EDT (Wed, 11 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 = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(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-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -42,7 +42,7 @@
       p.swap(p0);
       BOOST_TEST(!p0.valid());
       BOOST_TEST(p.valid());
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       //p(3, 'a');
       p();
       BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/packaged_task/operator_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/operator_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/operator_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -89,13 +89,13 @@
 {
   {
     boost::packaged_task<double> p(A(5));
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     boost::thread(func0, boost::move(p)).detach();
     BOOST_TEST(f.get() == 5.0);
   }
   {
     boost::packaged_task<double> p(A(5));
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     boost::thread(func1, boost::move(p)).detach();
     try
     {
@@ -110,7 +110,7 @@
   }
   {
     boost::packaged_task<double> p(A(5));
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     boost::thread t(func2, boost::move(p));
     BOOST_TEST(f.get() == 5.0);
     t.join();
Modified: trunk/libs/thread/test/sync/futures/packaged_task/reset_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/packaged_task/reset_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/packaged_task/reset_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -47,7 +47,7 @@
 {
   {
     boost::packaged_task<double> p(A(5));
-    boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     //p(3, 'a');
     p();
     BOOST_TEST(f.get() == 5.0);
Modified: trunk/libs/thread/test/sync/futures/promise/alloc_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/alloc_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/alloc_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -31,7 +31,7 @@
   {
       boost::promise<int> p(boost::allocator_arg, test_allocator<int>());
       BOOST_TEST(test_alloc_base::count == 1);
-      boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       BOOST_TEST(test_alloc_base::count == 1);
       BOOST_TEST(f.valid());
   }
@@ -39,7 +39,7 @@
   {
       boost::promise<int&> p(boost::allocator_arg, test_allocator<int>());
       BOOST_TEST(test_alloc_base::count == 1);
-      boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       BOOST_TEST(test_alloc_base::count == 1);
       BOOST_TEST(f.valid());
   }
@@ -47,7 +47,7 @@
   {
       boost::promise<void> p(boost::allocator_arg, test_allocator<void>());
       BOOST_TEST(test_alloc_base::count == 1);
-      boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       BOOST_TEST(test_alloc_base::count == 1);
       BOOST_TEST(f.valid());
   }
Modified: trunk/libs/thread/test/sync/futures/promise/default_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/default_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/default_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -28,18 +28,18 @@
 
   {
       boost::promise<int> p;
-      boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       BOOST_TEST(f.valid());
   }
   {
       boost::promise<int&> p;
-      boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       BOOST_TEST(f.valid());
   }
   {
       boost::promise<void> p;
       std::cout << __LINE__ << std::endl;
-      boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       std::cout << __LINE__ << std::endl;
       BOOST_TEST(f.valid());
   }
Modified: trunk/libs/thread/test/sync/futures/promise/dtor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/dtor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/dtor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -30,7 +30,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           p.set_value(3);
       }
       BOOST_TEST(f.get() == 3);
@@ -40,7 +40,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       }
       try
       {
@@ -59,7 +59,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           p.set_value(i);
       }
       BOOST_TEST(&f.get() == &i);
@@ -69,7 +69,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       }
       try
       {
@@ -87,7 +87,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           p.set_value();
       }
       f.get();
@@ -98,7 +98,7 @@
       boost::future<T> f;
       {
           boost::promise<T> p;
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       }
       try
       {
Modified: trunk/libs/thread/test/sync/futures/promise/get_future_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/get_future_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/get_future_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -27,16 +27,16 @@
 {
   {
       boost::promise<double> p;
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       p.set_value(105.5);
       BOOST_TEST(f.get() == 105.5);
   }
   {
       boost::promise<double> p;
-      boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
       try
       {
-          f = BOOST_EXPLICIT_MOVE(p.get_future());
+          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(false);
       }
       catch (const boost::future_error& e)
@@ -49,7 +49,7 @@
       boost::promise<double> p0 = boost::move(p);
       try
       {
-          boost::future<double> f = BOOST_EXPLICIT_MOVE(p.get_future());
+          boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
           BOOST_TEST(false);
       }
       catch (const boost::future_error& e)
Modified: trunk/libs/thread/test/sync/futures/promise/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -39,12 +39,12 @@
     BOOST_TEST(test_alloc_base::count == 2);
     p = boost::move(p0);
     BOOST_TEST(test_alloc_base::count == 1);
-    boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -61,12 +61,12 @@
     BOOST_TEST(test_alloc_base::count == 2);
     p = boost::move(p0);
     BOOST_TEST(test_alloc_base::count == 1);
-    boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -82,12 +82,12 @@
     BOOST_TEST(test_alloc_base::count == 2);
     p = boost::move(p0);
     BOOST_TEST(test_alloc_base::count == 1);
-    boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -103,11 +103,11 @@
     boost::promise<int> p0;
     boost::promise<int> p;
     p = boost::move(p0);
-    boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -120,11 +120,11 @@
     boost::promise<int&> p0;
     boost::promise<int&> p;
     p = boost::move(p0);
-    boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -136,11 +136,11 @@
     boost::promise<void> p0;
     boost::promise<void> p;
     p = boost::move(p0);
-    boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
Modified: trunk/libs/thread/test/sync/futures/promise/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/futures/promise/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/futures/promise/move_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -37,14 +37,14 @@
     boost::promise<int> p(boost::move(p0));
     BOOST_TEST(test_alloc_base::count == 1);
     std::cout << __LINE__ << std::endl;
-    boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     std::cout << __LINE__ << std::endl;
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     std::cout << __LINE__ << std::endl;
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -60,12 +60,12 @@
     boost::promise<int&> p0(boost::allocator_arg, test_allocator<int>());
     boost::promise<int&> p(boost::move(p0));
     BOOST_TEST(test_alloc_base::count == 1);
-    boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -79,12 +79,12 @@
     boost::promise<void> p0(boost::allocator_arg, test_allocator<void>());
     boost::promise<void> p(boost::move(p0));
     BOOST_TEST(test_alloc_base::count == 1);
-    boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(test_alloc_base::count == 1);
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -99,13 +99,13 @@
     boost::promise<int> p0;
     boost::promise<int> p(boost::move(p0));
     std::cout << __LINE__ << std::endl;
-    boost::future<int> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     std::cout << __LINE__ << std::endl;
     BOOST_TEST(f.valid());
     std::cout << __LINE__ << std::endl;
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -118,11 +118,11 @@
   {
     boost::promise<int&> p0;
     boost::promise<int&> p(boost::move(p0));
-    boost::future<int&> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<int&> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
@@ -133,11 +133,11 @@
   {
     boost::promise<void> p0;
     boost::promise<void> p(boost::move(p0));
-    boost::future<void> f = BOOST_EXPLICIT_MOVE(p.get_future());
+    boost::future<void> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
     BOOST_TEST(f.valid());
     try
     {
-      f = BOOST_EXPLICIT_MOVE(p0.get_future());
+      f = BOOST_THREAD_MAKE_RV_REF(p0.get_future());
       BOOST_TEST(false);
     }
     catch (const boost::future_error& e)
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -40,14 +40,14 @@
   {
 
     boost::shared_lock<boost::shared_mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(m0));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(m0));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
   {
     boost::unique_lock<boost::shared_mutex> lk0(m0);
     boost::shared_lock<boost::shared_mutex> lk1(m1);
-    lk1 = BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
     BOOST_TEST(lk0.mutex() == 0);
@@ -56,14 +56,14 @@
   {
 
     boost::shared_lock<boost::shared_mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(boost::unique_lock<boost::shared_mutex>(m0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::unique_lock<boost::shared_mutex>(m0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
   {
     boost::upgrade_lock<boost::shared_mutex> lk0(m0);
     boost::shared_lock<boost::shared_mutex> lk1(m1);
-    lk1 = BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
     BOOST_TEST(lk0.mutex() == 0);
@@ -72,7 +72,7 @@
   {
 
     boost::shared_lock<boost::shared_mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(boost::upgrade_lock<boost::shared_mutex>(m0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::upgrade_lock<boost::shared_mutex>(m0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -36,7 +36,7 @@
   BOOST_TEST(lk0.owns_lock() == false);
   }
   {
-  boost::shared_lock<boost::shared_mutex> lk( (BOOST_EXPLICIT_MOVE(boost::shared_lock<boost::shared_mutex>(m))));
+  boost::shared_lock<boost::shared_mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(m))));
   BOOST_TEST(lk.mutex() == &m);
   BOOST_TEST(lk.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -42,7 +42,7 @@
   {
 
     boost::unique_lock<boost::mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::unique_lock<boost::mutex>(m0));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::unique_lock<boost::mutex>(m0));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -36,7 +36,7 @@
   BOOST_TEST(lk0.owns_lock() == false);
   }
   {
-  boost::unique_lock<boost::mutex> lk( (BOOST_EXPLICIT_MOVE(boost::unique_lock<boost::mutex>(m))));
+  boost::unique_lock<boost::mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::unique_lock<boost::mutex>(m))));
   BOOST_TEST(lk.mutex() == &m);
   BOOST_TEST(lk.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -36,7 +36,7 @@
   BOOST_TEST(lk0.owns_lock() == false);
   }
   {
-  boost::unique_lock<boost::upgrade_mutex> lk( (BOOST_EXPLICIT_MOVE(boost::upgrade_lock<boost::upgrade_mutex>(m))));
+  boost::unique_lock<boost::upgrade_mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::upgrade_mutex>(m))));
   BOOST_TEST(lk.mutex() == &m);
   BOOST_TEST(lk.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -40,14 +40,14 @@
   {
 
     boost::upgrade_lock<boost::shared_mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::upgrade_lock<boost::shared_mutex>(m0));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::shared_mutex>(m0));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
   {
     boost::unique_lock<boost::shared_mutex> lk0(m0);
     boost::upgrade_lock<boost::shared_mutex> lk1(m1);
-    lk1 = BOOST_EXPLICIT_MOVE(boost::upgrade_lock<boost::shared_mutex>(boost::move(lk0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::shared_mutex>(boost::move(lk0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
     BOOST_TEST(lk0.mutex() == 0);
@@ -56,7 +56,7 @@
   {
 
     boost::upgrade_lock<boost::shared_mutex> lk1;
-    lk1 = BOOST_EXPLICIT_MOVE(boost::upgrade_lock<boost::shared_mutex>(boost::unique_lock<boost::shared_mutex>(m0)));
+    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::shared_mutex>(boost::unique_lock<boost::shared_mutex>(m0)));
     BOOST_TEST(lk1.mutex() == &m0);
     BOOST_TEST(lk1.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp
==============================================================================
--- trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp	(original)
+++ trunk/libs/thread/test/sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -36,7 +36,7 @@
   BOOST_TEST(lk0.owns_lock() == false);
   }
   {
-  boost::upgrade_lock<boost::shared_mutex> lk( (BOOST_EXPLICIT_MOVE(boost::upgrade_lock<boost::shared_mutex>(m))));
+  boost::upgrade_lock<boost::shared_mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::shared_mutex>(m))));
   BOOST_TEST(lk.mutex() == &m);
   BOOST_TEST(lk.owns_lock() == true);
   }
Modified: trunk/libs/thread/test/test_4521.cpp
==============================================================================
--- trunk/libs/thread/test/test_4521.cpp	(original)
+++ trunk/libs/thread/test/test_4521.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -7,7 +7,7 @@
 
 int main() {
 boost::packaged_task<int> pt(calculate_the_answer_to_life_the_universe_and_everything);
-boost::unique_future<int> fi=BOOST_EXPLICIT_MOVE(pt.get_future());
+boost::unique_future<int> fi=BOOST_THREAD_MAKE_RV_REF(pt.get_future());
 
 boost::thread task(boost::move(pt)); // launch task on a thread
 
Added: trunk/libs/thread/test/threads/container/thread_ptr_list_pass.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/thread/test/threads/container/thread_ptr_list_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -0,0 +1,99 @@
+// Copyright (C) 2011 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/container/list.hpp>
+//#include <boost/interprocess/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr.hpp>
+#include <iostream>
+#include <boost/detail/lightweight_test.hpp>
+
+
+int count = 0;
+boost::mutex mutex;
+
+namespace {
+
+
+template <typename TC>
+void join_all(TC & tc)
+{
+  for (typename TC::iterator it = tc.begin(); it != tc.end(); ++it)
+  {
+    (*it)->join();
+  }
+}
+
+
+void increment_count()
+{
+  boost::mutex::scoped_lock lock(mutex);
+  std::cout << "count = " << ++count << std::endl;
+}
+
+template <class T>
+struct default_delete
+{
+  typedef T*   pointer;
+
+  BOOST_CONSTEXPR default_delete() BOOST_NOEXCEPT {} //= default;
+  template <class U>
+  default_delete(const default_delete<U>&) BOOST_NOEXCEPT
+  {}
+  void operator()(T* ptr) const
+  {
+    delete ptr;
+  }
+};
+
+}
+int main()
+{
+  {
+    typedef boost::shared_ptr<boost::thread >  thread_ptr;
+    //typedef boost::interprocess::shared_ptr<boost::thread, std::allocator<boost::thread>, default_delete<boost::thread> >  thread_ptr;
+    typedef boost::container::list<thread_ptr > thread_ptr_list;
+    thread_ptr_list threads;
+    for (int i = 0; i < 10; ++i)
+    {
+      //threads.push_back(BOOST_THREAD_MAKE_RV_REF(thread_ptr(new boost::thread(&increment_count))));
+      threads.push_back(thread_ptr(new boost::thread(&increment_count)));
+    }
+    BOOST_TEST(threads.size()==10);
+    //join_all(threads);
+    for (thread_ptr_list::iterator it = threads.begin(); it != threads.end(); ++it)
+    {
+      (*it)->join();
+    }
+  }
+  count = 0;
+  {
+    typedef boost::shared_ptr<boost::thread >  thread_ptr;
+    //typedef boost::interprocess::shared_ptr<boost::thread, std::allocator<boost::thread>, default_delete<boost::thread> >  thread_ptr;
+    typedef boost::container::list<thread_ptr > thread_ptr_list;
+    thread_ptr_list threads;
+    for (int i = 0; i < 10; ++i)
+    {
+      //threads.push_back(BOOST_THREAD_MAKE_RV_REF(thread_ptr(new boost::thread(&increment_count))));
+      threads.push_back(thread_ptr(new boost::thread(&increment_count)));
+    }
+    BOOST_TEST(threads.size()==10);
+    thread_ptr sth(new boost::thread(&increment_count));
+    threads.push_back(sth);
+    BOOST_TEST(threads.size()==11);
+    threads.remove(sth);
+    BOOST_TEST(threads.size()==10);
+    sth->join();
+    //join_all(threads);
+    for (thread_ptr_list::iterator it = threads.begin(); it != threads.end(); ++it)
+    {
+      (*it)->join();
+    }
+  }
+
+  return boost::report_errors();
+}
Added: trunk/libs/thread/test/threads/container/thread_vector_pass.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/thread/test/threads/container/thread_vector_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -0,0 +1,86 @@
+// Copyright (C) 2011 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/container/vector.hpp>
+#include <iostream>
+#include <boost/detail/lightweight_test.hpp>
+
+int count = 0;
+boost::mutex mutex;
+
+namespace
+{
+template <typename TC>
+void join_all(TC & tc)
+{
+  for (typename TC::iterator it = tc.begin(); it != tc.end(); ++it)
+  {
+    it->join();
+  }
+}
+
+template <typename TC>
+void interrupt_all(TC & tc)
+{
+  for (typename TC::iterator it = tc.begin(); it != tc.end(); ++it)
+  {
+    it->interrupt();
+  }
+}
+}
+
+void increment_count()
+{
+  boost::mutex::scoped_lock lock(mutex);
+  std::cout << "count = " << ++count << std::endl;
+}
+
+int main()
+{
+  typedef boost::container::vector<boost::thread> thread_vector;
+  {
+    thread_vector threads;
+    threads.reserve(10);
+    for (int i = 0; i < 10; ++i)
+    {
+      boost::thread th(&increment_count);
+      threads.push_back(boost::move(th));
+    }
+    join_all(threads);
+  }
+  count = 0;
+  {
+    thread_vector threads;
+    threads.reserve(10);
+    for (int i = 0; i < 10; ++i)
+    {
+      threads.push_back(BOOST_THREAD_MAKE_RV_REF(boost::thread(&increment_count)));
+    }
+    join_all(threads);
+  }
+  count = 0;
+  {
+    thread_vector threads;
+    threads.reserve(10);
+    for (int i = 0; i < 10; ++i)
+    {
+      threads.emplace_back(&increment_count);
+    }
+    join_all(threads);
+  }
+  count = 0;
+  {
+    thread_vector threads;
+    threads.reserve(10);
+    for (int i = 0; i < 10; ++i)
+    {
+      threads.emplace_back(&increment_count);
+    }
+    interrupt_all(threads);
+  }
+  return boost::report_errors();
+}
Modified: trunk/libs/thread/test/threads/thread/constr/FrvalueArgs_pass.cpp
==============================================================================
--- trunk/libs/thread/test/threads/thread/constr/FrvalueArgs_pass.cpp	(original)
+++ trunk/libs/thread/test/threads/thread/constr/FrvalueArgs_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -81,7 +81,7 @@
 int main()
 {
   {
-    boost::thread t = boost::thread( BOOST_EXPLICIT_MOVE(MoveOnly()), BOOST_EXPLICIT_MOVE(MoveOnly()) );
+    boost::thread t = boost::thread( BOOST_THREAD_MAKE_RV_REF(MoveOnly()), BOOST_THREAD_MAKE_RV_REF(MoveOnly()) );
     t.join();
   }
   return boost::report_errors();
Modified: trunk/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp
==============================================================================
--- trunk/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp	(original)
+++ trunk/libs/thread/test/threads/thread/constr/Frvalue_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -77,13 +77,13 @@
 };
 
 MoveOnly MakeMoveOnly() {
-  return BOOST_EXPLICIT_MOVE(MoveOnly());
+  return BOOST_THREAD_MAKE_RV_REF(MoveOnly());
 }
 
 int main()
 {
   {
-    boost::thread t(( BOOST_EXPLICIT_MOVE(MakeMoveOnly()) ));
+    boost::thread t(( BOOST_THREAD_MAKE_RV_REF(MakeMoveOnly()) ));
     t.join();
   }
   return boost::report_errors();
Modified: trunk/libs/thread/test/threads/thread/constr/move_pass.cpp
==============================================================================
--- trunk/libs/thread/test/threads/thread/constr/move_pass.cpp	(original)
+++ trunk/libs/thread/test/threads/thread/constr/move_pass.cpp	2012-04-11 13:16:45 EDT (Wed, 11 Apr 2012)
@@ -84,7 +84,7 @@
   }
   BOOST_TEST(G::n_alive == 0);
   {
-    boost::thread t1((BOOST_EXPLICIT_MOVE(make_thread())));
+    boost::thread t1((BOOST_THREAD_MAKE_RV_REF(make_thread())));
     t1.join();
     BOOST_TEST(G::op_run);
   }