9 struct CartesianProductFunction;
11 template<
typename... Cons>
12 concept CustomCartesianProduct = concepts::TagInvocable<CartesianProductFunction, Cons...>;
14 template<
typename... Cons>
15 concept EmptyCartesianProduct =
sizeof...(Cons) == 0;
17 template<
typename... Cons>
18 concept ViewCartesianProduct =
21 struct CartesianProductFunction {
22 template<concepts::ViewableContainer... Cons>
23 requires(CustomCartesianProduct<Cons...> || EmptyCartesianProduct<Cons...> || ViewCartesianProduct<Cons...>)
24 constexpr auto operator()(Cons&&... containers)
const -> concepts::View
auto {
25 if constexpr (CustomCartesianProduct<Cons...>) {
27 }
else if constexpr (EmptyCartesianProduct<Cons...>) {
40using view::cartesian_product;
constexpr auto cartesian_product
Definition cartesian_product.h:36
constexpr auto empty
Definition empty.h:7
CartesianProductView(Cons &&...) -> CartesianProductView< meta::AsView< Cons >... >
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition any_storable.h:9