This macro expands to the comma-separated sequence:
p1 ## 0 p2 ## 0, p1 ## 1 p2 ## 1, ... p1 ## count - 1 p2 ## count - 1
#include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#define FUNCTION(z, n, _) \
template<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(n), class T)> \
void f(BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(n), T, p)) { \
/* ... */ \
} \
/**/
BOOST_PP_REPEAT(2, FUNCTION, nil)
/*
expands to...
template<class T0> void f(T0 p0) { }
template<class T0, class T1> void f(T0 p0, T1 p1) { }
*/