Range-v3
Range algorithms, views, and actions for the Standard Library
cartesian_product.hpp File Reference

Classes

struct  ranges::cartesian_product_view< Views >
 
struct  ranges::views::cartesian_product_fn
 

Functions

 ranges::CPP_PP_CAT (CPP_PP_DEF_, template(typename...Views)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 
 ranges::CPP_PP_CAT (CPP_PP_DEF_, template(typename IsConst, typename...Views)) META_CONCEPT CPP_PP_CAT(CPP_PP_DEF_
 

Variables

concept ranges::cartesian_produce_view_can_bidi = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( cartesian_produce_view_can_random<IsConst )( cartesian_produce_view_can_random<IsConst, Views...> || and_v<common_range<meta::const_if<IsConst, Views>>..., bidirectional_iterator<iterator_t< meta::const_if<IsConst, Views>>>...> )
 
concept ranges::cartesian_produce_view_can_const = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( and_v<range<Views const>...> )( and_v<range<Views const>...> )
 
concept ranges::cartesian_produce_view_can_distance = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( cartesian_produce_view_can_size<IsConst )( cartesian_produce_view_can_size<IsConst, Views...> && and_v<sized_sentinel_for< iterator_t<meta::const_if<IsConst, Views>>, iterator_t<meta::const_if<IsConst, Views>>>...> )
 
concept ranges::cartesian_produce_view_can_random = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( cartesian_produce_view_can_distance<IsConst )( cartesian_produce_view_can_distance<IsConst, Views...> && and_v<random_access_iterator<iterator_t< meta::const_if<IsConst, Views>>>...> )
 
concept ranges::cartesian_produce_view_can_size = CPP_PP_CAT( CPP_PP_DEF_IMPL_IS_PAREN_, 0 )( and_v<sized_range<meta::const_if<IsConst )( and_v<sized_range<meta::const_if<IsConst, Views>>...> && ranges::type<common_type_t<std::uintmax_t, range_size_t<meta::const_if<IsConst, Views>>...>> )
 
constexpr cartesian_product_fn ranges::views::cartesian_product {}