Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
begin.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/core.h"
8#include "di/meta/language.h"
9#include "di/meta/util.h"
10#include "di/util/forward.h"
11
12namespace di::container {
13struct BeginFunction;
14
15namespace detail {
16 template<typename T>
18
19 template<typename T>
22
23 template<typename T>
24 concept MemberBegin = requires(T&& container) {
25 { util::forward<T>(container).begin() } -> concepts::Iterator;
26 };
27}
28
30 template<typename T>
33 constexpr auto operator()(T&& container) const {
34 if constexpr (detail::ArrayBegin<T>) {
35 return container + 0;
36 } else if constexpr (detail::CustomBegin<T>) {
37 return function::tag_invoke(*this, util::forward<T>(container));
38 } else {
39 return util::forward<T>(container).begin();
40 }
41 }
42};
43
44constexpr inline auto begin = BeginFunction {};
45}
46
47namespace di {
49}
Definition iterator.h:14
Definition language.h:110
Definition tag_invoke.h:33
Definition sequence.h:13
Definition sequence.h:12
constexpr struct di::container::EnableBorrowedContainer enable_borrowed_container
constexpr auto begin
Definition begin.h:44
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 begin.h:29
constexpr auto operator()(T &&container) const
Definition begin.h:33