From c3cd767ea45c8b7cc61e2b4faa388516100dc941 Mon Sep 17 00:00:00 2001 From: "Vicente J. Botet Escriba" Date: Tue, 13 Oct 2015 19:13:56 +0200 Subject: [PATCH] make executor_adaptor copyable/movable. --- .../thread/executors/executor_adaptor.hpp | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/include/boost/thread/executors/executor_adaptor.hpp b/include/boost/thread/executors/executor_adaptor.hpp index ae99142c..da69d2d6 100644 --- a/include/boost/thread/executors/executor_adaptor.hpp +++ b/include/boost/thread/executors/executor_adaptor.hpp @@ -12,6 +12,7 @@ #include #include +#include #include @@ -35,24 +36,47 @@ namespace executors */ //executor_adaptor(executor_adaptor const&) = default; //executor_adaptor(executor_adaptor &&) = default; + BOOST_THREAD_COPYABLE_AND_MOVABLE(executor_adaptor) executor_adaptor(executor_adaptor const& x) : ex(x.ex) {} executor_adaptor(BOOST_THREAD_RV_REF(executor_adaptor) x) : ex(boost::move(x.ex)) {} + executor_adaptor& operator=(BOOST_THREAD_COPY_ASSIGN_REF(executor_adaptor) x) + { + if (this != &ex) + { + ex = x.ex; + } + return *this; + } + executor_adaptor& operator=(BOOST_THREAD_RV_REF(executor_adaptor) x) + { + if (this != &ex) + { + ex = boost::move(x.ex); + } + return *this; + } + + executor_adaptor(Executor const& ex) : ex(ex) {} + executor_adaptor(BOOST_THREAD_RV_REF(Executor) ex) : ex(boost::move(ex)) {} + executor_adaptor() : ex() {} #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template executor_adaptor(BOOST_THREAD_FWD_REF(Arg) arg, BOOST_THREAD_FWD_REF(Args) ... args - , typename disable_if::type, executor_adaptor>, int* >::type=0 + , typename disable_if_c< + is_same::type, executor_adaptor>::value + || + is_same::type, Executor>::value + , int* >::type=0 ) : ex(boost::forward(arg), boost::forward(args)...) {} #else /** * executor_adaptor constructor */ - executor_adaptor() : ex() {} - template executor_adaptor( BOOST_THREAD_FWD_REF(A1) a1 @@ -137,6 +161,9 @@ namespace executors }; } using executors::executor_adaptor; + +BOOST_THREAD_DCL_MOVABLE_BEG(T) executor_adaptor BOOST_THREAD_DCL_MOVABLE_END + } #include