Iros
 
Loading...
Searching...
No Matches
concat.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container::view {
8namespace detail {
9 struct ConcatFunction;
10
11 template<typename... Cons>
13
14 template<typename... Cons>
15 concept AllConcat = sizeof...(Cons) == 1;
16
17 template<typename... Cons>
18 concept ViewConcat = requires(Cons&&... containers) { ConcatView { util::forward<Cons>(containers)... }; };
19
22 requires(CustomConcat<Cons...> || AllConcat<Cons...> || ViewConcat<Cons...>)
23 constexpr /* concepts::View */ auto operator()(Cons&&... containers) const {
24 if constexpr (CustomConcat<Cons...>) {
25 return function::tag_invoke(*this, util::forward<Cons>(containers)...);
26 } else if constexpr (AllConcat<Cons...>) {
27 return all(util::forward<Cons>(containers)...);
28 } else {
29 return ConcatView { util::forward<Cons>(containers)... };
30 }
31 }
32 };
33}
34
35constexpr inline auto concat = detail::ConcatFunction {};
36}
37
38namespace di {
39using view::concat;
40}
Definition concat_view.h:67
Definition tag_invoke.h:33
Definition viewable_container.h:14
Definition adjacent.h:9
concept Cons
Definition zip_transform.h:12
Definition adjacent.h:8
constexpr auto concat
Definition concat.h:35
constexpr auto all
Definition all.h:35
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition zstring_parser.h:9