14 concept IsReverseView = concepts::InstanceOf<meta::RemoveCV<T>,
ReverseView>;
17 constexpr inline bool is_reverse_raw_view_helper =
false;
19 template<
typename I,
bool sized>
20 constexpr inline bool is_reverse_raw_view_helper<View<ReverseIterator<I>, ReverseIterator<I>, sized>> =
true;
23 concept IsReverseRawView = is_reverse_raw_view_helper<meta::RemoveCV<T>>;
26 concept CanReverseView =
requires(T&& container) {
ReverseView { util::forward<T>(container) }; };
28 struct ReverseFunction : function::pipeline::EnablePipeline {
29 template<concepts::ViewableContainer Con>
30 requires(IsReverseView<Con> || IsReverseRawView<Con> || CanReverseView<Con>)
31 constexpr auto operator()(Con&& container)
const {
32 if constexpr (IsReverseView<Con>) {
33 return util::forward<Con>(container).base();
34 }
else if constexpr (IsReverseRawView<Con>) {
35 using RevIter =
decltype(container.begin());
37 constexpr bool is_sized = concepts::SizedContainer<Con>;
39 if constexpr (is_sized) {
46 return ReverseView { util::forward<Con>(container) };
52constexpr inline auto reverse = detail::ReverseFunction {};
constexpr auto reverse
Definition reverse.h:52
View(Iter, Sent) -> View< Iter, Sent >
ReverseView(Con &&) -> ReverseView< meta::AsView< Con > >
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition any_storable.h:9