diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-03-10 22:15:58 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-03-10 22:15:58 +0000 |
commit | 0b7f1e24316cfc1f85408918d1734d3266d65089 (patch) | |
tree | 51cd6058b26ff61d257c7d0bbdb4b34a072208aa /libstdc++-v3/include | |
parent | b269a014771776f860730874095dffb34839a466 (diff) | |
download | gcc-0b7f1e24316cfc1f85408918d1734d3266d65089.zip gcc-0b7f1e24316cfc1f85408918d1734d3266d65089.tar.gz gcc-0b7f1e24316cfc1f85408918d1734d3266d65089.tar.bz2 |
libstdc++: Fix uses of _M_current in split_view's outer iterator
These direct uses of _M_current should all be __current() so they are
valid when the base type doesn't satisfy the forward_range concept.
* include/std/ranges (split_view::_OuterIter::__at_end): Use __current
instead of _M_current.
(split_view::_OuterIter::operator++): Likewise.
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/std/ranges | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 4dc7342..de120d6 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -2703,9 +2703,9 @@ namespace views constexpr bool __at_end() const - { return _M_current == ranges::end(_M_parent->_M_base); } + { return __current() == ranges::end(_M_parent->_M_base); } - // XXX: [24.7.11.3.1] + // [range.split.outer] p1 // Many of the following specifications refer to the notional member // current of outer-iterator. current is equivalent to current_ if // V models forward_range, and parent_->current_ otherwise. @@ -2798,21 +2798,21 @@ namespace views operator++() { const auto __end = ranges::end(_M_parent->_M_base); - if (_M_current == __end) + if (__current() == __end) return *this; const auto [__pbegin, __pend] = subrange{_M_parent->_M_pattern}; if (__pbegin == __pend) - ++_M_current; + ++__current(); else do { auto [__b, __p] - = __detail::mismatch(std::move(_M_current), __end, + = __detail::mismatch(std::move(__current()), __end, __pbegin, __pend); - _M_current = std::move(__b); + __current() = std::move(__b); if (__p == __pend) break; - } while (++_M_current != __end); + } while (++__current() != __end); return *this; } |