@@ -107,15 +107,12 @@ struct __counting_sort_traits {
107107 constexpr static auto __radix_size = std::__intlog2<uint64_t >(__value_range);
108108};
109109
110- template <class _Radix >
111- _LIBCPP_HIDE_FROM_ABI auto __nth_radix (size_t __radix_number, _Radix __radix) {
112- return [__radix_number, __radix = std::move (__radix)](auto __n) {
113- using value_type = decltype (__n);
114- static_assert (is_unsigned<value_type>::value, " " );
115- using traits = __counting_sort_traits<value_type, _Radix>;
116-
117- return __radix (static_cast <value_type>(__n >> traits::__radix_size * __radix_number));
118- };
110+ template <class _Radix , class _Integer >
111+ _LIBCPP_HIDE_FROM_ABI auto __nth_radix (size_t __radix_number, _Radix __radix, _Integer __n) {
112+ static_assert (is_unsigned<_Integer>::value, " " );
113+ using traits = __counting_sort_traits<_Integer, _Radix>;
114+
115+ return __radix (static_cast <_Integer>(__n >> traits::__radix_size * __radix_number));
119116}
120117
121118template <class _ForwardIterator , class _Map , class _RandomAccessIterator >
@@ -167,7 +164,7 @@ _LIBCPP_HIDE_FROM_ABI bool __collect_impl(
167164 __is_sorted &= (__current >= __previous);
168165 __previous = __current;
169166
170- (++__counters[_Radices][std::__nth_radix (_Radices, __radix)( __current)], ...);
167+ (++__counters[_Radices][std::__nth_radix (_Radices, __radix, __current)], ...);
171168 });
172169
173170 ((__maximums[_Radices] =
@@ -269,7 +266,7 @@ __radix_sort_impl(_RandomAccessIterator1 __first,
269266 std::copy (std::__move_assign_please (__first), std::__move_assign_please (__last), __buffer_begin);
270267 } else {
271268 auto __n0th = [__radix_number, &__map, &__radix](const auto & __v) {
272- return std::__nth_radix (__radix_number, __radix)( __map (__v));
269+ return std::__nth_radix (__radix_number, __radix, __map (__v));
273270 };
274271 std::__dispose_backward (
275272 std::__move_assign_please (__first),
@@ -283,7 +280,7 @@ __radix_sort_impl(_RandomAccessIterator1 __first,
283280 std::copy (std::__move_assign_please (__buffer_begin), std::__move_assign_please (__buffer_end), __first);
284281 } else {
285282 auto __n1th = [__radix_number, &__map, &__radix](const auto & __v) {
286- return std::__nth_radix (__radix_number + 1 , __radix)( __map (__v));
283+ return std::__nth_radix (__radix_number + 1 , __radix, __map (__v));
287284 };
288285 std::__dispose_backward (
289286 std::__move_assign_please (__buffer_begin),
0 commit comments