18 concept CustomRBegin = concepts::TagInvocable<RBeginFunction, T> &&
19 concepts::Iterator<meta::Decay<meta::TagInvokeResult<RBeginFunction, T>>>;
22 concept MemberRBegin =
requires(T&& container) {
23 { util::forward<T>(container).rbegin() } -> concepts::Iterator;
27 concept ReverseIteratorRBegin =
requires(T&& container) {
28 {
container::begin(util::forward<T>(container)) } -> concepts::BidirectionalIterator;
31 } -> concepts::SameAs<decltype(container::begin(util::forward<T>(container)))>;
38 (detail::CustomRBegin<T> || detail::MemberRBegin<T> || detail::ReverseIteratorRBegin<T>) )
40 if constexpr (detail::CustomRBegin<T>) {
42 }
else if constexpr (detail::MemberRBegin<T>) {
43 return util::forward<T>(
container).rbegin();
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:55
constexpr auto begin
Definition begin.h:52
constexpr auto rbegin
Definition rbegin.h:50
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto in_place_type
Definition in_place_type.h:12
Definition any_storable.h:9
constexpr auto operator()(T &&container) const -> concepts::Iterator auto
Definition rbegin.h:39