Boost logo

Boost Users :

Subject: Re: [Boost-users] [phoenix][phoenix3][MPL] incompatibility between MPL and Phoenix3
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2010-11-28 07:12:28


alfC <alfredo.correa <at> gmail.com> writes:
> Hi,
>
> I decided to try Phoenix3. I looked up at a couple of examples and
> since I use Boost.Units (which depends on Boost.MPL) heavily I tried
> to mix both only to find out that there is an obscure incompatibility
> between MPL and Phoenix3. The way to show this is just to compile the
> phoenix3/.../function.cpp example
>
>
https://svn.boost.org/svn/boost/sandbox/SOC/2010/phoenix3/libs/phoenix/example/f
unction.cpp
>
> with the following added line:
>
> #include<boost/mpl/multiplies.hpp>
>
> I get this error message:
>
> In file included from function.cpp:12:
> /home/user/usr/include/boost/mpl/multiplies.hpp:38: error: wrong
> number of template arguments (7, should be 5)
> /home/user/usr/include/boost/mpl/aux_/preprocessed/gcc/times.hpp:68:
> error: provided for ‘template<class N1, class N2, class N3, class N4,
> class N5> struct boost::mpl::times’

Thanks for the report. I just commited a fix.
The problem is with some macro definitions inside phoenix/core/limits.hpp.
It is the macro documented here:
http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/limit-metafunction-
arity.html
However, this fix might introduce new problems, whenever the PHOENIX_LIMIT
constant is set too high. The problem lies deep within the use of the
preprocessor in some mpl internal code.
Further investigation is needed!

The problematic code can be tested with for example this code:

// This is needed to generate the mpl code.
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
// define to something which is not the default:
// (default is 5)
#define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 10

#include <boost/mpl/multiplies.hpp>
#include <boost/mpl/apply.hpp>

int main()
{
}

> The full code (almost identical to the example) follows -- Thank
> you, Alfredo

Regards,
   Thomas


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