From 9404f31c6b3b96ef804846100eb1a14ba78a64d0 Mon Sep 17 00:00:00 2001 From: "shlokmundhra1111@gmail.com" Date: Sat, 6 Dec 2025 20:49:54 -0500 Subject: [PATCH 1/4] fix issue #5916 Remove remove_cv_t from standard integer type checks --- stl/inc/__msvc_bit_utils.hpp | 2 +- stl/inc/utility | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/stl/inc/__msvc_bit_utils.hpp b/stl/inc/__msvc_bit_utils.hpp index 46824ee80f4..0231603c9bc 100644 --- a/stl/inc/__msvc_bit_utils.hpp +++ b/stl/inc/__msvc_bit_utils.hpp @@ -310,7 +310,7 @@ _NODISCARD int _Checked_popcount(const _Ty _Val) noexcept { template constexpr bool _Is_standard_unsigned_integer = - _Is_any_of_v, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long>; + _Is_any_of_v<_Ty, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long>; template , int> = 0> _NODISCARD _CONSTEXPR20 int _Countr_zero(const _Ty _Val) noexcept { diff --git a/stl/inc/utility b/stl/inc/utility index ceb98ae3ee1..f485e7fe30d 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -678,15 +678,15 @@ struct _MSVC_KNOWN_SEMANTICS tuple_element<_Index, const _Tuple> : tuple_element }; template -struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS - tuple_element<_Index, volatile _Tuple> : tuple_element<_Index, _Tuple> { +struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS tuple_element<_Index, volatile _Tuple> + : tuple_element<_Index, _Tuple> { using _Mybase = tuple_element<_Index, _Tuple>; using type = add_volatile_t; }; template -struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS - tuple_element<_Index, const volatile _Tuple> : tuple_element<_Index, _Tuple> { +struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS tuple_element<_Index, const volatile _Tuple> + : tuple_element<_Index, _Tuple> { using _Mybase = tuple_element<_Index, _Tuple>; using type = add_cv_t; }; @@ -949,8 +949,8 @@ _NODISCARD constexpr bool _In_range(const _Ty _Value) noexcept { #if _HAS_CXX20 template -constexpr bool _Is_standard_integer = _Is_any_of_v, signed char, short, int, long, long long, - unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long>; +constexpr bool _Is_standard_integer = _Is_any_of_v<_Ty, signed char, short, int, long, long long, unsigned char, + unsigned short, unsigned int, unsigned long, unsigned long long>; _EXPORT_STD template _NODISCARD constexpr bool cmp_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept { From acb2629a63b4da4aeb5f582c94b0ad0b3796d942 Mon Sep 17 00:00:00 2001 From: smundhra-git Date: Sat, 6 Dec 2025 21:11:02 -0500 Subject: [PATCH 2/4] Apply clang-format fixes --- stl/inc/utility | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stl/inc/utility b/stl/inc/utility index f485e7fe30d..662e08c0e27 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -678,15 +678,15 @@ struct _MSVC_KNOWN_SEMANTICS tuple_element<_Index, const _Tuple> : tuple_element }; template -struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS tuple_element<_Index, volatile _Tuple> - : tuple_element<_Index, _Tuple> { +struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS + tuple_element<_Index, volatile _Tuple> : tuple_element<_Index, _Tuple> { using _Mybase = tuple_element<_Index, _Tuple>; using type = add_volatile_t; }; template -struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS tuple_element<_Index, const volatile _Tuple> - : tuple_element<_Index, _Tuple> { +struct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS + tuple_element<_Index, const volatile _Tuple> : tuple_element<_Index, _Tuple> { using _Mybase = tuple_element<_Index, _Tuple>; using type = add_cv_t; }; From 00a8b9306004f3960b30cc2d81f1c59bd30271a2 Mon Sep 17 00:00:00 2001 From: smundhra-git Date: Sun, 7 Dec 2025 02:47:54 -0500 Subject: [PATCH 3/4] Fix CWG-251: Remove remove_cv_t from standard integer type checks --- stl/inc/mdspan | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stl/inc/mdspan b/stl/inc/mdspan index 962dc9b9aaa..30279ca5796 100644 --- a/stl/inc/mdspan +++ b/stl/inc/mdspan @@ -147,7 +147,7 @@ private: _STL_INTERNAL_STATIC_ASSERT(is_convertible_v && is_nothrow_constructible_v); #if _ITERATOR_DEBUG_LEVEL != 0 - if constexpr (_Is_standard_integer<_OtherIndexType> && _Rank_dynamic != 0) { + if constexpr (_Is_standard_integer> && _Rank_dynamic != 0) { _STL_VERIFY(((_Dynamic_exts[_Indices] >= 0 && _STD in_range(_Dynamic_exts[_Indices])) && ...), "exts[r] must be representable as a nonnegative value of type index_type for every rank index r " "(N4950 [mdspan.extents.cons]/10.2)"); @@ -162,7 +162,7 @@ private: _STL_INTERNAL_STATIC_ASSERT(is_convertible_v && is_nothrow_constructible_v); #if _ITERATOR_DEBUG_LEVEL != 0 - if constexpr (_Is_standard_integer<_OtherIndexType>) { + if constexpr (_Is_standard_integer>) { for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) { _STL_VERIFY( _Static_extents[_Idx] == dynamic_extent || _STD cmp_equal(_Static_extents[_Idx], _Mixed_exts[_Idx]), @@ -227,7 +227,7 @@ public: : extents(_Extents_from_tuple{}, _STD tie(_Exts...), make_index_sequence{}) { #if _ITERATOR_DEBUG_LEVEL != 0 auto _Check_extent = [](const _Ty& _Ext) { - if constexpr (_Is_standard_integer<_Ty>) { + if constexpr (_Is_standard_integer>) { return _Ext >= 0 && _STD in_range(_Ext); } else if constexpr (integral<_Ty> && !same_as<_Ty, bool>) { // NB: character types const auto _Integer_ext = static_cast(_Ext); From fae15b9d26cc0b55cc0b47e316ca221a8db1f280 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Sun, 7 Dec 2025 12:43:40 -0800 Subject: [PATCH 4/4] `extents(_OtherIndexTypes... _Exts)` doesn't need `remove_cv_t`. --- stl/inc/mdspan | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stl/inc/mdspan b/stl/inc/mdspan index 30279ca5796..a8d4134ab8e 100644 --- a/stl/inc/mdspan +++ b/stl/inc/mdspan @@ -227,7 +227,7 @@ public: : extents(_Extents_from_tuple{}, _STD tie(_Exts...), make_index_sequence{}) { #if _ITERATOR_DEBUG_LEVEL != 0 auto _Check_extent = [](const _Ty& _Ext) { - if constexpr (_Is_standard_integer>) { + if constexpr (_Is_standard_integer<_Ty>) { return _Ext >= 0 && _STD in_range(_Ext); } else if constexpr (integral<_Ty> && !same_as<_Ty, bool>) { // NB: character types const auto _Integer_ext = static_cast(_Ext);