Pushed to original patch (without LWG4351 changes) to trunk.

On Sat, Sep 6, 2025 at 3:18 PM Luc Grosheintz <luc.groshei...@gmail.com>
wrote:

>
>
> On 9/5/25 19:58, Jonathan Wakely wrote:
> > On Fri, 5 Sept 2025 at 16:26, Jonathan Wakely <jwak...@redhat.com>
> wrote:
> >>
> >> On Thu, 4 Sept 2025 at 13:22, Luc Grosheintz <luc.groshei...@gmail.com>
> wrote:
> >>>
> >>> A usecase for P2781R9 is more ergonomic creation of span and mdspan
> with
> >>> mixed static and dynamic extents, e.g.:
> >>>
> >>>      span(ptr, cw<3>)
> >>>      extents(cw<3>, 5, cw<7>)
> >>>      mdspan(ptr, cw<3>, 5, cw<7>)
> >>>
> >>> should be deduced as:
> >>>      span<..., 3>
> >>>      extents<..., 3, dyn, 7>
> >>>      mdspan<..., extents<..., 3, dyn, 7>>
> >>>
> >>> The change required is to strip cv-qualifiers and references from
> >>> `_Tp::value`, because of:
> >>>
> >>>      template<_CwFixedValue _X, typename>
> >>>        struct constant_wrapper : _CwOperators
> >>>        {
> >>>          static constexpr const auto& value = _X._M_data;
> >>>
> >>> libstdc++-v3/ChangeLog:
> >>>
> >>>          * include/std/span (__integral_constant_like): Allow the
> member
> >>>          `value` of a constant wrapping type to be a const reference of
> >>>          an integer.
> >>>          * testsuite/23_containers/mdspan/extents/misc.cc: Add test for
> >>>          cw and constant_wrapper.
> >>>          * testsuite/23_containers/mdspan/mdspan.cc: Ditto.
> >>>          * testsuite/23_containers/span/deduction.cc: Ditto.
> >>>
> >>> Signed-off-by: Luc Grosheintz <luc.groshei...@gmail.com>
> >>> ---
> >>>   libstdc++-v3/include/std/span                 |  3 ++-
> >>>   .../23_containers/mdspan/extents/misc.cc      | 22 +++++++++++++-----
> >>>   .../testsuite/23_containers/mdspan/mdspan.cc  | 23
> +++++++++++++------
> >>>   .../testsuite/23_containers/span/deduction.cc | 20 +++++++++++++++-
> >>>   4 files changed, 53 insertions(+), 15 deletions(-)
> >>>
> >>> diff --git a/libstdc++-v3/include/std/span
> b/libstdc++-v3/include/std/span
> >>> index 44f9b36a7ef..f9aa3c77e8e 100644
> >>> --- a/libstdc++-v3/include/std/span
> >>> +++ b/libstdc++-v3/include/std/span
> >>> @@ -480,7 +480,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> >>>     namespace __detail
> >>>     {
> >>>       template<typename _Tp>
> >>> -      concept __integral_constant_like =
> is_integral_v<decltype(_Tp::value)>
> >>> +      concept __integral_constant_like =
> >>> +       is_integral_v<remove_cvref_t<decltype(_Tp::value)>>
> >>>          && !is_same_v<bool, remove_const_t<decltype(_Tp::value)>>
> >>
> >> We also need remove_cvref_t on this line for the not-bool check, so
> >> that constant_wrapper<bool&> doesn't match here, but I haven't opened
> >> an LWG issue about that yet, so we can fix that later.
> >
> > I've created https://cplusplus.github.io/LWG/issue4351 now.
> >
>
> Here's a patch to apply the change:
> https://gcc.gnu.org/pipermail/libstdc++/2025-September/063315.html
>
> if you prefer to squash it into this commit, let me know.
>
>

Reply via email to