Make enumerate() iterator suitable for use with std::ranges
std::ranges algorithms include requires() clauses that: - rejected enumerated_sentinel: not default-constructible - rejected enumerated_sentinel: not assignable due to `const` member - rejected enumerated_iterator: no postfix operator++ None of these need to be satisfied for enumerate to work properly, but this commit satisfies and models these requirements, so that future use of std::ranges algorithms will work.
This commit is contained in:
parent
9188c72b34
commit
34046216a2
|
@ -60,7 +60,8 @@ template <typename sentinel_type>
|
|||
class enumerated_sentinel
|
||||
{
|
||||
public:
|
||||
const sentinel_type m_sentinel;
|
||||
sentinel_type m_sentinel;
|
||||
constexpr enumerated_sentinel() = default;
|
||||
constexpr enumerated_sentinel(sentinel_type &&iter) :
|
||||
m_sentinel(std::move(iter))
|
||||
{
|
||||
|
@ -106,6 +107,12 @@ public:
|
|||
++ m_idx;
|
||||
return *this;
|
||||
}
|
||||
enumerated_iterator operator++(int)
|
||||
{
|
||||
auto result = *this;
|
||||
++ * this;
|
||||
return result;
|
||||
}
|
||||
constexpr bool operator==(const enumerated_sentinel<sentinel_type> &i) const
|
||||
{
|
||||
return m_iter == i.m_sentinel;
|
||||
|
|
Loading…
Reference in a new issue