diff --git a/libcxx/include/__algorithm/copy.h b/libcxx/include/__algorithm/copy.h --- a/libcxx/include/__algorithm/copy.h +++ b/libcxx/include/__algorithm/copy.h @@ -69,7 +69,7 @@ template ::value && + __enable_if_t<__has_random_access_iterator_category<_InIter>::value && !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> diff --git a/libcxx/include/__algorithm/copy_backward.h b/libcxx/include/__algorithm/copy_backward.h --- a/libcxx/include/__algorithm/copy_backward.h +++ b/libcxx/include/__algorithm/copy_backward.h @@ -76,7 +76,7 @@ template ::value && + __enable_if_t<__has_random_access_iterator_category<_InIter>::value && !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> diff --git a/libcxx/include/__algorithm/copy_n.h b/libcxx/include/__algorithm/copy_n.h --- a/libcxx/include/__algorithm/copy_n.h +++ b/libcxx/include/__algorithm/copy_n.h @@ -25,8 +25,8 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if < - __is_cpp17_input_iterator<_InputIterator>::value && - !__is_cpp17_random_access_iterator<_InputIterator>::value, + __has_input_iterator_category<_InputIterator>::value && + !__has_random_access_iterator_category<_InputIterator>::value, _OutputIterator >::type copy_n(_InputIterator __first, _Size __orig_n, _OutputIterator __result) @@ -51,7 +51,7 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if < - __is_cpp17_random_access_iterator<_InputIterator>::value, + __has_random_access_iterator_category<_InputIterator>::value, _OutputIterator >::type copy_n(_InputIterator __first, _Size __orig_n, _OutputIterator __result) diff --git a/libcxx/include/__algorithm/lexicographical_compare_three_way.h b/libcxx/include/__algorithm/lexicographical_compare_three_way.h --- a/libcxx/include/__algorithm/lexicographical_compare_three_way.h +++ b/libcxx/include/__algorithm/lexicographical_compare_three_way.h @@ -98,8 +98,8 @@ static_assert(std::is_copy_constructible_v<_InputIterator1>, "Iterators must be copy constructible."); static_assert(std::is_copy_constructible_v<_InputIterator2>, "Iterators must be copy constructible."); __three_way_comp_ref_type<_Cmp> __wrapped_comp_ref(__comp); - if constexpr (__is_cpp17_random_access_iterator<_InputIterator1>::value && - __is_cpp17_random_access_iterator<_InputIterator2>::value) { + if constexpr (__has_random_access_iterator_category<_InputIterator1>::value && + __has_random_access_iterator_category<_InputIterator2>::value) { return std::__lexicographical_compare_three_way_fast_path( std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __wrapped_comp_ref); } else { diff --git a/libcxx/include/__algorithm/max_element.h b/libcxx/include/__algorithm/max_element.h --- a/libcxx/include/__algorithm/max_element.h +++ b/libcxx/include/__algorithm/max_element.h @@ -24,7 +24,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator __max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert(__is_cpp17_forward_iterator<_ForwardIterator>::value, + static_assert(__has_forward_iterator_category<_ForwardIterator>::value, "std::max_element requires a ForwardIterator"); if (__first != __last) { diff --git a/libcxx/include/__algorithm/min_element.h b/libcxx/include/__algorithm/min_element.h --- a/libcxx/include/__algorithm/min_element.h +++ b/libcxx/include/__algorithm/min_element.h @@ -49,7 +49,7 @@ _LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator min_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert(__is_cpp17_forward_iterator<_ForwardIterator>::value, + static_assert(__has_forward_iterator_category<_ForwardIterator>::value, "std::min_element requires a ForwardIterator"); static_assert(__is_callable<_Compare, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); diff --git a/libcxx/include/__algorithm/minmax_element.h b/libcxx/include/__algorithm/minmax_element.h --- a/libcxx/include/__algorithm/minmax_element.h +++ b/libcxx/include/__algorithm/minmax_element.h @@ -83,7 +83,7 @@ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_ForwardIterator, _ForwardIterator> minmax_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert(__is_cpp17_forward_iterator<_ForwardIterator>::value, + static_assert(__has_forward_iterator_category<_ForwardIterator>::value, "std::minmax_element requires a ForwardIterator"); static_assert(__is_callable<_Compare, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); diff --git a/libcxx/include/__algorithm/move.h b/libcxx/include/__algorithm/move.h --- a/libcxx/include/__algorithm/move.h +++ b/libcxx/include/__algorithm/move.h @@ -70,7 +70,7 @@ template ::value && + __enable_if_t<__has_random_access_iterator_category<_InIter>::value && !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> diff --git a/libcxx/include/__algorithm/move_backward.h b/libcxx/include/__algorithm/move_backward.h --- a/libcxx/include/__algorithm/move_backward.h +++ b/libcxx/include/__algorithm/move_backward.h @@ -76,7 +76,7 @@ template ::value && + __enable_if_t<__has_random_access_iterator_category<_InIter>::value && !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/any_of.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/any_of.h --- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/any_of.h +++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/any_of.h @@ -67,7 +67,7 @@ _LIBCPP_HIDE_FROM_ABI bool __pstl_any_of(__cpu_backend_tag, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { return std::__terminate_on_exception([&] { return std::__parallel_or( __first, __last, [&__pred](_ForwardIterator __brick_first, _ForwardIterator __brick_last) { @@ -76,7 +76,7 @@ }); }); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { return std::__simd_or(__first, __last - __first, __pred); } else { return std::any_of(__first, __last, __pred); diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/fill.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/fill.h --- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/fill.h +++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/fill.h @@ -37,7 +37,7 @@ _LIBCPP_HIDE_FROM_ABI void __pstl_fill(__cpu_backend_tag, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { std::__terminate_on_exception([&] { __par_backend::__parallel_for( __first, __last, [&__value](_ForwardIterator __brick_first, _ForwardIterator __brick_last) { @@ -46,7 +46,7 @@ }); }); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { std::__simd_fill_n(__first, __last - __first, __value); } else { std::fill(__first, __last, __value); diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/find_if.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/find_if.h --- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/find_if.h +++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/find_if.h @@ -95,7 +95,7 @@ _LIBCPP_HIDE_FROM_ABI _ForwardIterator __pstl_find_if(__cpu_backend_tag, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { return std::__terminate_on_exception([&] { return std::__parallel_find( __first, @@ -108,7 +108,7 @@ true); }); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { using __diff_t = __iter_diff_t<_ForwardIterator>; return std::__simd_first(__first, __diff_t(0), __last - __first, [&__pred](_ForwardIterator __iter, __diff_t __i) { return __pred(__iter[__i]); diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/for_each.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/for_each.h --- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/for_each.h +++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/for_each.h @@ -37,7 +37,7 @@ _LIBCPP_HIDE_FROM_ABI void __pstl_for_each(__cpu_backend_tag, _ForwardIterator __first, _ForwardIterator __last, _Functor __func) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { std::__terminate_on_exception([&] { std::__par_backend::__parallel_for( __first, __last, [__func](_ForwardIterator __brick_first, _ForwardIterator __brick_last) { @@ -46,7 +46,7 @@ }); }); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value) { std::__simd_walk_1(__first, __last - __first, __func); } else { std::for_each(__first, __last, __func); diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform.h --- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform.h +++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform.h @@ -43,8 +43,8 @@ _ForwardOutIterator __result, _UnaryOperation __op) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value && - __is_cpp17_random_access_iterator<_ForwardOutIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value && + __has_random_access_iterator_category<_ForwardOutIterator>::value) { std::__terminate_on_exception([&] { std::__par_backend::__parallel_for( __first, __last, [__op, __first, __result](_ForwardIterator __brick_first, _ForwardIterator __brick_last) { @@ -54,8 +54,8 @@ }); return __result + (__last - __first); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator>::value && - __is_cpp17_random_access_iterator<_ForwardOutIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator>::value && + __has_random_access_iterator_category<_ForwardOutIterator>::value) { return std::__simd_walk_2( __first, __last - __first, @@ -90,9 +90,9 @@ _ForwardOutIterator __result, _BinaryOperation __op) { if constexpr (__is_parallel_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator1>::value && - __is_cpp17_random_access_iterator<_ForwardIterator2>::value && - __is_cpp17_random_access_iterator<_ForwardOutIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator1>::value && + __has_random_access_iterator_category<_ForwardIterator2>::value && + __has_random_access_iterator_category<_ForwardOutIterator>::value) { std::__terminate_on_exception([&] { std::__par_backend::__parallel_for( __first1, @@ -109,9 +109,9 @@ }); return __result + (__last1 - __first1); } else if constexpr (__is_unsequenced_execution_policy_v<_ExecutionPolicy> && - __is_cpp17_random_access_iterator<_ForwardIterator1>::value && - __is_cpp17_random_access_iterator<_ForwardIterator2>::value && - __is_cpp17_random_access_iterator<_ForwardOutIterator>::value) { + __has_random_access_iterator_category<_ForwardIterator1>::value && + __has_random_access_iterator_category<_ForwardIterator2>::value && + __has_random_access_iterator_category<_ForwardOutIterator>::value) { return std::__simd_walk_3( __first1, __last1 - __first1, diff --git a/libcxx/include/__algorithm/pstl_copy.h b/libcxx/include/__algorithm/pstl_copy.h --- a/libcxx/include/__algorithm/pstl_copy.h +++ b/libcxx/include/__algorithm/pstl_copy.h @@ -44,7 +44,7 @@ enable_if_t>, int> = 0> _LIBCPP_HIDE_FROM_ABI _ForwardOutIterator copy_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _ForwardOutIterator __result) { - if constexpr (__is_cpp17_random_access_iterator<_ForwardIterator>::value) + if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) return std::copy(__policy, __first, __first + __n, __result); else return std::copy_n(__first, __n, __result); diff --git a/libcxx/include/__algorithm/pstl_fill.h b/libcxx/include/__algorithm/pstl_fill.h --- a/libcxx/include/__algorithm/pstl_fill.h +++ b/libcxx/include/__algorithm/pstl_fill.h @@ -62,7 +62,7 @@ std::__pstl_frontend_dispatch( _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_fill_n), [&](_ForwardIterator __g_first, _SizeT __g_n, const _Tp& __g_value) { - if constexpr (__is_cpp17_random_access_iterator<_ForwardIterator>::value) + if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) std::fill(__policy, __g_first, __g_first + __g_n, __g_value); else std::fill_n(__g_first, __g_n, __g_value); diff --git a/libcxx/include/__algorithm/pstl_for_each.h b/libcxx/include/__algorithm/pstl_for_each.h --- a/libcxx/include/__algorithm/pstl_for_each.h +++ b/libcxx/include/__algorithm/pstl_for_each.h @@ -53,7 +53,7 @@ return std::__pstl_frontend_dispatch( _LIBCPP_PSTL_CUSTOMIZATION_POINT(__pstl_for_each_n), [&](_ForwardIterator __g_first, _Size __g_size, _Function __g_func) { - if constexpr (__is_cpp17_random_access_iterator<_ForwardIterator>::value) { + if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) { std::for_each(__policy, std::move(__g_first), __g_first + __g_size, std::move(__g_func)); } else { std::for_each_n(std::move(__g_first), __g_size, std::move(__g_func)); diff --git a/libcxx/include/__algorithm/sample.h b/libcxx/include/__algorithm/sample.h --- a/libcxx/include/__algorithm/sample.h +++ b/libcxx/include/__algorithm/sample.h @@ -95,8 +95,8 @@ _SampleIterator sample(_PopulationIterator __first, _PopulationIterator __last, _SampleIterator __output_iter, _Distance __n, _UniformRandomNumberGenerator&& __g) { - static_assert(__is_cpp17_forward_iterator<_PopulationIterator>::value || - __is_cpp17_random_access_iterator<_SampleIterator>::value, + static_assert(__has_forward_iterator_category<_PopulationIterator>::value || + __has_random_access_iterator_category<_SampleIterator>::value, "SampleIterator must meet the requirements of RandomAccessIterator"); return std::__sample<_ClassicAlgPolicy>( diff --git a/libcxx/include/__algorithm/search.h b/libcxx/include/__algorithm/search.h --- a/libcxx/include/__algorithm/search.h +++ b/libcxx/include/__algorithm/search.h @@ -127,8 +127,8 @@ _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2, - __enable_if_t<__is_cpp17_random_access_iterator<_Iter1>::value - && __is_cpp17_random_access_iterator<_Iter2>::value>* = nullptr) { + __enable_if_t<__has_random_access_iterator_category<_Iter1>::value + && __has_random_access_iterator_category<_Iter2>::value>* = nullptr) { auto __size2 = __last2 - __first2; if (__size2 == 0) @@ -159,10 +159,10 @@ _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2, - __enable_if_t<__is_cpp17_forward_iterator<_Iter1>::value - && __is_cpp17_forward_iterator<_Iter2>::value - && !(__is_cpp17_random_access_iterator<_Iter1>::value - && __is_cpp17_random_access_iterator<_Iter2>::value)>* = nullptr) { + __enable_if_t<__has_forward_iterator_category<_Iter1>::value + && __has_forward_iterator_category<_Iter2>::value + && !(__has_random_access_iterator_category<_Iter1>::value + && __has_random_access_iterator_category<_Iter2>::value)>* = nullptr) { return std::__search_forward_impl<_ClassicAlgPolicy>(__first1, __last1, __first2, __last2, __pred, diff --git a/libcxx/include/__algorithm/search_n.h b/libcxx/include/__algorithm/search_n.h --- a/libcxx/include/__algorithm/search_n.h +++ b/libcxx/include/__algorithm/search_n.h @@ -130,7 +130,7 @@ const _Type& __value, _Pred& __pred, _Proj& __proj, - __enable_if_t<__is_cpp17_random_access_iterator<_Iter>::value>* = nullptr) { + __enable_if_t<__has_random_access_iterator_category<_Iter>::value>* = nullptr) { return std::__search_n_random_access_impl<_ClassicAlgPolicy>(__first, __last, __count, __value, @@ -150,8 +150,8 @@ const _Type& __value, _Pred& __pred, _Proj& __proj, - __enable_if_t<__is_cpp17_forward_iterator<_Iter1>::value - && !__is_cpp17_random_access_iterator<_Iter1>::value>* = nullptr) { + __enable_if_t<__has_forward_iterator_category<_Iter1>::value + && !__has_random_access_iterator_category<_Iter1>::value>* = nullptr) { return std::__search_n_forward_impl<_ClassicAlgPolicy>(__first, __last, __count, __value, diff --git a/libcxx/include/__algorithm/shift_left.h b/libcxx/include/__algorithm/shift_left.h --- a/libcxx/include/__algorithm/shift_left.h +++ b/libcxx/include/__algorithm/shift_left.h @@ -32,7 +32,7 @@ } _ForwardIterator __m = __first; - if constexpr (__is_cpp17_random_access_iterator<_ForwardIterator>::value) { + if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) { if (__n >= __last - __first) { return __first; } diff --git a/libcxx/include/__algorithm/shift_right.h b/libcxx/include/__algorithm/shift_right.h --- a/libcxx/include/__algorithm/shift_right.h +++ b/libcxx/include/__algorithm/shift_right.h @@ -34,14 +34,14 @@ return __first; } - if constexpr (__is_cpp17_random_access_iterator<_ForwardIterator>::value) { + if constexpr (__has_random_access_iterator_category<_ForwardIterator>::value) { decltype(__n) __d = __last - __first; if (__n >= __d) { return __last; } _ForwardIterator __m = __first + (__d - __n); return _VSTD::move_backward(__first, __m, __last); - } else if constexpr (__is_cpp17_bidirectional_iterator<_ForwardIterator>::value) { + } else if constexpr (__has_bidirectional_iterator_category<_ForwardIterator>::value) { _ForwardIterator __m = __last; for (; __n > 0; --__n) { if (__m == __first) { diff --git a/libcxx/include/__filesystem/path.h b/libcxx/include/__filesystem/path.h --- a/libcxx/include/__filesystem/path.h +++ b/libcxx/include/__filesystem/path.h @@ -173,7 +173,7 @@ static _ECharT __first_or_null(const _ECharT* __b) { return *__b; } }; -template ::value, +template ::value, class = void> struct __is_pathable_iter : false_type {}; @@ -308,7 +308,7 @@ template _LIBCPP_HIDE_FROM_ABI - static typename enable_if<__is_exactly_cpp17_input_iterator<_Iter>::value>::type + static typename enable_if<__has_exactly_input_iterator_category<_Iter>::value>::type __append_range(__path_string& __dest, _Iter __b, _Iter __e) { for (; __b != __e; ++__b) __dest.push_back(*__b); @@ -316,7 +316,7 @@ template _LIBCPP_HIDE_FROM_ABI - static typename enable_if<__is_cpp17_forward_iterator<_Iter>::value>::type + static typename enable_if<__has_forward_iterator_category<_Iter>::value>::type __append_range(__path_string& __dest, _Iter __b, _Iter __e) { __dest.append(__b, __e); } @@ -353,7 +353,7 @@ template _LIBCPP_HIDE_FROM_ABI - static typename enable_if<__is_exactly_cpp17_input_iterator<_Iter>::value>::type + static typename enable_if<__has_exactly_input_iterator_category<_Iter>::value>::type __append_range(__path_string& __dest, _Iter __b, _Iter __e) { basic_string __tmp(__b, __e); __append_string(__dest, __tmp); @@ -361,7 +361,7 @@ template _LIBCPP_HIDE_FROM_ABI - static typename enable_if<__is_cpp17_forward_iterator<_Iter>::value>::type + static typename enable_if<__has_forward_iterator_category<_Iter>::value>::type __append_range(__path_string& __dest, _Iter __b, _Iter __e) { basic_string __tmp(__b, __e); __append_string(__dest, __tmp); diff --git a/libcxx/include/__iterator/advance.h b/libcxx/include/__iterator/advance.h --- a/libcxx/include/__iterator/advance.h +++ b/libcxx/include/__iterator/advance.h @@ -63,7 +63,7 @@ void advance(_InputIter& __i, _Distance __orig_n) { typedef typename iterator_traits<_InputIter>::difference_type _Difference; _Difference __n = static_cast<_Difference>(_VSTD::__convert_to_integral(__orig_n)); - _LIBCPP_ASSERT(__n >= 0 || __is_cpp17_bidirectional_iterator<_InputIter>::value, + _LIBCPP_ASSERT(__n >= 0 || __has_bidirectional_iterator_category<_InputIter>::value, "Attempt to advance(it, n) with negative n on a non-bidirectional iterator"); _VSTD::__advance(__i, __n, typename iterator_traits<_InputIter>::iterator_category()); } diff --git a/libcxx/include/__iterator/iterator_traits.h b/libcxx/include/__iterator/iterator_traits.h --- a/libcxx/include/__iterator/iterator_traits.h +++ b/libcxx/include/__iterator/iterator_traits.h @@ -453,16 +453,16 @@ struct __has_iterator_concept_convertible_to<_Tp, _Up, false> : false_type {}; template -struct __is_cpp17_input_iterator : public __has_iterator_category_convertible_to<_Tp, input_iterator_tag> {}; +using __has_input_iterator_category = __has_iterator_category_convertible_to<_Tp, input_iterator_tag>; template -struct __is_cpp17_forward_iterator : public __has_iterator_category_convertible_to<_Tp, forward_iterator_tag> {}; +using __has_forward_iterator_category = __has_iterator_category_convertible_to<_Tp, forward_iterator_tag>; template -struct __is_cpp17_bidirectional_iterator : public __has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag> {}; +using __has_bidirectional_iterator_category = __has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>; template -struct __is_cpp17_random_access_iterator : public __has_iterator_category_convertible_to<_Tp, random_access_iterator_tag> {}; +using __has_random_access_iterator_category = __has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>; // __is_cpp17_contiguous_iterator determines if an iterator is known by // libc++ to be contiguous, either because it advertises itself as such @@ -491,22 +491,22 @@ class __wrap_iter; template -struct __is_exactly_cpp17_input_iterator - : public integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, forward_iterator_tag>::value> {}; + !__has_iterator_category_convertible_to<_Tp, forward_iterator_tag>::value>; template -struct __is_exactly_cpp17_forward_iterator - : public integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>::value> {}; + !__has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>::value>; template -struct __is_exactly_cpp17_bidirectional_iterator - : public integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>::value> {}; + !__has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>::value>; template using __iter_value_type = typename iterator_traits<_InputIterator>::value_type; diff --git a/libcxx/include/__iterator/move_iterator.h b/libcxx/include/__iterator/move_iterator.h --- a/libcxx/include/__iterator/move_iterator.h +++ b/libcxx/include/__iterator/move_iterator.h @@ -94,7 +94,7 @@ #else typedef _Iter iterator_type; typedef _If< - __is_cpp17_random_access_iterator<_Iter>::value, + __has_random_access_iterator_category<_Iter>::value, random_access_iterator_tag, typename iterator_traits<_Iter>::iterator_category > iterator_category; diff --git a/libcxx/include/__iterator/next.h b/libcxx/include/__iterator/next.h --- a/libcxx/include/__iterator/next.h +++ b/libcxx/include/__iterator/next.h @@ -26,9 +26,9 @@ template inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value, _InputIter>::type + typename enable_if<__has_input_iterator_category<_InputIter>::value, _InputIter>::type next(_InputIter __x, typename iterator_traits<_InputIter>::difference_type __n = 1) { - _LIBCPP_ASSERT(__n >= 0 || __is_cpp17_bidirectional_iterator<_InputIter>::value, + _LIBCPP_ASSERT(__n >= 0 || __has_bidirectional_iterator_category<_InputIter>::value, "Attempt to next(it, n) with negative n on a non-bidirectional iterator"); _VSTD::advance(__x, __n); diff --git a/libcxx/include/__iterator/prev.h b/libcxx/include/__iterator/prev.h --- a/libcxx/include/__iterator/prev.h +++ b/libcxx/include/__iterator/prev.h @@ -26,9 +26,9 @@ template inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value, _InputIter>::type + typename enable_if<__has_input_iterator_category<_InputIter>::value, _InputIter>::type prev(_InputIter __x, typename iterator_traits<_InputIter>::difference_type __n = 1) { - _LIBCPP_ASSERT(__n <= 0 || __is_cpp17_bidirectional_iterator<_InputIter>::value, + _LIBCPP_ASSERT(__n <= 0 || __has_bidirectional_iterator_category<_InputIter>::value, "Attempt to prev(it, n) with a positive n on a non-bidirectional iterator"); _VSTD::advance(__x, -__n); return __x; diff --git a/libcxx/include/__iterator/reverse_iterator.h b/libcxx/include/__iterator/reverse_iterator.h --- a/libcxx/include/__iterator/reverse_iterator.h +++ b/libcxx/include/__iterator/reverse_iterator.h @@ -64,7 +64,7 @@ #endif #if _LIBCPP_STD_VER >= 20 - static_assert(__is_cpp17_bidirectional_iterator<_Iter>::value || bidirectional_iterator<_Iter>, + static_assert(__has_bidirectional_iterator_category<_Iter>::value || bidirectional_iterator<_Iter>, "reverse_iterator requires It to be a bidirectional iterator."); #endif // _LIBCPP_STD_VER >= 20 @@ -73,7 +73,7 @@ public: using iterator_type = _Iter; - using iterator_category = _If<__is_cpp17_random_access_iterator<_Iter>::value, + using iterator_category = _If<__has_random_access_iterator_category<_Iter>::value, random_access_iterator_tag, typename iterator_traits<_Iter>::iterator_category>; using pointer = typename iterator_traits<_Iter>::pointer; @@ -365,11 +365,11 @@ _Iter __iter_; public: - static_assert(__is_cpp17_bidirectional_iterator<_Iter>::value || bidirectional_iterator<_Iter>); + static_assert(__has_bidirectional_iterator_category<_Iter>::value || bidirectional_iterator<_Iter>); using iterator_type = _Iter; using iterator_category = - _If<__is_cpp17_random_access_iterator<_Iter>::value, random_access_iterator_tag, __iterator_category_type<_Iter>>; + _If<__has_random_access_iterator_category<_Iter>::value, random_access_iterator_tag, __iterator_category_type<_Iter>>; using pointer = __iterator_pointer_type<_Iter>; using value_type = iter_value_t<_Iter>; using difference_type = iter_difference_t<_Iter>; diff --git a/libcxx/include/__memory/uninitialized_algorithms.h b/libcxx/include/__memory/uninitialized_algorithms.h --- a/libcxx/include/__memory/uninitialized_algorithms.h +++ b/libcxx/include/__memory/uninitialized_algorithms.h @@ -371,7 +371,7 @@ // This function assumes that destructors do not throw, and that the allocator is bound to // the correct type. template::value + __has_bidirectional_iterator_category<_BidirIter>::value >> _LIBCPP_HIDE_FROM_ABI constexpr void __allocator_destroy_multidimensional(_Alloc& __alloc, _BidirIter __first, _BidirIter __last) noexcept { diff --git a/libcxx/include/__ranges/join_view.h b/libcxx/include/__ranges/join_view.h --- a/libcxx/include/__ranges/join_view.h +++ b/libcxx/include/__ranges/join_view.h @@ -395,8 +395,8 @@ template requires(_JoinViewIterator::__is_join_view_iterator && ranges::common_range && - __is_cpp17_random_access_iterator::value && - __is_cpp17_random_access_iterator::value) + __has_random_access_iterator_category::value && + __has_random_access_iterator_category::value) struct __segmented_iterator_traits<_JoinViewIterator> { using __segment_iterator = diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer --- a/libcxx/include/__split_buffer +++ b/libcxx/include/__split_buffer @@ -162,12 +162,12 @@ template _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI - __enable_if_t<__is_exactly_cpp17_input_iterator<_InputIter>::value> + __enable_if_t<__has_exactly_input_iterator_category<_InputIter>::value> __construct_at_end(_InputIter __first, _InputIter __last); template _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI - __enable_if_t<__is_cpp17_forward_iterator<_ForwardIterator>::value> + __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value> __construct_at_end(_ForwardIterator __first, _ForwardIterator __last); template @@ -284,7 +284,7 @@ template template -_LIBCPP_CONSTEXPR_SINCE_CXX20 __enable_if_t<__is_exactly_cpp17_input_iterator<_InputIter>::value> +_LIBCPP_CONSTEXPR_SINCE_CXX20 __enable_if_t<__has_exactly_input_iterator_category<_InputIter>::value> __split_buffer<_Tp, _Allocator>::__construct_at_end(_InputIter __first, _InputIter __last) { __construct_at_end_with_sentinel(__first, __last); @@ -313,7 +313,7 @@ } template template -_LIBCPP_CONSTEXPR_SINCE_CXX20 __enable_if_t<__is_cpp17_forward_iterator<_ForwardIterator>::value> +_LIBCPP_CONSTEXPR_SINCE_CXX20 __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value> __split_buffer<_Tp, _Allocator>::__construct_at_end(_ForwardIterator __first, _ForwardIterator __last) { __construct_at_end_with_size(__first, std::distance(__first, __last)); diff --git a/libcxx/include/__tree b/libcxx/include/__tree --- a/libcxx/include/__tree +++ b/libcxx/include/__tree @@ -1639,7 +1639,7 @@ typedef typename _ITraits::value_type _ItValueType; static_assert((is_same<_ItValueType, __container_value_type>::value), "__assign_unique may only be called with the containers value type"); - static_assert(__is_cpp17_forward_iterator<_ForwardIterator>::value, + static_assert(__has_forward_iterator_category<_ForwardIterator>::value, "__assign_unique requires a forward iterator"); if (size() != 0) { diff --git a/libcxx/include/deque b/libcxx/include/deque --- a/libcxx/include/deque +++ b/libcxx/include/deque @@ -608,10 +608,10 @@ template _LIBCPP_HIDE_FROM_ABI deque(_InputIter __f, _InputIter __l, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value>::type* = 0); + typename enable_if<__has_input_iterator_category<_InputIter>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI deque(_InputIter __f, _InputIter __l, const allocator_type& __a, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value>::type* = 0); + typename enable_if<__has_input_iterator_category<_InputIter>::value>::type* = 0); #if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> @@ -656,11 +656,11 @@ template _LIBCPP_HIDE_FROM_ABI void assign(_InputIter __f, _InputIter __l, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value && - !__is_cpp17_random_access_iterator<_InputIter>::value>::type* = 0); + typename enable_if<__has_input_iterator_category<_InputIter>::value && + !__has_random_access_iterator_category<_InputIter>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI void assign(_RAIter __f, _RAIter __l, - typename enable_if<__is_cpp17_random_access_iterator<_RAIter>::value>::type* = 0); + typename enable_if<__has_random_access_iterator_category<_RAIter>::value>::type* = 0); #if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> @@ -814,13 +814,13 @@ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, size_type __n, const value_type& __v); template _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, _InputIter __f, _InputIter __l, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIter>::value>::type* = 0); + typename enable_if<__has_exactly_input_iterator_category<_InputIter>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, _ForwardIterator __f, _ForwardIterator __l, - typename enable_if<__is_exactly_cpp17_forward_iterator<_ForwardIterator>::value>::type* = 0); + typename enable_if<__has_exactly_forward_iterator_category<_ForwardIterator>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, _BiIter __f, _BiIter __l, - typename enable_if<__is_cpp17_bidirectional_iterator<_BiIter>::value>::type* = 0); + typename enable_if<__has_bidirectional_iterator_category<_BiIter>::value>::type* = 0); #if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange<_Tp> _Range> @@ -1000,10 +1000,10 @@ template _LIBCPP_HIDE_FROM_ABI void __append(_InpIter __f, _InpIter __l, - typename enable_if<__is_exactly_cpp17_input_iterator<_InpIter>::value>::type* = 0); + typename enable_if<__has_exactly_input_iterator_category<_InpIter>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI void __append(_ForIter __f, _ForIter __l, - typename enable_if<__is_cpp17_forward_iterator<_ForIter>::value>::type* = 0); + typename enable_if<__has_forward_iterator_category<_ForIter>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI void __append_with_size(_InputIterator __from, size_type __n); @@ -1059,7 +1059,7 @@ #if _LIBCPP_STD_VER >= 17 template>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > deque(_InputIterator, _InputIterator) @@ -1067,7 +1067,7 @@ template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > deque(_InputIterator, _InputIterator, _Alloc) @@ -1112,7 +1112,7 @@ template template deque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value>::type*) + typename enable_if<__has_input_iterator_category<_InputIter>::value>::type*) : __start_(0), __size_(0, __default_init_tag()) { __append(__f, __l); @@ -1121,7 +1121,7 @@ template template deque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l, const allocator_type& __a, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value>::type*) + typename enable_if<__has_input_iterator_category<_InputIter>::value>::type*) : __map_(__pointer_allocator(__a)), __start_(0), __size_(0, __a) { __append(__f, __l); @@ -1244,8 +1244,8 @@ template void deque<_Tp, _Allocator>::assign(_InputIter __f, _InputIter __l, - typename enable_if<__is_cpp17_input_iterator<_InputIter>::value && - !__is_cpp17_random_access_iterator<_InputIter>::value>::type*) + typename enable_if<__has_input_iterator_category<_InputIter>::value && + !__has_random_access_iterator_category<_InputIter>::value>::type*) { __assign_with_sentinel(__f, __l); } @@ -1268,7 +1268,7 @@ template void deque<_Tp, _Allocator>::assign(_RAIter __f, _RAIter __l, - typename enable_if<__is_cpp17_random_access_iterator<_RAIter>::value>::type*) + typename enable_if<__has_random_access_iterator_category<_RAIter>::value>::type*) { __assign_with_size_random_access(__f, __l - __f); } @@ -1779,7 +1779,7 @@ template typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::insert(const_iterator __p, _InputIter __f, _InputIter __l, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIter>::value>::type*) + typename enable_if<__has_exactly_input_iterator_category<_InputIter>::value>::type*) { return __insert_with_sentinel(__p, __f, __l); } @@ -1799,7 +1799,7 @@ template typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::insert(const_iterator __p, _ForwardIterator __f, _ForwardIterator __l, - typename enable_if<__is_exactly_cpp17_forward_iterator<_ForwardIterator>::value>::type*) + typename enable_if<__has_exactly_forward_iterator_category<_ForwardIterator>::value>::type*) { return __insert_with_size(__p, __f, std::distance(__f, __l)); } @@ -1819,7 +1819,7 @@ template typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::insert(const_iterator __p, _BiIter __f, _BiIter __l, - typename enable_if<__is_cpp17_bidirectional_iterator<_BiIter>::value>::type*) + typename enable_if<__has_bidirectional_iterator_category<_BiIter>::value>::type*) { return __insert_bidirectional(__p, __f, __l, std::distance(__f, __l)); } @@ -1903,7 +1903,7 @@ template void deque<_Tp, _Allocator>::__append(_InpIter __f, _InpIter __l, - typename enable_if<__is_exactly_cpp17_input_iterator<_InpIter>::value>::type*) + typename enable_if<__has_exactly_input_iterator_category<_InpIter>::value>::type*) { __append_with_sentinel(__f, __l); } @@ -1924,7 +1924,7 @@ template void deque<_Tp, _Allocator>::__append(_ForIter __f, _ForIter __l, - typename enable_if<__is_cpp17_forward_iterator<_ForIter>::value>::type*) + typename enable_if<__has_forward_iterator_category<_ForIter>::value>::type*) { __append_with_size(__f, std::distance(__f, __l)); } diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -709,11 +709,11 @@ template _LIBCPP_HIDE_FROM_ABI forward_list(_InputIterator __f, _InputIterator __l, - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>* = nullptr); + __enable_if_t<__has_input_iterator_category<_InputIterator>::value>* = nullptr); template _LIBCPP_HIDE_FROM_ABI forward_list(_InputIterator __f, _InputIterator __l, const allocator_type& __a, - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>* = nullptr); + __enable_if_t<__has_input_iterator_category<_InputIterator>::value>* = nullptr); _LIBCPP_HIDE_FROM_ABI forward_list(const forward_list& __x); _LIBCPP_HIDE_FROM_ABI forward_list(const forward_list& __x, const __type_identity_t& __a); @@ -745,7 +745,7 @@ // ~forward_list() = default; template - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void> + __enable_if_t<__has_input_iterator_category<_InputIterator>::value, void> _LIBCPP_HIDE_FROM_ABI assign(_InputIterator __f, _InputIterator __l); _LIBCPP_HIDE_FROM_ABI void assign(size_type __n, const value_type& __v); @@ -824,7 +824,7 @@ _LIBCPP_HIDE_FROM_ABI iterator insert_after(const_iterator __p, size_type __n, const value_type& __v); template _LIBCPP_INLINE_VISIBILITY - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, iterator> + __enable_if_t<__has_input_iterator_category<_InputIterator>::value, iterator> insert_after(const_iterator __p, _InputIterator __f, _InputIterator __l); _LIBCPP_HIDE_FROM_ABI iterator erase_after(const_iterator __p); @@ -904,7 +904,7 @@ #if _LIBCPP_STD_VER >= 17 template>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > forward_list(_InputIterator, _InputIterator) @@ -912,7 +912,7 @@ template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > forward_list(_InputIterator, _InputIterator, _Alloc) @@ -977,7 +977,7 @@ template template forward_list<_Tp, _Alloc>::forward_list(_InputIterator __f, _InputIterator __l, - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>*) + __enable_if_t<__has_input_iterator_category<_InputIterator>::value>*) { insert_after(cbefore_begin(), __f, __l); } @@ -986,7 +986,7 @@ template forward_list<_Tp, _Alloc>::forward_list(_InputIterator __f, _InputIterator __l, const allocator_type& __a, - __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>*) + __enable_if_t<__has_input_iterator_category<_InputIterator>::value>*) : base(__a) { insert_after(cbefore_begin(), __f, __l); @@ -1096,7 +1096,7 @@ template template -__enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void> +__enable_if_t<__has_input_iterator_category<_InputIterator>::value, void> forward_list<_Tp, _Alloc>::assign(_InputIterator __f, _InputIterator __l) { iterator __i = before_begin(); @@ -1288,7 +1288,7 @@ template template -__enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, typename forward_list<_Tp, _Alloc>::iterator> +__enable_if_t<__has_input_iterator_category<_InputIterator>::value, typename forward_list<_Tp, _Alloc>::iterator> forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, _InputIterator __f, _InputIterator __l) { diff --git a/libcxx/include/list b/libcxx/include/list --- a/libcxx/include/list +++ b/libcxx/include/list @@ -881,10 +881,10 @@ template _LIBCPP_HIDE_FROM_ABI list(_InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>* = 0); + __enable_if_t<__has_input_iterator_category<_InpIter>::value>* = 0); template _LIBCPP_HIDE_FROM_ABI list(_InpIter __f, _InpIter __l, const allocator_type& __a, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>* = 0); + __enable_if_t<__has_input_iterator_category<_InpIter>::value>* = 0); _LIBCPP_HIDE_FROM_ABI list(const list& __c); _LIBCPP_HIDE_FROM_ABI list(const list& __c, const __type_identity_t& __a); @@ -916,7 +916,7 @@ template _LIBCPP_HIDE_FROM_ABI void assign(_InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>* = 0); + __enable_if_t<__has_input_iterator_category<_InpIter>::value>* = 0); _LIBCPP_HIDE_FROM_ABI void assign(size_type __n, const value_type& __x); _LIBCPP_INLINE_VISIBILITY @@ -1033,7 +1033,7 @@ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, size_type __n, const value_type& __x); template _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, _InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>* = 0); + __enable_if_t<__has_input_iterator_category<_InpIter>::value>* = 0); _LIBCPP_INLINE_VISIBILITY void swap(list& __c) @@ -1139,7 +1139,7 @@ #if _LIBCPP_STD_VER >= 17 template>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > list(_InputIterator, _InputIterator) @@ -1147,7 +1147,7 @@ template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > list(_InputIterator, _InputIterator, _Alloc) @@ -1233,7 +1233,7 @@ template template list<_Tp, _Alloc>::list(_InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>*) + __enable_if_t<__has_input_iterator_category<_InpIter>::value>*) { _VSTD::__debug_db_insert_c(this); for (; __f != __l; ++__f) @@ -1243,7 +1243,7 @@ template template list<_Tp, _Alloc>::list(_InpIter __f, _InpIter __l, const allocator_type& __a, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>*) + __enable_if_t<__has_input_iterator_category<_InpIter>::value>*) : base(__a) { _VSTD::__debug_db_insert_c(this); @@ -1368,7 +1368,7 @@ template void list<_Tp, _Alloc>::assign(_InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>*) + __enable_if_t<__has_input_iterator_category<_InpIter>::value>*) { iterator __i = begin(); iterator __e = end(); @@ -1473,7 +1473,7 @@ template typename list<_Tp, _Alloc>::iterator list<_Tp, _Alloc>::insert(const_iterator __p, _InpIter __f, _InpIter __l, - __enable_if_t<__is_cpp17_input_iterator<_InpIter>::value>*) + __enable_if_t<__has_input_iterator_category<_InpIter>::value>*) { _LIBCPP_DEBUG_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this, "list::insert(iterator, range) called with an iterator not referring to this list"); diff --git a/libcxx/include/map b/libcxx/include/map --- a/libcxx/include/map +++ b/libcxx/include/map @@ -1563,7 +1563,7 @@ #if _LIBCPP_STD_VER >= 17 template>, class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) @@ -1577,7 +1577,7 @@ -> map, _Tp, _Compare, _Allocator>; template::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> map(_InputIterator, _InputIterator, _Allocator) -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, @@ -2252,7 +2252,7 @@ #if _LIBCPP_STD_VER >= 17 template>, class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) @@ -2266,7 +2266,7 @@ -> multimap, _Tp, _Compare, _Allocator>; template::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> multimap(_InputIterator, _InputIterator, _Allocator) -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, diff --git a/libcxx/include/queue b/libcxx/include/queue --- a/libcxx/include/queue +++ b/libcxx/include/queue @@ -279,13 +279,13 @@ #if _LIBCPP_STD_VER >= 23 template ::value>> + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>> _LIBCPP_HIDE_FROM_ABI queue(_InputIterator __first, _InputIterator __last) : c(__first, __last) {} template ::value>, + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = __enable_if_t::value>> _LIBCPP_HIDE_FROM_ABI queue(_InputIterator __first, _InputIterator __second, const _Alloc& __alloc) : c(__first, __second, __alloc) {} @@ -414,13 +414,13 @@ #if _LIBCPP_STD_VER >= 23 template ::value>> + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>> queue(_InputIterator, _InputIterator) -> queue<__iter_value_type<_InputIterator>>; template ::value>, + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = __enable_if_t<__is_allocator<_Alloc>::value>> queue(_InputIterator, _InputIterator, _Alloc) -> queue<__iter_value_type<_InputIterator>, deque<__iter_value_type<_InputIterator>, _Alloc>>; @@ -543,16 +543,16 @@ _LIBCPP_INLINE_VISIBILITY priority_queue(const value_compare& __comp, container_type&& __c); #endif - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp = value_compare()); - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c); #ifndef _LIBCPP_CXX03_LANG - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c); @@ -586,25 +586,25 @@ __enable_if_t::value>* = 0); #endif // _LIBCPP_CXX03_LANG - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const _Alloc& __a, __enable_if_t::value>* = 0); - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, const _Alloc& __a, __enable_if_t::value>* = 0); - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c, const _Alloc& __a, __enable_if_t::value>* = 0); #ifndef _LIBCPP_CXX03_LANG - template ::value> > + template ::value> > _LIBCPP_INLINE_VISIBILITY priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c, const _Alloc& __a, @@ -650,7 +650,7 @@ template>, class _Container = vector<__iter_value_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value> > @@ -668,7 +668,7 @@ -> priority_queue; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value> > priority_queue(_InputIterator, _InputIterator, _Allocator) @@ -677,7 +677,7 @@ less<__iter_value_type<_InputIterator>>>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t<__is_allocator<_Allocator>::value> > @@ -686,7 +686,7 @@ vector<__iter_value_type<_InputIterator>, _Allocator>, _Compare>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t::value> diff --git a/libcxx/include/regex b/libcxx/include/regex --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -2774,7 +2774,7 @@ template _LIBCPP_INLINE_VISIBILITY - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIterator>::value, basic_regex&>::type + typename enable_if<__has_exactly_input_iterator_category<_InputIterator>::value, basic_regex&>::type assign(_InputIterator __first, _InputIterator __last, flag_type __f = regex_constants::ECMAScript) { @@ -2798,7 +2798,7 @@ _LIBCPP_INLINE_VISIBILITY typename enable_if < - __is_cpp17_forward_iterator<_ForwardIterator>::value, + __has_forward_iterator_category<_ForwardIterator>::value, basic_regex& >::type assign(_ForwardIterator __first, _ForwardIterator __last, @@ -3106,7 +3106,7 @@ #if _LIBCPP_STD_VER >= 17 template ::value, nullptr_t>::type + class = typename enable_if<__has_forward_iterator_category<_ForwardIterator>::value, nullptr_t>::type > basic_regex(_ForwardIterator, _ForwardIterator, regex_constants::syntax_option_type = regex_constants::ECMAScript) diff --git a/libcxx/include/set b/libcxx/include/set --- a/libcxx/include/set +++ b/libcxx/include/set @@ -931,7 +931,7 @@ template>, class _Allocator = allocator<__iter_value_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>, class = enable_if_t::value, void>> set(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) @@ -945,7 +945,7 @@ -> set<_Key, _Compare, _Allocator>; template::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> set(_InputIterator, _InputIterator, _Allocator) -> set<__iter_value_type<_InputIterator>, @@ -1467,7 +1467,7 @@ template>, class _Allocator = allocator<__iter_value_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>, class = enable_if_t::value, void>> multiset(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) @@ -1481,7 +1481,7 @@ -> multiset<_Key, _Compare, _Allocator>; template::value, void>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator<_Allocator>::value, void>> multiset(_InputIterator, _InputIterator, _Allocator) -> multiset<__iter_value_type<_InputIterator>, diff --git a/libcxx/include/stack b/libcxx/include/stack --- a/libcxx/include/stack +++ b/libcxx/include/stack @@ -206,13 +206,13 @@ #if _LIBCPP_STD_VER >= 23 template ::value>> + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>> _LIBCPP_HIDE_FROM_ABI stack(_InputIterator __first, _InputIterator __last) : c(__first, __last) {} template ::value>, + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = __enable_if_t::value>> _LIBCPP_HIDE_FROM_ABI stack(_InputIterator __first, _InputIterator __last, const _Alloc& __alloc) : c(__first, __last, __alloc) {} @@ -286,13 +286,13 @@ #if _LIBCPP_STD_VER >= 23 template::value>> + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>> stack(_InputIterator, _InputIterator) -> stack<__iter_value_type<_InputIterator>>; template::value>, + class = __enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = __enable_if_t<__is_allocator<_Alloc>::value>> stack(_InputIterator, _InputIterator, _Alloc) -> stack<__iter_value_type<_InputIterator>, deque<__iter_value_type<_InputIterator>, _Alloc>>; diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -1031,14 +1031,14 @@ std::__debug_db_insert_c(this); } - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string(_InputIterator __first, _InputIterator __last) : __r_(__default_init_tag(), __default_init_tag()) { __init(__first, __last); std::__debug_db_insert_c(this); } - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string(_InputIterator __first, _InputIterator __last, const allocator_type& __a) : __r_(__default_init_tag(), __a) { @@ -1247,7 +1247,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __append_default_init(size_type __n); - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append(_InputIterator __first, _InputIterator __last) { const basic_string __temp(__first, __last, __alloc()); @@ -1255,7 +1255,7 @@ return *this; } - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append(_ForwardIterator __first, _ForwardIterator __last); @@ -1314,11 +1314,11 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign(const value_type* __s, size_type __n); _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign(const value_type* __s); _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign(size_type __n, value_type __c); - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign(_InputIterator __first, _InputIterator __last); - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign(_ForwardIterator __first, _ForwardIterator __last); @@ -1362,11 +1362,11 @@ return begin() + __p; } - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator insert(const_iterator __pos, _InputIterator __first, _InputIterator __last); - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator insert(const_iterator __pos, _ForwardIterator __first, _ForwardIterator __last); @@ -1437,7 +1437,7 @@ return replace(static_cast(__i1 - begin()), static_cast(__i2 - __i1), __n, __c); } - template ::value, int> = 0> + template ::value, int> = 0> _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& replace(const_iterator __i1, const_iterator __i2, _InputIterator __j1, _InputIterator __j2); @@ -1822,10 +1822,10 @@ // to only inline the fast path code directly in the ctor. _LIBCPP_CONSTEXPR_SINCE_CXX20 void __init_copy_ctor_external(const value_type* __s, size_type __sz); - template ::value, int> = 0> + template ::value, int> = 0> inline _LIBCPP_CONSTEXPR_SINCE_CXX20 void __init(_InputIterator __first, _InputIterator __last); - template ::value, int> = 0> + template ::value, int> = 0> inline _LIBCPP_CONSTEXPR_SINCE_CXX20 void __init(_ForwardIterator __first, _ForwardIterator __last); _LIBCPP_CONSTEXPR_SINCE_CXX20 @@ -1990,7 +1990,7 @@ template, class _Allocator = allocator<_CharT>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value> > basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator()) @@ -2155,7 +2155,7 @@ } template -template ::value, int> > +template ::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 void basic_string<_CharT, _Traits, _Allocator>::__init(_InputIterator __first, _InputIterator __last) { @@ -2178,7 +2178,7 @@ } template -template ::value, int> > +template ::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 void basic_string<_CharT, _Traits, _Allocator>::__init(_ForwardIterator __first, _ForwardIterator __last) { @@ -2443,7 +2443,7 @@ #endif template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::assign(_InputIterator __first, _InputIterator __last) { @@ -2453,7 +2453,7 @@ } template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::assign(_ForwardIterator __first, _ForwardIterator __last) { @@ -2630,7 +2630,7 @@ } template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::append( _ForwardIterator __first, _ForwardIterator __last) @@ -2769,7 +2769,7 @@ } template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 typename basic_string<_CharT, _Traits, _Allocator>::iterator basic_string<_CharT, _Traits, _Allocator>::insert(const_iterator __pos, _InputIterator __first, _InputIterator __last) { @@ -2781,7 +2781,7 @@ } template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 typename basic_string<_CharT, _Traits, _Allocator>::iterator basic_string<_CharT, _Traits, _Allocator>::insert(const_iterator __pos, _ForwardIterator __first, _ForwardIterator __last) { @@ -2957,7 +2957,7 @@ } template -template::value, int> > +template::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, _InputIterator __j1, _InputIterator __j2) diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map --- a/libcxx/include/unordered_map +++ b/libcxx/include/unordered_map @@ -1555,7 +1555,7 @@ class _Hash = hash<__iter_key_type<_InputIterator>>, class _Pred = equal_to<__iter_key_type<_InputIterator>>, class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t::value>, @@ -1576,21 +1576,21 @@ -> unordered_map, _Tp, _Hash, _Pred, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_map(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator) -> unordered_map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_map(_InputIterator, _InputIterator, _Allocator) -> unordered_map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> @@ -2331,7 +2331,7 @@ class _Hash = hash<__iter_key_type<_InputIterator>>, class _Pred = equal_to<__iter_key_type<_InputIterator>>, class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t::value>, @@ -2352,21 +2352,21 @@ -> unordered_multimap, _Tp, _Hash, _Pred, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_multimap(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator) -> unordered_multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_multimap(_InputIterator, _InputIterator, _Allocator) -> unordered_multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set --- a/libcxx/include/unordered_set +++ b/libcxx/include/unordered_set @@ -884,7 +884,7 @@ class _Hash = hash<__iter_value_type<_InputIterator>>, class _Pred = equal_to<__iter_value_type<_InputIterator>>, class _Allocator = allocator<__iter_value_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t::value>, @@ -905,7 +905,7 @@ -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_set(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator) @@ -915,7 +915,7 @@ _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> @@ -1522,7 +1522,7 @@ class _Hash = hash<__iter_value_type<_InputIterator>>, class _Pred = equal_to<__iter_value_type<_InputIterator>>, class _Allocator = allocator<__iter_value_type<_InputIterator>>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t::value>, @@ -1542,7 +1542,7 @@ -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator) -> unordered_multiset<__iter_value_type<_InputIterator>, @@ -1551,7 +1551,7 @@ _Allocator>; template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t::value>, class = enable_if_t::value>, class = enable_if_t<__is_allocator<_Allocator>::value>> diff --git a/libcxx/include/vector b/libcxx/include/vector --- a/libcxx/include/vector +++ b/libcxx/include/vector @@ -439,12 +439,12 @@ } template ::value && + __enable_if_t<__has_exactly_input_iterator_category<_InputIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI vector(_InputIterator __first, _InputIterator __last); template ::value && + __enable_if_t<__has_exactly_input_iterator_category<_InputIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI @@ -452,13 +452,13 @@ template < class _ForwardIterator, - __enable_if_t<__is_cpp17_forward_iterator<_ForwardIterator>::value && + __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI vector(_ForwardIterator __first, _ForwardIterator __last); template ::value && + __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI @@ -532,13 +532,13 @@ _NOEXCEPT_((__noexcept_move_assign_container<_Allocator, __alloc_traits>::value)); template ::value && + __enable_if_t<__has_exactly_input_iterator_category<_InputIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void assign(_InputIterator __first, _InputIterator __last); template < class _ForwardIterator, - __enable_if_t<__is_cpp17_forward_iterator<_ForwardIterator>::value && + __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value && is_constructible::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void assign(_ForwardIterator __first, _ForwardIterator __last); @@ -680,7 +680,7 @@ iterator insert(const_iterator __position, size_type __n, const_reference __x); template ::value && + __enable_if_t<__has_exactly_input_iterator_category<_InputIterator>::value && is_constructible< value_type, typename iterator_traits<_InputIterator>::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI iterator @@ -702,7 +702,7 @@ template < class _ForwardIterator, - __enable_if_t<__is_cpp17_forward_iterator<_ForwardIterator>::value && + __enable_if_t<__has_forward_iterator_category<_ForwardIterator>::value && is_constructible< value_type, typename iterator_traits<_ForwardIterator>::reference>::value, int> = 0> _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI iterator @@ -1015,7 +1015,7 @@ #if _LIBCPP_STD_VER >= 17 template>, - class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > vector(_InputIterator, _InputIterator) @@ -1023,7 +1023,7 @@ template::value>, + class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, class = enable_if_t<__is_allocator<_Alloc>::value> > vector(_InputIterator, _InputIterator, _Alloc) @@ -1247,7 +1247,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_InputIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 @@ -1257,7 +1257,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_InputIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 @@ -1268,7 +1268,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_ForwardIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 @@ -1279,7 +1279,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_ForwardIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 @@ -1441,7 +1441,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_InputIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 void @@ -1460,7 +1460,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_ForwardIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 void @@ -1917,7 +1917,7 @@ return __make_iter(__p); } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_InputIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 typename vector<_Tp, _Allocator>::iterator @@ -1971,7 +1971,7 @@ } template -template ::value && +template ::value && is_constructible<_Tp, typename iterator_traits<_ForwardIterator>::reference>::value, int> > _LIBCPP_CONSTEXPR_SINCE_CXX20 typename vector<_Tp, _Allocator>::iterator @@ -2254,16 +2254,16 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(size_type __n, const value_type& __v, const allocator_type& __a); template _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(_InputIterator __first, _InputIterator __last, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIterator>::value>::type* = 0); + typename enable_if<__has_exactly_input_iterator_category<_InputIterator>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIterator>::value>::type* = 0); + typename enable_if<__has_exactly_input_iterator_category<_InputIterator>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(_ForwardIterator __first, _ForwardIterator __last, - typename enable_if<__is_cpp17_forward_iterator<_ForwardIterator>::value>::type* = 0); + typename enable_if<__has_forward_iterator_category<_ForwardIterator>::value>::type* = 0); template _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 vector(_ForwardIterator __first, _ForwardIterator __last, const allocator_type& __a, - typename enable_if<__is_cpp17_forward_iterator<_ForwardIterator>::value>::type* = 0); + typename enable_if<__has_forward_iterator_category<_ForwardIterator>::value>::type* = 0); #if _LIBCPP_STD_VER >= 23 template <_ContainerCompatibleRange _Range> @@ -2309,14 +2309,14 @@ _NOEXCEPT_((__noexcept_move_assign_container<_Allocator, __alloc_traits>::value)); template - typename enable_if <__is_exactly_cpp17_input_iterator<_InputIterator>::value, + typename enable_if <__has_exactly_input_iterator_category<_InputIterator>::value, void >::type _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 assign(_InputIterator __first, _InputIterator __last); template typename enable_if < - __is_cpp17_forward_iterator<_ForwardIterator>::value, + __has_forward_iterator_category<_ForwardIterator>::value, void >::type _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 assign(_ForwardIterator __first, _ForwardIterator __last); @@ -2443,14 +2443,14 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator insert(const_iterator __position, const value_type& __x); _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator insert(const_iterator __position, size_type __n, const value_type& __x); template - typename enable_if <__is_exactly_cpp17_input_iterator<_InputIterator>::value, + typename enable_if <__has_exactly_input_iterator_category<_InputIterator>::value, iterator >::type _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 insert(const_iterator __position, _InputIterator __first, _InputIterator __last); template typename enable_if < - __is_cpp17_forward_iterator<_ForwardIterator>::value, + __has_forward_iterator_category<_ForwardIterator>::value, iterator >::type _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last); @@ -2812,7 +2812,7 @@ template _LIBCPP_CONSTEXPR_SINCE_CXX20 vector::vector(_InputIterator __first, _InputIterator __last, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIterator>::value>::type*) + typename enable_if<__has_exactly_input_iterator_category<_InputIterator>::value>::type*) : __begin_(nullptr), __size_(0), __cap_alloc_(0, __default_init_tag()) @@ -2824,7 +2824,7 @@ template _LIBCPP_CONSTEXPR_SINCE_CXX20 vector::vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a, - typename enable_if<__is_exactly_cpp17_input_iterator<_InputIterator>::value>::type*) + typename enable_if<__has_exactly_input_iterator_category<_InputIterator>::value>::type*) : __begin_(nullptr), __size_(0), __cap_alloc_(0, static_cast<__storage_allocator>(__a)) @@ -2836,7 +2836,7 @@ template _LIBCPP_CONSTEXPR_SINCE_CXX20 vector::vector(_ForwardIterator __first, _ForwardIterator __last, - typename enable_if<__is_cpp17_forward_iterator<_ForwardIterator>::value>::type*) + typename enable_if<__has_forward_iterator_category<_ForwardIterator>::value>::type*) : __begin_(nullptr), __size_(0), __cap_alloc_(0, __default_init_tag()) @@ -2849,7 +2849,7 @@ template _LIBCPP_CONSTEXPR_SINCE_CXX20 vector::vector(_ForwardIterator __first, _ForwardIterator __last, const allocator_type& __a, - typename enable_if<__is_cpp17_forward_iterator<_ForwardIterator>::value>::type*) + typename enable_if<__has_forward_iterator_category<_ForwardIterator>::value>::type*) : __begin_(nullptr), __size_(0), __cap_alloc_(0, static_cast<__storage_allocator>(__a)) @@ -3038,7 +3038,7 @@ template template -_LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if <__is_exactly_cpp17_input_iterator<_InputIterator>::value, +_LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if <__has_exactly_input_iterator_category<_InputIterator>::value, void >::type vector::assign(_InputIterator __first, _InputIterator __last) @@ -3060,7 +3060,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if < - __is_cpp17_forward_iterator<_ForwardIterator>::value, + __has_forward_iterator_category<_ForwardIterator>::value, void >::type vector::assign(_ForwardIterator __first, _ForwardIterator __last) @@ -3205,7 +3205,7 @@ template template -_LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if <__is_exactly_cpp17_input_iterator<_InputIterator>::value, +_LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if <__has_exactly_input_iterator_category<_InputIterator>::value, typename vector::iterator >::type vector::insert(const_iterator __position, _InputIterator __first, _InputIterator __last) @@ -3258,7 +3258,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 typename enable_if < - __is_cpp17_forward_iterator<_ForwardIterator>::value, + __has_forward_iterator_category<_ForwardIterator>::value, typename vector::iterator >::type vector::insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last) diff --git a/libcxx/test/libcxx/iterators/contiguous_iterators.pass.cpp b/libcxx/test/libcxx/iterators/contiguous_iterators.pass.cpp --- a/libcxx/test/libcxx/iterators/contiguous_iterators.pass.cpp +++ b/libcxx/test/libcxx/iterators/contiguous_iterators.pass.cpp @@ -135,7 +135,7 @@ struct fake_deque_iterator : std::deque::iterator { using element_type = int; }; -static_assert(std::__is_cpp17_random_access_iterator::value, ""); +static_assert(std::__has_random_access_iterator_category::value, ""); static_assert(!std::__is_cpp17_contiguous_iterator::value, ""); #if TEST_STD_VER >= 20 @@ -143,7 +143,7 @@ using iterator_concept = std::contiguous_iterator_tag; using element_type = int; }; -static_assert(std::__is_cpp17_random_access_iterator::value, ""); +static_assert(std::__has_random_access_iterator_category::value, ""); static_assert(std::__is_cpp17_contiguous_iterator::value, ""); #endif diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp @@ -20,7 +20,7 @@ using value_type = int; static_assert(std::contiguous_iterator); -LIBCPP_STATIC_ASSERT(std::__is_cpp17_random_access_iterator::value); +LIBCPP_STATIC_ASSERT(std::__has_random_access_iterator_category::value); static_assert(std::indirectly_writable); static_assert(std::sentinel_for); static_assert(!std::sentinel_for); diff --git a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp --- a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp @@ -22,7 +22,7 @@ using const_reverse_iterator = std::string_view::const_reverse_iterator; static_assert(std::contiguous_iterator); -LIBCPP_STATIC_ASSERT(std::__is_cpp17_random_access_iterator::value); +LIBCPP_STATIC_ASSERT(std::__has_random_access_iterator_category::value); static_assert(!std::indirectly_writable); static_assert(std::sentinel_for); static_assert(std::sentinel_for); @@ -39,7 +39,7 @@ static_assert(!std::indirectly_swappable); static_assert(std::contiguous_iterator); -LIBCPP_STATIC_ASSERT(std::__is_cpp17_random_access_iterator::value); +LIBCPP_STATIC_ASSERT(std::__has_random_access_iterator_category::value); static_assert(!std::indirectly_writable); static_assert(std::sentinel_for); static_assert(std::sentinel_for);