On Tue, 16 Jan 2024 at 14:07, Jonathan Wakely wrote:
>
> On 15/01/24 19:09 -0500, Patrick Palka wrote:
> >> +    friend _Iterator
> >> +    operator+(_Iterator __i, difference_type __n)
> >
> >constexpr?
>
> Fixed. I've added tests that all iterator ops are usable in constant
> expressions, which found a bug in operator+= (it didn't let you
> increment one past the end of the range).

I found another bug in operator+= which is fixed and tested like so:

--- a/libstdc++-v3/include/std/text_encoding
+++ b/libstdc++-v3/include/std/text_encoding
@@ -584,7 +584,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               *this == _Iterator{};
           }
       }
-      __glibcxx_assert(_M_rep != nullptr);
+      if (__n != 0)
+       __glibcxx_assert(_M_rep != nullptr);
      return *this;
    }

--- a/libstdc++-v3/testsuite/std/text_encoding/requirements.cc
+++ b/libstdc++-v3/testsuite/std/text_encoding/requirements.cc
@@ -67,6 +67,11 @@ test_constexpr_iterator()
  VERIFY( *(iter + 1) == iter[1] );
  VERIFY( (1 + iter - 1) == begin );
  VERIFY( (-1 + (iter - -2) + -1) == begin );
+
+  std::ranges::iterator_t<std::text_encoding::aliases_view> singular;
+  VERIFY( (singular + 0) == singular );
+  VERIFY( (singular - 0) == singular );
+
  return true;
}
static_assert( test_constexpr_iterator() );

Reply via email to