[PATCH] libstdc++: Make mdspan::is_exhaustive() const
Jonathan Wakely
jwakely.gcc@gmail.com
Mon May 18 08:13:26 GMT 2026
On Mon, 18 May 2026, 08:27 Tomasz Kaminski, <tkaminsk@redhat.com> wrote:
>
>
> On Sun, May 17, 2026 at 9:29 PM Jonathan Wakely <jwakely@redhat.com>
> wrote:
>
>> This is specified as const in the standard.
>>
>> libstdc++-v3/ChangeLog:
>>
>> * include/std/mdspan (mdspan::is_exhaustive): Add const keyword.
>> * testsuite/23_containers/mdspan/mdspan.cc: Check that
>> is_unique, is_exhaustive, and is_strided can be called on a
>> const object.
>> ---
>>
>> Tested x86_64-linux.
>>
>
>
>>
>> libstdc++-v3/include/std/mdspan | 2 +-
>> libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/libstdc++-v3/include/std/mdspan
>> b/libstdc++-v3/include/std/mdspan
>> index 5938bf09a940..27d15df12944 100644
>> --- a/libstdc++-v3/include/std/mdspan
>> +++ b/libstdc++-v3/include/std/mdspan
>> @@ -2621,7 +2621,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> { return _PaddedStorage::_M_is_always_exhaustive(); }
>>
>> constexpr bool
>> - is_exhaustive() noexcept
>> + is_exhaustive() const noexcept
>> { return _M_storage._M_is_exhaustive(); }
>>
> This is not mdspan, but `layout_left_padded`, and the problem seems to be
> repeated in more mappings, and we should fix all of them. Do you want me
> to create a follow-up patch with that? I would also backport it to 16.
>
Oops! Yes, we should fix it everywhere in both branches.
>> static constexpr bool
>> diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
>> b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
>> index 62ff7201cce9..99205142579a 100644
>> --- a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
>> +++ b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
>> @@ -715,7 +715,7 @@ template<typename Layout, bool Expected>
>> test_nothrow_is_methods()
>> {
>> using Extents = std::extents<int, dyn>;
>> - using MDSpan = std::mdspan<double, Extents, Layout>;
>> + using MDSpan = const std::mdspan<double, Extents, Layout>;
>> static_assert(noexcept(MDSpan::is_always_unique()) == Expected);
>> static_assert(noexcept(MDSpan::is_always_exhaustive()) == Expected);
>> static_assert(noexcept(MDSpan::is_always_strided()) == Expected);
>> --
>> 2.54.0
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260518/f7a223aa/attachment.htm>
More information about the Libstdc++
mailing list