Skip to content

Commit 8819f70

Browse files
fix conditional iterator category
1 parent 4c1242f commit 8819f70

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

libcxx/include/__ranges/concat_view.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,12 @@ class concat_view : public view_interface<concat_view<_Views...>> {
170170
template <class... _Views>
171171
concat_view(_Views&&...) -> concat_view<views::all_t<_Views>...>;
172172

173-
template <input_range... _Views>
174-
requires(view<_Views> && ...) && (sizeof...(_Views) > 0) && __concatable<_Views...>
175-
template <bool _Const>
176-
class concat_view<_Views...>::__iterator {
173+
template <bool _Const, typename... _Views>
174+
struct __concat_view_iterator_category {};
175+
176+
template <bool _Const, typename... _Views>
177+
requires __all_forward<_Const, _Views...>
178+
struct __concat_view_iterator_category<_Const, _Views...> {
177179
private:
178180
constexpr static bool __derive_pack_random_iterator =
179181
__derived_from_pack<typename iterator_traits<iterator_t<__maybe_const<_Const, _Views>>>::iterator_category...,
@@ -194,6 +196,13 @@ class concat_view<_Views...>::__iterator {
194196
_If<__derive_pack_bidirectional_iterator,
195197
bidirectional_iterator_tag,
196198
_If<__derive_pack_forward_iterator, forward_iterator_tag, input_iterator_tag > > > >;
199+
};
200+
201+
template <input_range... _Views>
202+
requires(view<_Views> && ...) && (sizeof...(_Views) > 0) && __concatable<_Views...>
203+
template <bool _Const>
204+
class concat_view<_Views...>::__iterator : public __concat_view_iterator_category<_Const, _Views...> {
205+
public:
197206
using iterator_concept =
198207
_If<__concat_is_random_access<_Const, _Views...>,
199208
random_access_iterator_tag,

0 commit comments

Comments
 (0)