Gennaro Prota <[EMAIL PROTECTED]> writes: > On Sun, 08 Dec 2002 12:34:48 -0500, David Abrahams > <[EMAIL PROTECTED]> wrote: > > [snip] >>> // untested >>> #define BOOST_PSEUDO_IS_DEFINED(symbol) BOOST_JOIN(symbol, 1) >>> #define BOOST_WORKAROUND(symbol, test) \ >>> (BOOST_PSEUDO_IS_DEFINED(symbol) && symbol test) >> >>This will fail if "symbol1" is defined, won't it? > > Oops, due to the font used when reading mails from Yahoo, I thought > this was a typo for "symbol" :-s Yes, you are right. It wasn't > intended as a solution to > >>> b) "hides" possible problems in the (unlikely, granted) case that >>> X is undefined but X1 is and you write: >>> >>> BOOST_WORKAROUND(X, test) >>> >>> (the result "unexpectedly" depends on the expansion of X1).
Actually, I tested my solution for that problem and it was OK. That's the reason I was pasting that long BOOST_NUMERIC_DEFINED_SUFFIX symbol to it: the idea was that probably nobody defines the __SUNPRO_CCBOOST_NUMERIC_DEFINED_SUFFIX symbol, for example. Well, then I tested your solution and it was also OK on all the compilers I have on my machine: # include <boost/config.hpp> #define BOOST_PSEUDO_IS_DEFINED(symbol) BOOST_JOIN(symbol, 1) #define BOOST_WORKAROUND(symbol, test) \ (BOOST_PSEUDO_IS_DEFINED(symbol) && symbol test) # define SOME_COMPILER_MACRO1 0 # if BOOST_WORKAROUND(SOME_COMPILER_MACRO, > 0) # error whoops # endif # if !BOOST_WORKAROUND(SOME_COMPILER_MACRO1, == 0) # error whoops2 # endif int main() { return 0; } So now I guess I really don't understand the preprocessor. > just as an (untested) way to avoid the dependency on the preprocessor > library. It is exactly the same of the current implementation, except > that uses BOOST_JOIN instead of BOOST_PP_CAT. BOOST_PP_CAT has several workarounds for broken compilers, and I wanted to get it right first before worrying about that particular dependency. -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost