Boost logo

Boost Users :

Subject: Re: [Boost-users] [preprocessor] Identity function for token concatenation
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-06-18 15:25:21


On Mon, 18 Jun 2012, Jeffrey Lee Hellrung, Jr. wrote:

> On Mon, Jun 18, 2012 at 10:35 AM, Jeremiah Willcock <jewillco_at_[hidden]> 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<ZZZ, >(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.

-- Jeremiah Willcock


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net