From: Luc Grosheintz Date: Tue, 23 Sep 2025 13:10:04 +0000 (+0200) Subject: libstdc++: Refactor __mdspan::__static_quotient. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5756d0b61317b28922e5c7a9ce30f0aca19b901d;p=thirdparty%2Fgcc.git libstdc++: Refactor __mdspan::__static_quotient. 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. Reviewed-by: Tomasz KamiƄski Reviewed-by: Jonathan Wakely Signed-off-by: Luc Grosheintz --- diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 01d3b2cb6b1..d9b5152b693 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -597,13 +597,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __res; } - template + template consteval _IndexType - __static_quotient(_IndexType __nom = __gnu_cxx::__int_traits<_IndexType> - ::__max) + __static_quotient(std::span __sta_exts, + _IndexType __nom = __gnu_cxx::__int_traits<_IndexType>::__max) { - std::span __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 + requires __is_extents<_Extents> + consteval _IndexType + __static_quotient(_IndexType __nom + = __gnu_cxx::__int_traits<_IndexType>::__max) + { + std::span __sta_exts = __static_extents<_Extents>(); + return __static_quotient<_IndexType>(__sta_exts, __nom); + } + template constexpr bool __is_representable_extents(const _Extents& __exts) noexcept