move.hpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //-----------------------------------------------------------------------------
  2. // boost variant/detail/move.hpp header file
  3. // See http://www.boost.org for updates, documentation, and revision history.
  4. //-----------------------------------------------------------------------------
  5. //
  6. // Copyright (c) 2002-2003 Eric Friedman
  7. // Copyright (c) 2002 by Andrei Alexandrescu
  8. // Copyright (c) 2013-2019 Antony Polukhin
  9. //
  10. // Use, modification and distribution are subject to the
  11. // Boost Software License, Version 1.0. (See accompanying file
  12. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  13. //
  14. // This file derivative of MoJO. Much thanks to Andrei for his initial work.
  15. // See <http://www.cuj.com/experts/2102/alexandr.htm> for information on MOJO.
  16. // Re-issued here under the Boost Software License, with permission of the original
  17. // author (Andrei Alexandrescu).
  18. #ifndef BOOST_VARIANT_DETAIL_MOVE_HPP
  19. #define BOOST_VARIANT_DETAIL_MOVE_HPP
  20. #include <iterator> // for iterator_traits
  21. #include <new> // for placement new
  22. #include <boost/config.hpp>
  23. #include <boost/detail/workaround.hpp>
  24. #include <boost/move/move.hpp>
  25. #include <boost/move/adl_move_swap.hpp>
  26. namespace boost { namespace detail { namespace variant {
  27. using boost::move;
  28. //////////////////////////////////////////////////////////////////////////
  29. // function template move_swap
  30. //
  31. // Swaps using Koenig lookup but falls back to move-swap for primitive
  32. // types and on non-conforming compilers.
  33. //
  34. template <typename T>
  35. inline void move_swap(T& lhs, T& rhs)
  36. {
  37. ::boost::adl_move_swap(lhs, rhs);
  38. }
  39. }}} // namespace boost::detail::variant
  40. #endif // BOOST_VARIANT_DETAIL_MOVE_HPP