]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Reorder constraints on std::span::span(Range&&) constructor.
authorJonathan Wakely <jwakely@redhat.com>
Mon, 1 Nov 2021 11:32:39 +0000 (11:32 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Mon, 1 Nov 2021 21:01:31 +0000 (21:01 +0000)
In PR libstdc++/103013 Tim Song pointed out that we could reorder the
constraints of this constructor. That's worth doing just to reduce the
work the compiler has to do during overload resolution, even if it isn't
needed to make the code in the PR work.

libstdc++-v3/ChangeLog:

* include/std/span (span(Range&&)): Reorder constraints.

libstdc++-v3/include/std/span

index 61824dee845941ba6e5953298b9ec297ff4ded06..0898ea85c50338d4adab775ebf4fbeae9927fa60 100644 (file)
@@ -201,11 +201,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        { }
 
       template<typename _Range>
-       requires ranges::contiguous_range<_Range> && ranges::sized_range<_Range>
-         && (ranges::borrowed_range<_Range> || is_const_v<element_type>)
-         && (!__detail::__is_span<remove_cvref_t<_Range>>)
+       requires (!__detail::__is_span<remove_cvref_t<_Range>>)
          && (!__detail::__is_std_array<remove_cvref_t<_Range>>)
          && (!is_array_v<remove_cvref_t<_Range>>)
+         && ranges::contiguous_range<_Range> && ranges::sized_range<_Range>
+         && (ranges::borrowed_range<_Range> || is_const_v<element_type>)
          && __is_compatible_ref<ranges::range_reference_t<_Range>>::value
        constexpr explicit(extent != dynamic_extent)
        span(_Range&& __range)