Boost logo

Boost Users :

From: Chris Fairles (chris.fairles_at_[hidden])
Date: 2008-06-20 09:38:27


On Thu, Jun 19, 2008 at 6:35 AM, Daniel James <daniel_james_at_[hidden]> wrote:
> 2008/6/18 Chris Fairles <chris.fairles_at_[hidden]>:
>>
>> I'm wrong. It's correctly erroring because:
>> #elif 0 && () == 1
>> isn't a valid constant expression.
>
> If BOOST_PP_ITERATION_DEPTH was not defined that would probably be:
>
> #elif 0 && BOOST_PP_ITERATION_DEPTH() == N
>
> Which I think still isn't valid.
>
> The basic structure of boost/mpl/aux_/advance_backward.hpp is something like:
>
> #if !defined(BOOST_PP_IS_ITERATING)
> // ...
> #elif BOOST_PP_ITERATION_DEPTH() == 1
> // ...
> #elif BOOST_PP_ITERATION_DEPTH() == 2
> // ...
> #endif
>
> If I understand you correctly, gcc 4.4 has started evaluating the
> '#elif' arguments even when a previous '#if' or '#elif' argument was
> true. I have no idea if gcc 4.4 is correct....
>
> Your patch changes this to:
>
> #if !defined(BOOST_PP_IS_ITERATING)
> // ...
> #elif defined(BOOST_PP_ITERATION_DEPTH)
> # if BOOST_PP_ITERATION_DEPTH() == 1
> // ...
> # endif
> #elif defined(BOOST_PP_ITERATION_DEPTH)
> # if BOOST_PP_ITERATION_DEPTH() == 2
> // ...
> # endif
> #endif
>
> Which is wrong because the check 'BOOST_PP_ITERATION_DEPTH() == 2' can
> never be reached. A solution might be something like:
>
> #if !defined(BOOST_PP_IS_ITERATING)
> // ...
> #else
> # if BOOST_PP_ITERATION_DEPTH() == 1
> // ...
> # elif BOOST_PP_ITERATION_DEPTH() == 2
> // ...
> # endif
> #endif
>
> Anyway, I doubt the relevant developers will see this. The best way to
> get their attention would probably be to create a ticket:
>
> http://svn.boost.org/trac/boost/newticket?component=mpl
>
> Daniel
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

Ha. Classic case of "It compiles? Ship it!" Good catch, your solution
is indeed what I intended. Will fix and submit ticket.

Cheers,
Chris


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net