9 struct ZipTransformFunction;
11 template<
typename F,
typename... Cons>
12 concept CustomZipTransform =
sizeof...(Cons) > 0 && concepts::TagInvocable<ZipTransformFunction, F, Cons...>;
14 template<
typename F,
typename... Cons>
15 concept EmptyZipTransform =
sizeof...(Cons) == 0 && concepts::Invocable<
meta::Decay<F>&> &&
18 template<
typename F,
typename... Cons>
19 concept ViewZipTransform =
sizeof...(Cons) > 0 &&
requires(F&& function, Cons&&... containers) {
20 ZipTransformView(util::forward<F>(function), util::forward<Cons>(containers)...);
23 struct ZipTransformFunction {
24 template<
typename F, concepts::ViewableContainer... Cons>
25 requires(CustomZipTransform<F, Cons...> || EmptyZipTransform<F, Cons...> || ViewZipTransform<F, Cons...>)
26 constexpr auto operator()(F&& function, Cons&&... containers)
const -> concepts::View
auto {
27 if constexpr (CustomZipTransform<F, Cons...>) {
28 return function::tag_invoke(*
this, util::forward<F>(function), util::forward<Cons>(containers)...);
29 }
else if constexpr (EmptyZipTransform<F, Cons...>) {
32 return ZipTransformView { util::forward<F>(function), util::forward<Cons>(containers)... };
42using view::zip_transform;
constexpr auto zip_transform
Definition zip_transform.h:38
constexpr auto empty
Definition empty.h:7
ZipTransformView(F, Cons &&...) -> ZipTransformView< F, meta::AsView< Cons >... >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition any_storable.h:9