
,
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)) ] 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> > > > {}; Regards, Mauro. On 22.03.2010 22:11, Andrew Durward wrote:
As a follow-up, the attached code seems to compile and yield the expected result.
andrew
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users