Boost logo

Proto :

Subject: Re: [proto] Hold terminals by "smart" reference
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2012-06-03 20:37:46


On 03/06/2012 18:36, Eric Niebler wrote:

>> Plus I don't have a good way to distinguish between a terminal of
>> shared_ptr<T> and a terminal of T which is held through a shared_ptr.
>
> Have you tried a grammar? Something like (untested) proto::terminal<
> boost::shared_ptr< proto::_> > ?

That would match expressions of the form (assuming I have binary plus in
my grammar)

shared_ptr<T> p1, p2.
p1 + p2;

This is exactly what I do not want. I don't want my grammar to be
cluttered by implementation details. It makes no sense semantically for
shared_ptr to be values, it's just a technique used for life time
management of specific values.

If I ever introduced shared_ptrs as values in my grammar, they might do
something entirely different.

To separate this more or less cleanly, I use a special tag for nullary
expressions where shared_ptr is just an implementation detail, but it's
still not really satisfying since the value doesn't have the right type
in the tree.


Proto list run by eric at boostpro.com