14 template<
typename Con,
typename Pattern>
15 concept CustomSplit = concepts::TagInvocable<SplitFunction, Con, Pattern>;
17 template<
typename Con,
typename Pattern>
18 concept ViewSplit =
requires(Con&& container, Pattern&& pattern) {
19 SplitView { util::forward<Con>(container), util::forward<Pattern>(pattern) };
22 struct SplitFunction {
23 template<concepts::ViewableContainer Con,
typename Pattern>
24 requires(CustomSplit<Con, Pattern> || ViewSplit<Con, Pattern>)
25 constexpr auto operator()(Con&& container, Pattern&& pattern)
const -> concepts::View
auto {
26 if constexpr (CustomSplit<Con, Pattern>) {
27 return function::tag_invoke(*
this, util::forward<Con>(container), util::forward<Pattern>(pattern));
29 return SplitView { util::forward<Con>(container), util::forward<Pattern>(pattern) };
constexpr auto split
Definition split.h:35
SplitView(Con &&, Pattern &&) -> SplitView< meta::AsView< Con >, meta::AsView< Pattern > >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto curry_back
Definition curry_back.h:141
Definition any_storable.h:9