public: long data_; static int n_moves; static int n_copies; BOOST_THREAD_COPYABLE_AND_MOVABLE(A) static void reset() { n_moves=0; n_copies=0; } explicit A(long i) : data_(i) { } A(BOOST_THREAD_RV_REF(A) a) : data_(BOOST_THREAD_RV(a).data_) { BOOST_THREAD_RV(a).data_ = -1; ++n_moves; } A& operator=(BOOST_THREAD_RV_REF(A) a) { data_ = BOOST_THREAD_RV(a).data_; BOOST_THREAD_RV(a).data_ = -1; ++n_moves; return *this; } A(const A& a) : data_(a.data_) { ++n_copies; }
return boost::move(t); } #endif #endif struct X { public: int i; BOOST_THREAD_MOVABLE_ONLY(X) X(): i(42) {} X(BOOST_THREAD_RV_REF(X) other): i(BOOST_THREAD_RV(other).i) { BOOST_THREAD_RV(other).i=0; } ~X() {} }; namespace boost { BOOST_THREAD_DCL_MOVABLE(X) } int make_int() { return 42; }
//csbl::tuple<Fpd, Argsd...> f_; csbl::tuple<Fp, Args...> f_; public: BOOST_THREAD_COPYABLE_AND_MOVABLE( invoker) //typedef typename invoke_of<_Fp, _Args...>::type Rp; typedef typename result_of<Fp(Args...)>::type result_type; template <class F, class ... As> BOOST_SYMBOL_VISIBLE explicit invoker(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(As)... args) : f_(boost::forward<F>(f), boost::forward<As>(args)...) {} BOOST_SYMBOL_VISIBLE invoker(BOOST_THREAD_RV_REF(invoker) f) : f_(boost::move(BOOST_THREAD_RV(f).f_)) {} BOOST_SYMBOL_VISIBLE invoker( const invoker& f) : f_(f.f_) {} BOOST_SYMBOL_VISIBLE invoker& operator=(BOOST_THREAD_RV_REF(invoker) f) { f_ = boost::move(BOOST_THREAD_RV(f).f_); } BOOST_SYMBOL_VISIBLE invoker& operator=( BOOST_THREAD_COPY_ASSIGN_REF(invoker) f) {