diff --git a/include/flux/op/cartesian_power_map.hpp b/include/flux/op/cartesian_power_map.hpp index c2f8eb02..f41e3296 100644 --- a/include/flux/op/cartesian_power_map.hpp +++ b/include/flux/op/cartesian_power_map.hpp @@ -55,8 +55,10 @@ struct cartesian_power_map_fn } // namespace detail -template -FLUX_EXPORT inline constexpr auto cartesian_power_map = detail::cartesian_power_map_fn{}; +FLUX_EXPORT +template + requires (N >= 0) +inline constexpr auto cartesian_power_map = detail::cartesian_power_map_fn{}; } // namespace flux diff --git a/include/flux/op/cartesian_product.hpp b/include/flux/op/cartesian_product.hpp index 360ba25e..5a825aca 100644 --- a/include/flux/op/cartesian_product.hpp +++ b/include/flux/op/cartesian_product.hpp @@ -26,6 +26,10 @@ struct cartesian_product_adaptor FLUX_NO_UNIQUE_ADDRESS std::tuple bases_; public: + constexpr explicit cartesian_product_adaptor(decays_to auto&&... bases) + : bases_(FLUX_FWD(bases)...) + {} + using flux_sequence_traits = cartesian_traits_base< sizeof...(Bases), cartesian_kind::product, @@ -33,12 +37,6 @@ struct cartesian_product_adaptor Bases... >; friend flux_sequence_traits::impl; - - constexpr explicit cartesian_product_adaptor(decays_to auto&&... bases) - : bases_(FLUX_FWD(bases)...) - {} - - }; struct cartesian_product_fn {