
On 10/5/2010 5:43 AM, Mauro Bianco wrote:
Hi all, It is probably already been discovered by everyone at this point, but the code proposed by Andrew does not to work properly to apply distributivity more than once in an expression [works for a*(b+c) but not for a*(b+c*(d+c)) ]
Funny, I never saw the original message. Perhaps it's stuck in a moderation queue or lost in the ether(net).
Here a modified version that seems to work recursively. How does it look?
,
struct distr : proto::or_< proto::when< proto::multiplies< proto::_, proto::plus< proto::_, proto::_ > >, proto::call<distr( // THIS IS TO RECURSE proto::_make_plus( proto::_make_multiplies( proto::_left, proto::_left( proto::_right ) ), proto::_make_multiplies( proto::_left, proto::_right( proto::_right ) ) ) ) > proto::otherwise<proto::nary_expr<proto::_, proto::vararg<distr> > > > {};
Yes, this looks reasonable. -- Eric Niebler BoostPro Computing http://www.boostpro.com