
Andrey Melnikov <melnikov@simplexsoft.com> writes:
What about
BOOST_WORKAROUND_BEFORE(GCC, 3,2,3) BOOST_WORKAROUND_AFTER(GCC, 3,2,3) BOOST_WORKAROUND_STARTING_FROM(GCC, 3,2,3)
and other plain English words instead of syntactic tricks with putting < signs as macro parameters? Is it going to be more verbose and cryptic than using macrost with < ?
Why do you call that a "syntactic trick?" The operator gets used in the macro expansion and ends up being used by the preprocessor with the obvious semantics. Just about every other token in BOOST_WORKAROUND(GCC, >, 3,2,3) is trickier than the ">". The desire to spell out comparison operations as english words seems akin to the desire to embed compiler/ide versions in macro names.
Here are real life examples from intrusive_ptr.hpp and mem_fn.hpp:
#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
How we are going to transform the latter?
#if !BOOST_WORKAROUND_BEFORE(MSVC, 8,0,0) && !BOOST_WORKAROUND_BEFORE(MWERKS, 9,0,1)
Ick. #if !BOOST_WORKAROUND(MSVC, <=, 7,0,0) && !BOOST_WORKAROUND(MWERKS, <, 9,0,0)
Can we get rid of these "!" signs?
!a && !b
looks too verbose to me.
You can always write: #if !(BOOST_WORKAROUND(MSVC, <=, 7,0,0) || BOOST_WORKAROUND(MWERKS, <, 9,0,0)) but it's not much better.
But of course
!BOOST_WORKAROUND(__MWERKS__, < 0x3200)
isn't equivalent to
BOOST_WORKAROUND(__MWERKS__, >= 0x3200)
The ! signs come from people having a desire to put the non-workaround code first, but that IMO is a misguided effort, since it begins to get nasty once you have more than one workaround: #if !BOOST_WORKAROUND( xxx ) && !BOOST_WORKAROUND( yyy ) && !BOOST_WORKAROUND( zzz ) .. #elif BOOST_WORKAROUND( xxx ) ... #elif BOOST_WORKAROUND( yyy ) ... #elif BOOST_WORKAROUND( zzz ) ... #endif It's so much simpler as: #if BOOST_WORKAROUND( xxx ) ... #elif BOOST_WORKAROUND( yyy ) ... #elif BOOST_WORKAROUND( zzz ) ... #else ... #endif -- Dave Abrahams Boost Consulting www.boost-consulting.com