
Background: I am using a few functions which have the following form: void create ( ); template < typename P1 > void create ( P1 p1 ); template < typename P1, typename P2 > void create ( P1 p1, P2 p2 ); [...] I am trying to generate these using the boost preprocessor library, but I am getting an error. This is probably because I do not fully understand how the order of expansion of function-like macros works. The error is: warning C4002: too many actual parameters for macro 'BOOST_PP_IIF_1' My code is as follows: #define BOOST_PP_LOCAL_LIMITS (0, BOOST_SINGLETON_PTR_MAX_CONSTRUCTOR_PARAMS) #define BOOST_PP_LOCAL_MACRO(n) \ BOOST_PP_IF(n, template < BOOST_PP_ENUM_PARAMS(n, typename P) >, \ BOOST_PP_EMPTY()) void create ( BOOST_PP_ENUM_BINARY_PARAMS(n, \ typename ::boost::call_traits < P, >::param_type p ) ) \ { \ policy_ptr->get_creator ( )->create \ ( BOOST_PP_ENUM_PARAMS(n, p) ); \ } #include BOOST_PP_LOCAL_ITERATE() What am I doing wrong? -Jason