From: Terje Slettebø (tslettebo_at_[hidden])
Date: 2003-01-01 08:09:27
>From: "Paul Mensonides" <pmenso57_at_[hidden]>
> From: "Terje Slettebø" <tslettebo_at_[hidden]>
> > To do that (without changing the Boost unit test code), I made a few
> > forwarding macros, like this:
> > #define BOOST_CHECK_EQUAL_CP(a,b)\
> > IZE(b)##")");\
> > BOOST_CHECK_EQUAL(a,b)
> 1) BOOST_STRINGIZE(a) will not *legally* expand. (It looks like the type
> thing that Metrowerks will expand anyway though.) In any case,
> token-pasting happens prior to rescanning the replacement list, so the
> concatenations happen first. Which...
> 2) ...is undefined behavior: token-pasting yields multiple tokens.
> Depending on how a particular preprocessor handles this, it might actually
> cause BOOST_STRINGIZE to expand. What you want is this:
> Fix: remove the concatenation operators. This will yield adjacent
> which will already get concatenated
Yes, I realised that after I had sent it. It was mostly a quick fix, to show
what was intended. I later simplified it to:
This is because I didn't need macro expansion of the arguments, before
stringizing, after all. However, I used BOOST_STRINGIZE in the posting, as
it might be useful in the general case.
>(and do you mean BOOST_PP_STRINGIZE?):
I wasn't aware of that BOOST_STRINGIZE isn't guaranteed to work. Perhaps
that should be fixed?
> #define BOOST_CHECK_EQUAL_CP(a, b) \
> BOOST_CHECKPOINT( \
> "BOOST_CHECK_EQUAL(" \
> BOOST_PP_STRINGIZE(a) \
> "," \
> BOOST_PP_STRINGIZE(b) \
> ")" \
> ); \
> BOOST_CHECK_EQUAL(a, b) \
Thanks for the fix.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk