
Arkadiy Vertleyb wrote:
"Paul Mensonides" <pmenso57@comcast.net> wrote
[...] which creates pathological input that IF cannot deal with: [...]
While we're at it: This code (taken from boost/typeof/vector.hpp, line 106) BOOST_PP_IF(n, BOOST_PP_EMPTY(), class T = void) seems to contain a similar (but more subtle) problem. Emptiness (well, deferred emptiness in this case, to be precise) is passed to BOOST_PP_IF as the second argument, and empty input (to the macros used by BOOST_PP_IF internally) results in undefined behaviour -- so it's up to the preprocessor whether things work correctly or not. For more details here's the thread where Paul explained this stuff to me: http://tinyurl.com/9s2kx For a quick fix, a more bullet-proof version could look like this BOOST_PP_IF(n,BOOST_PP_EMPTY,BOOST_PP_IDENTITY(class T = void))() or BOOST_PP_EXPR_IIF(BOOST_PP_NOT(n), class T = void) . Regards, Tobias