12 struct JoinWithFunction;
14 template<
typename Con,
typename Pattern>
15 concept CustomJoinWith = concepts::TagInvocable<JoinWithFunction, Con, Pattern>;
17 template<
typename Con,
typename Pattern>
18 concept ViewJoinWith =
requires(Con&& container, Pattern&& pattern) {
19 JoinWithView { util::forward<Con>(container), util::forward<Pattern>(pattern) };
22 struct JoinWithFunction {
23 template<concepts::ViewableContainer Con,
typename Pattern>
24 requires(CustomJoinWith<Con, Pattern> || ViewJoinWith<Con, Pattern>)
25 constexpr auto operator()(Con&& container, Pattern&& pattern)
const {
26 if constexpr (CustomJoinWith<Con, Pattern>) {
27 return function::tag_invoke(*
this, util::forward<Con>(container), util::forward<Pattern>(pattern));
29 return JoinWithView { util::forward<Con>(container), util::forward<Pattern>(pattern) };
constexpr auto join_with
Definition join_with.h:35
JoinWithView(Con &&, Pattern &&) -> JoinWithView< 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