Iros
 
Loading...
Searching...
No Matches
end.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/types/size_t.h"
12#include "di/util/forward.h"
13
14namespace di::container {
15struct EndFunction;
16
17namespace detail {
18 template<typename T>
20
21 template<typename T>
22 concept CustomEnd =
25
26 template<typename T>
27 concept MemberEnd = requires(T&& container) {
28 { util::forward<T>(container).end() } -> concepts::SentinelFor<meta::ContainerIterator<T>>;
29 };
30}
31
33 template<typename T>
36 constexpr auto operator()(T&& container) const {
37 if constexpr (detail::ArrayEnd<T>) {
39 } else if constexpr (detail::CustomEnd<T>) {
40 return function::tag_invoke(*this, util::forward<T>(container));
41 } else {
42 return util::forward<T>(container).end();
43 }
44 }
45};
46
47constexpr inline auto end = EndFunction {};
48}
49
50namespace di {
51using container::end;
52}
Definition language.h:96
Definition sentinel_for.h:9
Definition tag_invoke.h:33
Definition sequence.h:13
Definition sequence.h:12
constexpr struct di::container::EnableBorrowedContainer enable_borrowed_container
constexpr auto end
Definition end.h:47
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto Extent
Definition language.h:149
RemoveConst< RemoveVolatile< T > > RemoveCV
Definition core.h:57
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition container_iterator.h:8
constexpr auto in_place_type
Definition in_place_type.h:12
Definition zstring_parser.h:9
Definition end.h:32
constexpr auto operator()(T &&container) const
Definition end.h:36