Gennaro Prota <[EMAIL PROTECTED]> writes: > On Fri, 06 Dec 2002 14:16:39 -0500, David Abrahams > <[EMAIL PROTECTED]> wrote: > >> >>I've just checked in boost/detail/workaround.hpp, which defines the >>BOOST_WORKAROUND macro. >> >>This macro can and should be used in place of explicit tests for >>particular compiler/library/platform versions. > > Just some thoughts: I like the idea of such a macro, though the form > > defined(symbol) && symbol test > > (or quasi-equivalent) is not the most general we may need for testing > versions. But I don't like the current implementation, for a couple of > reasons. Firstly, because it depends on a library header (cat.hpp). > Call me pedantic, but though that file actually doesn't use > workaround.hpp it could in the future, and even if that will never > happen it is still an "exception" to the fact that libraries might > depend on the workaround header, not vice versa. In fact, this would > probably solved by: > > // 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? > but, all in all, I would prefer a simple: > > #define BOOST_WORKAROUND(symbol, test) ((symbol != 0) && symbol test) > > Spartan as it may seem, it's only drawback is that, as you said, it > doesn't detect an explicit define to zero. But it is extremely honest > at showing that defect. The current implementation instead is much > more cheating, in that > > a) it "hides" its limitations about the range of possible values > (appending the digit 1 to a pp-number can of course result > in a too large number) > > 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). > > > I don't claim that you change the implementation, of course. Just that > you consider these facts, at least eliminating the dependency from > cat.hpp. They're good arguments. I'm not averse to changing the implementation to use your technique. If nobody objects to your idea while the dust settles on other issues, I will do it. -- 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