
On 9/14/05, Jason Hise <chaos@ezequal.com> wrote:
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?
Try replacing BOOST_PP_IF with BOOST_PP_EXPR_IF: BOOST_PP_EXPR_IF(n, template < BOOST_PP_ENUM_PARAMS(n, typename P) >)\ If I understand it correctly, BOOST_PP_EMPTY() expands to nothing before BOOST_PP_IF is called, causing BOOST_PP_IF to be called with: BOOST_PP_IF(n, template < BOOST_PP_ENUM_PARAMS(n, typename P) >,) Regards, Peder
-Jason
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost