]> gcc.gnu.org Git - gcc.git/commitdiff
libstdc++: Enforce LWG 3472 preconditions on std::counted_iterator
authorJonathan Wakely <jwakely@redhat.com>
Thu, 10 Sep 2020 16:09:15 +0000 (17:09 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 10 Sep 2020 16:09:15 +0000 (17:09 +0100)
libstdc++-v3/ChangeLog:

* include/bits/stl_iterator.h (counted_iterator): Add assertions
to check preconditions added by LWG 3472.

libstdc++-v3/include/bits/stl_iterator.h

index da740e3732e235f553b7193b693f0b97b28ab4d1..f29bae9270601176ec5a1965c21b06a5a10d5ede 100644 (file)
@@ -2036,13 +2036,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr decltype(auto)
       operator*()
       noexcept(noexcept(*_M_current))
-      { return *_M_current; }
+      {
+       __glibcxx_assert( _M_length > 0 );
+       return *_M_current;
+      }
 
       constexpr decltype(auto)
       operator*() const
       noexcept(noexcept(*_M_current))
       requires __detail::__dereferenceable<const _It>
-      { return *_M_current; }
+      {
+       __glibcxx_assert( _M_length > 0 );
+       return *_M_current;
+      }
 
       constexpr counted_iterator&
       operator++()
@@ -2170,14 +2176,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       iter_move(const counted_iterator& __i)
       noexcept(noexcept(ranges::iter_move(__i._M_current)))
       requires input_iterator<_It>
-      { return ranges::iter_move(__i._M_current); }
+      {
+       __glibcxx_assert( __i._M_length > 0 );
+       return ranges::iter_move(__i._M_current);
+      }
 
       template<indirectly_swappable<_It> _It2>
        friend constexpr void
        iter_swap(const counted_iterator& __x,
                  const counted_iterator<_It2>& __y)
        noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current)))
-       { ranges::iter_swap(__x._M_current, __y._M_current); }
+       {
+         __glibcxx_assert( __x._M_length > 0 && __y._M_length > 0 );
+         ranges::iter_swap(__x._M_current, __y._M_current);
+       }
 
     private:
       template<input_or_output_iterator _It2> friend class counted_iterator;
This page took 0.067188 seconds and 5 git commands to generate.