On Thu, Sep 11, 2025 at 1:48 PM Luc Grosheintz <luc.groshei...@gmail.com> wrote:
> For padded layouts we want to check that the product of the > padded stride with the remaining extents is representable. > > Creating a second overload, allows passing in subspans of the > static extents and retains the ergonomics for the common case > of passing in all static extents. > > libstdc++-v3/ChangeLog: > > * include/std/mdspan (__static_quotient): New overload. > > Signed-off-by: Luc Grosheintz <luc.groshei...@gmail.com> > --- > LGTM. > libstdc++-v3/include/std/mdspan | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/libstdc++-v3/include/std/mdspan > b/libstdc++-v3/include/std/mdspan > index 01d3b2cb6b1..9dd0c85f5b0 100644 > --- a/libstdc++-v3/include/std/mdspan > +++ b/libstdc++-v3/include/std/mdspan > @@ -597,13 +597,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > return __res; > } > > - template<typename _Extents, > - typename _IndexType = typename _Extents::index_type> > + template<typename _IndexType> > consteval _IndexType > - __static_quotient(_IndexType __nom = > __gnu_cxx::__int_traits<_IndexType> > - ::__max) > + __static_quotient(std::span<const size_t> __sta_exts, > + _IndexType __nom = __gnu_cxx::__int_traits<_IndexType>::__max) > { > - std::span<const size_t> __sta_exts = __static_extents<_Extents>(); > for (auto __factor : __sta_exts) > { > if (__factor != dynamic_extent) > @@ -614,6 +612,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > return __nom; > } > > + template<typename _Extents, > + typename _IndexType = typename _Extents::index_type> > + requires __is_extents<_Extents> > + consteval _IndexType > + __static_quotient(_IndexType __nom = > __gnu_cxx::__int_traits<_IndexType> > + ::__max) > + { > + std::span<const size_t> __sta_exts = __static_extents<_Extents>(); > + return __static_quotient<_IndexType>(__sta_exts, __nom); > + } > + > template<typename _Extents> > constexpr bool > __is_representable_extents(const _Extents& __exts) noexcept > -- > 2.50.1 > >