Boost logo

Boost :

Subject: Re: [boost] [Math.Constants] Help needed with the preprocessor
From: John Maddock (boost.regex_at_[hidden])
Date: 2011-12-17 06:52:07


>This seems to work even with x = -1.0:
>
>BOOST_PP_SEQ_CAT( (-1.0) (123) (e) (-10) ) // -1.0123e- 10
>
>But I'm not sure how this actually works inside Boost.Preprocessor...

Unfortunately neither of the ideas offered work for me, I tried:

#define C_(x, y) BOOST_JOIN(x, y)
#define C2_(x, y) BOOST_PP_SEQ_CAT((x)(e)(y))

int main()
{
   float f = C_(5.0, e-001);
   float g = C2_(5.0, -001);
}

And the preprocessor produced:

int main()
{
   float f = 5.0e -001;
   float g = 5.0e- 001;
}

Note the whitespace inserted before or after the "-".

The strange thing is, if I invoke:

C_(5.0, 0e-001)

Then I get:

 5.00e-001

And no whitespace anymore!

This leads to me to wonder if GCC is doing something special when it
recognizes that the token might be a valid number.... or else that this is
just blind luck?

Either way, I'd really like to find something that's actually guaranteed to
work, rather than just happens to :-(

Thanks, John.


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