On Fri, 24 Jan 2003 11:53:15 -0500, David Abrahams
<[EMAIL PROTECTED]> wrote:

>Here are three ways to spell it:
>
> 1...
>
> 2    #if BOOST_WORKAROUND(
>          __BORLANDC__, BOOST_TESTED_AT(0x561) && __BORLANDC__ >= 0x561)
> 3...

Though it works in some cases, I would generally advise against
combining BOOST_TESTED_AT with other tests in the same
BOOST_WORKAROUND invocation. The problem is that the current
implementation is parenthesis "unguarded". For instance (when
BOOST_DETECT_OUTDATED_WORKAROUNDS is defined) the above yields the
following

   symbol test part:

   (__BORLANDC__ > 0x561) ?(-1): ( 1 && __BORLANDC__ >= 0x561)


As you can see the second condition is and-ed with 1, not with
BOOST_TESTED_AT altogether. That's not a problem in this specific case
but, IMHO, it's better not to run any risk.


P.S.: The parentheses around 1 && __BORLANDC__ >= 0x561 above come
from the BOOST_OPEN_PAREN hack (see implementation) but they are not
the cause of the problem. Without them you would have

   (__BORLANDC__ > 0x561 ?(-1): 1 && __BORLANDC__ >= 0x561)

which has the same binding, because of operator precedence.


Genny.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to