--- David Abrahams <[EMAIL PROTECTED]> wrote:

> I'd much prefer:
>     BOOST_WORKAROUND(__SUNPRO_CC, BOOST_LATEST_VERSION(0x530))
> 
> Which I think is easily achievable, no?
> 
>     # define BOOST_WORKAROUND(symbol, test)  (symbol != 0) && (1 % ((symbol
> test) + 1))
>     # ifdef BOOST_DETECT_OUTDATED
>     #  define BOOST_LATEST_VERSION(value)  >value?-1:1
>     # else
>     #  define BOOST_LATEST_VERSION(value) != 0
>     # endif 
> 
>     int x = 0;
> 
>     # if BOOST_WORKAROUND(COMPILER_VERSION, < 20)
>     int y = 0;
>     # elif BOOST_WORKAROUND(COMPILER_VERSION, BOOST_LATEST_VERSION(20))
>     int z = 0;
>     # endif 
> 
> This seems to work for everything but metrowerks, which says:
> 
>     ### mwcc Compiler:
>     #    File: foo.cpp
>     # ----------------
>     #      16: ( 21 != 0) && (1 % (( 21  >20?-1:1) + 1))
>     #   Error: ^
>     #   expression syntax error
> 
> 
> :(
> 
> If anyone can come up with a workaround, I'd be psyched!

I'd much prefer... hey hey, I'm just joking!!! ;-) Seriously, I don't have
Metrowerks but have you tried adding "superflous" parentheses and/or putting 1
as first addendum? Usually parse errors (dis)appears easily that way.

For Borland (unless you are happy with a warning), you can try (variations on)
this idea:

// There seems to be no way to make Borland honor 5p5
// when evaluating the controlling expression of a #if,
// but it supports sizeof expressions therein.
//
#define BOOST_WORKAROUND(symbol, test)   \
            ((symbol != 0) &&            \
        (1 != sizeof(char[((symbol) test) == -1 ? 0 : 1 + ((symbol) test)])))


Please take no notice of the style, I'm a little in a hurry, and the purpose is
just to describe the idea.

Genny.


__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to