|
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