template<class BidirectionalIterator>
constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
template<class ExecutionPolicy, class BidirectionalIterator>
void reverse(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last);
namespace ranges {
template<BidirectionalIterator I, Sentinel<I> S>
requires Permutable<I>
constexpr I reverse(I first, S last);
template<BidirectionalRange R>
requires Permutable<iterator_t<R>>
constexpr safe_iterator_t<R> reverse(R&& r);
}
template<class BidirectionalIterator, class OutputIterator>
constexpr OutputIterator
reverse_copy(BidirectionalIterator first, BidirectionalIterator last,
OutputIterator result);
template<class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>
ForwardIterator
reverse_copy(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last,
ForwardIterator result);
namespace ranges {
template<BidirectionalIterator I, Sentinel<I> S, WeaklyIncrementable O>
requires IndirectlyCopyable<I, O>
constexpr reverse_copy_result<I, O>
reverse_copy(I first, S last, O result);
template<BidirectionalRange R, WeaklyIncrementable O>
requires IndirectlyCopyable<iterator_t<R>, O>
constexpr reverse_copy_result<safe_iterator_t<R>, O>
reverse_copy(R&& r, O result);
}