The BOOST_PP_LIST_FOR_EACH_PRODUCT macro repeats a macro for each cartesian product of several lists.

Usage

BOOST_PP_LIST_FOR_EACH_PRODUCT(macro, size, tuple)

Arguments

macro
The binary macro of the form macro(r, product).  This macro is expanded by BOOST_PP_FOR_EACH_PRODUCT with each cartesian product in tuple.  It is expanded with the next available BOOST_PP_FOR repetition and a tuple containing a cartesian product.  This tuple will have size elements.
size
The size of tuple.
tuple
A tuple of lists from which cartesian products are obtained.

Remarks

This macro is a repetition construct.  If two lists are (a, (b, (c, BOOST_PP_NIL))) and (x, (y, (z, BOOST_PP_NIL))), this macro will produce the following sequence:
macro(r, (a, x)) macro(r, (a, y)) macro(r, (a, z))
macro(r, (b, x)) macro(r, (b, y)) macro(r, (b, z))
macro(r, (c, x)) macro(r, (c, y)) macro(r, (c, z))
Previously, this macro could not be used inside BOOST_PP_FOR.  There is no longer any such restriction.  It is more efficient, however, to use BOOST_PP_LIST_FOR_EACH_PRODUCT_R in such a situation.

See Also

Requirements

Header:  <boost/preprocessor/list/for_each_product.hpp>

Sample Code

#include <boost/preprocessor/list/for_each_product.hpp>

#define L1 (a, (b, (c, BOOST_PP_NIL)))
#define L2 (x, (y, (z, BOOST_PP_NIL)))

#define MACRO(r, product) product

BOOST_PP_LIST_FOR_EACH_PRODUCT(MACRO, 2, (L1, L2))
   // expands to (a, x) (a, y) (a, z) (b, x) (b, y) (b, z) (c, x) (c, y) (c, z)

Copyright Housemarque Oy 2002
Copyright Paul Mensonides 2002

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)