11 template<
typename... Cons>
12 concept CustomConcat = (
sizeof...(Cons) > 1) && concepts::TagInvocable<ConcatFunction, Cons...>;
14 template<
typename... Cons>
15 concept AllConcat =
sizeof...(Cons) == 1;
17 template<
typename... Cons>
18 concept ViewConcat =
requires(Cons&&... containers) {
ConcatView { util::forward<Cons>(containers)... }; };
20 struct ConcatFunction {
21 template<concepts::ViewableContainer... Cons>
22 requires(CustomConcat<Cons...> || AllConcat<Cons...> || ViewConcat<Cons...>)
23 constexpr auto operator()(Cons&&... containers)
const {
24 if constexpr (CustomConcat<Cons...>) {
26 }
else if constexpr (AllConcat<Cons...>) {
27 return all(util::forward<Cons>(containers)...);
29 return ConcatView { util::forward<Cons>(containers)... };
35constexpr inline auto concat = detail::ConcatFunction {};
constexpr auto concat
Definition concat.h:35
constexpr auto all
Definition all.h:35
ConcatView(Cons &&...) -> ConcatView< meta::AsView< Cons >... >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition any_storable.h:9