Boost logo

Boost :

Subject: [boost] [preprocessor] [variadic] VMD_SIZE using ADD -- why?
From: lcaminiti (lorcaminiti_at_[hidden])
Date: 2011-06-06 12:51:37


Hello all,

I am using the VMD Boost Library Under Construction to handle variadic
macros.

On MVSC, this library uses PP_ADD to calculate the variadic size
VMD_SIZE(__VA_ARGS__). However, it does not provide a reentrant version of
VMD_SIZE (like VMD_SIZE_D) which is a problem when nesting size calculations
within while iterations because PP_ADD uses PP_WHILE. I think, if this
implementation is kept, the library should also provide the reentrant
variant VMD_SIZE_D that invokes PP_ADD_D instead of PP_ADD.

#if defined(BOOST_MSVC)
#define BOOST_DETAIL_PP_VMD_DETAIL_DATA_SIZE(...) \
 
BOOST_PP_ADD(BOOST_DETAIL_PP_VMD_DETAIL_APPLY(BOOST_DETAIL_PP_VMD_DETAIL_ARG_N,
(__VA_ARGS__, BOOST_DETAIL_PP_VMD_DETAIL_RSEQ_N())),0) \
/**/
#else
#define BOOST_DETAIL_PP_VMD_DETAIL_DATA_SIZE(...) \
  BOOST_DETAIL_PP_VMD_DETAIL_APPLY(BOOST_DETAIL_PP_VMD_DETAIL_ARG_N,
(__VA_ARGS__, BOOST_DETAIL_PP_VMD_DETAIL_RSEQ_N())) \
/**/
#endif

BTW, why is PP_ADD(size, 0) used on MSVC? If this is just for forcing proper
macro expansion, I think other techniques (like the ones used by PP_EXPAND)
should be used so no PP_WHILE reentrancy dependency is introduced.

Thanks,
--Lorenzo

--
View this message in context: http://boost.2283326.n4.nabble.com/boost-preprocessor-variadic-VMD-SIZE-using-ADD-why-tp3577430p3577430.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk