libstdc++: Fix std::span constraint for sizeof(size_t) < sizeof(int) [PR108221]
authorJonathan Wakely <jwakely@redhat.com>
Mon, 9 Jan 2023 10:45:31 +0000 (10:45 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 10 Jan 2023 10:09:21 +0000 (10:09 +0000)
The default constructor has a constraint that is always false if
arithmetic on size_t values promotes to int. Rewrite the constraint
exactly as written in the standard, which works correctly.

libstdc++-v3/ChangeLog:

PR libstdc++/108221
* include/std/span (span::span()): Un-simplify constraint to
work for size_t of lesser rank than int.

libstdc++-v3/include/std/span

index 251fed9..b336332 100644 (file)
@@ -145,7 +145,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       constexpr
       span() noexcept
-      requires ((_Extent + 1u) <= 1u)
+      requires (_Extent == dynamic_extent || _Extent == 0)
       : _M_ptr(nullptr), _M_extent(0)
       { }