@@ -78,26 +78,9 @@ using __iter_const_rvalue_reference_t _LIBCPP_NODEBUG =
7878 common_reference_t <const iter_value_t <_Iter>&&, iter_rvalue_reference_t <_Iter>>;
7979
8080template <class _Iter >
81- struct __basic_const_iterator_concept {
82- // clang-format off
83- using iterator_concept =
84- conditional_t <contiguous_iterator<_Iter>,
85- contiguous_iterator_tag,
86- conditional_t <random_access_iterator<_Iter>,
87- random_access_iterator_tag,
88- conditional_t <bidirectional_iterator<_Iter>,
89- bidirectional_iterator_tag,
90- conditional_t <forward_iterator<_Iter>,
91- forward_iterator_tag,
92- // else
93- input_iterator_tag>>>>;
94- // clang-format on
95- };
96-
97- template <class _Iter >
98- struct __basic_const_iterator_category : __basic_const_iterator_concept<_Iter> {};
81+ struct __basic_const_iterator_category {};
9982template <forward_iterator _Iter>
100- struct __basic_const_iterator_category <_Iter> : __basic_const_iterator_concept<_Iter> {
83+ struct __basic_const_iterator_category <_Iter> {
10184 using iterator_category = std::iterator_traits<_Iter>::iterator_category;
10285};
10386
@@ -111,6 +94,19 @@ class _LIBCPP_TEMPLATE_VIS basic_const_iterator : public __basic_const_iterator_
11194public:
11295 using value_type = iter_value_t <_Iter>;
11396 using difference_type = iter_difference_t <_Iter>;
97+ // clang-format off
98+ using iterator_concept =
99+ conditional_t <contiguous_iterator<_Iter>,
100+ contiguous_iterator_tag,
101+ conditional_t <random_access_iterator<_Iter>,
102+ random_access_iterator_tag,
103+ conditional_t <bidirectional_iterator<_Iter>,
104+ bidirectional_iterator_tag,
105+ conditional_t <forward_iterator<_Iter>,
106+ forward_iterator_tag,
107+ // else
108+ input_iterator_tag>>>>;
109+ // clang-format on
114110
115111 _LIBCPP_HIDE_FROM_ABI basic_const_iterator ()
116112 requires default_initializable<_Iter>
0 commit comments