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
		
	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)