
On Mon, Jun 18, 2012 at 12:25 PM, Jeremiah Willcock
On Mon, 18 Jun 2012, Jeffrey Lee Hellrung, Jr. wrote:
On Mon, Jun 18, 2012 at 10:35 AM, Jeremiah Willcock
wrote: Boost.Preprocessor has a macro BOOST_PP_INTERCEPT to eat a numeric value that it is token-concatenated onto. Is there a similar macro that just returns the value? I.e., some BOOST_PP_EMPTY_FOR_CONCAT such that BOOST_PP_EMPTY_FOR_CONCAT ## 3 turns into 3? As with BOOST_PP_INTERCEPT, it only needs to work for small integer values. Is there some other technique I can use for this? I am using it to generate std::get<> invocations in BOOST_PP_ENUM_BINARY_PARAMS. Thank you for your help.
I don't know any such facility in Boost.PP, but it's pretty trivial to generate:
#define X0 0 #define X1 1 #define X2 2 // etc.
...which makes me think I might be overlooking something in Boost.PP :/
Somewhat related: what do your ENUM_BINARY_PARAMS invocations look like? I know I've gotten away with cat'ing template parameter delimiters ("<" and ">") against preprocessor integer tokens.
I'm not using this code anymore, but it was basically:
BOOST_PP_ENUM_BINARY_PARAMS(**nparams, std::get
(tup) BOOST_PP_INTERCEPT) where ZZZ is the identity-type macro discussed in the email. Even using something that I would expect to work like + as ZZZ breaks since apparently signs aren't allowed at the beginnings of pp-tokens. I'm using GCC 4.7, and it seems to be strict about concatenations.
So, just to confirm, BOOST_PP_ENUM_BINARY_PARAMS( nparams, std::get<, >(tup) BOOST_PP_INTERCEPT ) (i.e., with ZZZ being an empty token) does not work with gcc 4.7? - Jeff