diff --git a/include/flux/adaptor/reverse.hpp b/include/flux/adaptor/reverse.hpp index 7b7e0d62..0bcea635 100644 --- a/include/flux/adaptor/reverse.hpp +++ b/include/flux/adaptor/reverse.hpp @@ -48,6 +48,7 @@ struct reverse_adaptor : inline_sequence_base> using value_type = value_t; static constexpr auto first(auto& self) -> cursor_type + requires bounded_sequence { return cursor_type(flux::last(self.base_)); } @@ -64,28 +65,32 @@ struct reverse_adaptor : inline_sequence_base> template static constexpr auto read_at(Self& self, cursor_type const& cur) - -> element_t + -> decltype(auto) + requires bidirectional_sequence { return flux::read_at(self.base_, flux::prev(self.base_, cur.base_cur)); } template static constexpr auto read_at_unchecked(Self& self, cursor_type const& cur) - -> element_t + -> decltype(auto) + requires bidirectional_sequence { return flux::read_at_unchecked(self.base_, flux::prev(self.base_, cur.base_cur)); } template static constexpr auto move_at(Self& self, cursor_type const& cur) - -> rvalue_element_t + -> decltype(auto) + requires bidirectional_sequence { return flux::move_at(self.base_, flux::prev(self.base_, cur.base_cur)); } template static constexpr auto move_at_unchecked(Self& self, cursor_type const& cur) - -> rvalue_element_t + -> decltype(auto) + requires bidirectional_sequence { return flux::move_at_unchecked(self.base_, flux::prev(self.base_, cur.base_cur)); } @@ -112,14 +117,12 @@ struct reverse_adaptor : inline_sequence_base> } static constexpr auto size(auto& self) -> distance_t - requires sized_iterable + requires sized_iterable { return flux::size(self.base_); } static constexpr auto for_each_while(auto& self, auto&& pred) -> cursor_type - requires bidirectional_sequence && - bounded_sequence { auto cur = flux::last(self.base_); const auto end = flux::first(self.base_);