// 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) // (C) Copyright 2007-8 Anthony Williams #ifndef BOOST_THREAD_MOVE_HPP #define BOOST_THREAD_MOVE_HPP #ifndef BOOST_NO_SFINAE #include #include #endif #include namespace boost { namespace detail { template struct thread_move_t { T& t; explicit thread_move_t(T& t_): t(t_) {} T& operator*() const { return t; } T* operator->() const { return &t; } private: void operator=(thread_move_t&); }; } #ifndef BOOST_NO_SFINAE template typename enable_if >, T >::type move(T& t) { return T(detail::thread_move_t(t)); } #endif template detail::thread_move_t move(detail::thread_move_t t) { return t; } } #include #endif