#ifndef BOOST_MOVE_ALGORITHM_HPP
#define BOOST_MOVE_ALGORITHM_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/move/detail/config_begin.hpp>
#include <boost/move/utility_core.hpp>
#include <boost/move/iterator.hpp>
#include <boost/move/algo/move.hpp>
#include <algorithm>
#include <memory>
namespace boost {
namespace move_detail {
template
<typename I, typename F> inline F uninitialized_move_move_iterator(I f, I l, F r
)
{
return ::boost::uninitialized_move(f, l, r);
}
}
template
<typename I, typename F> inline F uninitialized_copy_or_move(I f, I l, F r,
typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
{
return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r);
}
namespace move_detail {
template
<typename I, typename F> inline F move_move_iterator(I f, I l, F r
)
{
return ::boost::move(f, l, r);
}
}
template
<typename I, typename F> inline F copy_or_move(I f, I l, F r,
typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
{
return ::boost::move_detail::move_move_iterator(f, l, r);
}
template
<typename I, typename F> inline F uninitialized_copy_or_move(I f, I l, F r
,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
)
{
return std::uninitialized_copy(f, l, r);
}
template
<typename I, typename F> inline F copy_or_move(I f, I l, F r
,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
)
{
return std::copy(f, l, r);
}
}
#include <boost/move/detail/config_end.hpp>
#endif