From c0671e2c9b5c70fbcda277dcd5321d052ca2a2ee Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Thu, 13 Jan 2022 12:58:53 -0500 Subject: [PATCH] [libc++] Move assignable_sentinel to a common header where it can be reused --- .../range.iter.ops.next/iterator_sentinel.pass.cpp | 14 -------------- .../iterators/iterator.primitives/range.iter.ops/types.h | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_sentinel.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_sentinel.pass.cpp index dcb3c6f..950fd77 100644 --- a/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_sentinel.pass.cpp +++ b/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/range.iter.ops.next/iterator_sentinel.pass.cpp @@ -22,20 +22,6 @@ using range_t = std::array; -// Sentinel type that can be assigned to an iterator. This is to test the case where -// std::ranges::next uses assignment instead of successive increments below. -template -class assignable_sentinel { -public: - explicit assignable_sentinel() = default; - constexpr explicit assignable_sentinel(const It& it) : base_(base(it)) {} - constexpr operator It() const { return It(base_); } - constexpr bool operator==(const It& other) const { return base_ == base(other); } - friend constexpr It base(const assignable_sentinel& s) { return It(s.base_); } -private: - decltype(base(std::declval())) base_; -}; - template constexpr void check_assignable(int* it, int* last, int const* expected) { { diff --git a/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/types.h b/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/types.h index 2f2f0a8..71704c9 100644 --- a/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/types.h +++ b/libcxx/test/std/iterators/iterator.primitives/range.iter.ops/types.h @@ -12,6 +12,7 @@ #include #include #include +#include class distance_apriori_sentinel { public: @@ -37,4 +38,18 @@ private: std::ptrdiff_t count_ = 0; }; +// Sentinel type that can be assigned to an iterator. This is to test the cases where the +// various iterator operations use assignment instead of successive increments/decrements. +template +class assignable_sentinel { +public: + explicit assignable_sentinel() = default; + constexpr explicit assignable_sentinel(const It& it) : base_(base(it)) {} + constexpr operator It() const { return It(base_); } + constexpr bool operator==(const It& other) const { return base_ == base(other); } + friend constexpr It base(const assignable_sentinel& s) { return It(s.base_); } +private: + decltype(base(std::declval())) base_; +}; + #endif // TEST_STD_ITERATORS_ITERATOR_PRIMITIVES_RANGE_ITER_OPS_TYPES_H -- 2.7.4