|
Boost : |
From: Pavel Vozenilek (pavel_vozenilek_at_[hidden])
Date: 2004-03-01 04:26:28
"Daryle Walker" <darylew_at_[hidden]> wrote
> You might want to use:
>
> #define BOOST_INDEXED_SET_CATCH(x) if(true) ; else
>
> instead. This way, any dangling "else" in the outside code doesn't get
> attached to your macro by mistake.
>
You found real problem in current macros! For example:
if (...)
BOOST_TRY {
...
} BOOST_CATCH(...) {
...
}
else {
...
}
would behave differently depending on
BOOST_NO_EXCEPTIONS.
Here are macros resistant to this problem:
#if !(defined BOOST_NO_EXCEPTIONS)
# define BOOST_TRY try
# define BOOST_CATCH(x) catch(x)
# define BOOST_RETHROW throw
#else
# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
# define BOOST_TRY if ("")
# else
# define BOOST_TRY if (1)
# endif
# define BOOST_CATCH(x) else
# define BOOST_RETHROW
#endif
/Pavel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk