Iros
 
Loading...
Searching...
No Matches
rbegin.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/meta/core.h"
9#include "di/meta/language.h"
10#include "di/meta/util.h"
11#include "di/util/forward.h"
12
13namespace di::container {
14struct RBeginFunction;
15
16namespace detail {
17 template<typename T>
20
21 template<typename T>
22 concept MemberRBegin = requires(T&& container) {
23 { util::forward<T>(container).rbegin() } -> concepts::Iterator;
24 };
25
26 template<typename T>
33}
34
36 template<typename T>
39 constexpr auto operator()(T&& container) const -> concepts::Iterator auto {
40 if constexpr (detail::CustomRBegin<T>) {
41 return function::tag_invoke(*this, util::forward<T>(container));
42 } else if constexpr (detail::MemberRBegin<T>) {
43 return util::forward<T>(container).rbegin();
44 } else {
45 return make_reverse_iterator(container::begin(util::forward<T>(container)));
46 }
47 }
48};
49
50constexpr inline auto rbegin = RBeginFunction {};
51}
52
53namespace di {
55}
Definition bidirectional_iterator.h:8
Definition iterator.h:14
Definition core.h:114
Definition tag_invoke.h:33
Definition sequence.h:13
Definition sequence.h:12
constexpr struct di::container::EnableBorrowedContainer enable_borrowed_container
constexpr auto make_reverse_iterator(Iter iter)
Definition reverse_iterator.h:110
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
constexpr auto rbegin
Definition rbegin.h:50
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
RemoveConst< RemoveVolatile< T > > RemoveCV
Definition core.h:57
constexpr auto in_place_type
Definition in_place_type.h:12
Definition zstring_parser.h:9
Definition rbegin.h:35
constexpr auto operator()(T &&container) const -> concepts::Iterator auto
Definition rbegin.h:39