Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions libcxx/include/__algorithm/ranges_rotate_copy.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include <__algorithm/ranges_copy.h>
#include <__config>
#include <__iterator/concepts.h>
#include <__iterator/reverse_iterator.h>
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/dangling.h>
Expand All @@ -34,7 +33,7 @@ using rotate_copy_result = in_out_result<_InIter, _OutIter>;

namespace __rotate_copy {
struct __fn {
template <bidirectional_iterator _InIter, sentinel_for<_InIter> _Sent, weakly_incrementable _OutIter>
template <forward_iterator _InIter, sentinel_for<_InIter> _Sent, weakly_incrementable _OutIter>
requires indirectly_copyable<_InIter, _OutIter>
_LIBCPP_HIDE_FROM_ABI constexpr rotate_copy_result<_InIter, _OutIter>
operator()(_InIter __first, _InIter __middle, _Sent __last, _OutIter __result) const {
Expand All @@ -43,7 +42,7 @@ struct __fn {
return {std::move(__res1.in), std::move(__res2.out)};
}

template <bidirectional_range _Range, weakly_incrementable _OutIter>
template <forward_range _Range, weakly_incrementable _OutIter>
requires indirectly_copyable<iterator_t<_Range>, _OutIter>
_LIBCPP_HIDE_FROM_ABI constexpr rotate_copy_result<borrowed_iterator_t<_Range>, _OutIter>
operator()(_Range&& __range, iterator_t<_Range> __middle, _OutIter __result) const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ template <class Range, class Out = int*>
concept HasRotateCopyR = requires(Range range, Out out) { std::ranges::rotate_copy(range, nullptr, out); };

static_assert(HasRotateCopyIt<int*>);
static_assert(!HasRotateCopyIt<BidirectionalIteratorNotDerivedFrom>);
static_assert(!HasRotateCopyIt<BidirectionalIteratorNotDecrementable>);
static_assert(!HasRotateCopyIt<ForwardIteratorNotDerivedFrom>);
static_assert(!HasRotateCopyIt<ForwardIteratorNotIncrementable>);
static_assert(!HasRotateCopyIt<int*, SentinelForNotSemiregular>);
static_assert(!HasRotateCopyIt<int*, SentinelForNotWeaklyEqualityComparableWith>);
static_assert(!HasRotateCopyIt<int*, OutputIteratorNotIndirectlyWritable>);
static_assert(!HasRotateCopyIt<int*, OutputIteratorNotInputOrOutputIterator>);

static_assert(HasRotateCopyR<UncheckedRange<int*>>);
static_assert(!HasRotateCopyR<BidirectionalRangeNotDerivedFrom>);
static_assert(!HasRotateCopyR<BidirectionalRangeNotDecrementable>);
static_assert(!HasRotateCopyR<ForwardRangeNotDerivedFrom>);
static_assert(!HasRotateCopyR<ForwardRangeNotIncrementable>);
static_assert(!HasRotateCopyR<UncheckedRange<int*, SentinelForNotSemiregular>>);
static_assert(!HasRotateCopyR<UncheckedRange<int*>, OutputIteratorNotIndirectlyWritable>);
static_assert(!HasRotateCopyR<UncheckedRange<int*>, OutputIteratorNotInputOrOutputIterator>);
Expand Down Expand Up @@ -112,6 +112,7 @@ constexpr void test_out_iterators() {
}

constexpr bool test() {
test_out_iterators<forward_iterator<int*>>();
test_out_iterators<bidirectional_iterator<int*>>();
test_out_iterators<random_access_iterator<int*>>();
test_out_iterators<contiguous_iterator<int*>>();
Expand Down