Boost logo

Boost Users :

Subject: Re: [Boost-users] [Proto] Recreating an expression
From: Eric Niebler (eric_at_[hidden])
Date: 2009-07-01 18:17:15


christophe henry wrote:
> Hi to all proto experts,
>
> I have a grammar whose only goal is to build a type:
> template <class Expr> struct ActionBuilder with an operator() which
> simply calls:
> proto::eval(Expr(),my_context);

You're trying to default-construct an object containing reference data
members. Yeah, that's not going to work.

> Unfortunately, I have an expression like:
> boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<const
> A&,const B&> >
> And the compiler is unhappy about finding no appropriate default
> constructor (I suppose because of the references).

proto::expr doesn't have any constructors at all. It's POD. But even if
it did, you're right about the references.

> deep_copy is probably not usable inside a grammar definition,

Sure it is, if you use _deep_copy (which is a typedef for
proto::functional::deep_copy, an ordinary callable function object).

> so is
> there an easy way of getting rid of the references (if they are really
> the problem) or do I have to go and get my MPL canon?
> I am really just interested in having the recreated expression use a new
> instance of A and B, not the original ones.

Hard to tell without more context, but I think _deep_copy is what you
want in your grammar.

HTH,

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

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