Boost logo

Boost :

Subject: Re: [boost] [GSoC][Phoenix3] Regarding mutability of arguments passed to phoenix expressions
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2010-04-30 02:11:37


On Wednesday 28 April 2010 19:43:43 Stewart, Robert wrote:
> Eric Niebler wrote:
> > On 4/28/2010 10:19 AM, Mathias Gaunard wrote:
> > > Thomas Heller wrote:
> > >> Regarding arguments to phoenix expressions there are two
> > >> possibilities.
> > >> The first is: Arguments are mutable. The current phoenix is
> > >> implemented to be able to this.
> >
> > We now have lambdas in C++0x. IMO, we should be paying
> > attention to the
> > default semantics of lambdas which, IIRC, accept their arguments by
> > value(?), and have special syntax for accepting their arguments by
> > reference. Someone should correct me if I got that backwards. In the
>
> The introducer uses & before names to get references. By value is the
> default.
>
> > long haul, I think this will satisfy the Principle of Least Surprise.

giving that pure functional phoenix stuff a little more thought.
Consider the following code (Reminder, this is just an example):

template< typename Container >
Container & push_back_impure( Container & c, typename Container::value_type
const & v )
{
   c.push_back( v );
   return c;
}

template< typename Container >
Container push_back_pure( Container c, typename Container::value_type const &
v )
{
   c.push_back( v );
   return c;
}

int main()
{
    std::vector<int> v;

    // this could be equivalent to a phoenix expression like
    // ( phoenix::push_back( phoenix::_1, 4 ) )( v );
    push_back_impure( v, 4 );

    // whereas this needs to be written as (to get the same effect):
    // v = ( phoenix::push_back( phoenix::_1, 5 ) )( v );
    // looks like a performance hog
    v = push_back_pure( v, 5 );
}

I think both versions have a some valid use cases. However I would like to
postpone that discussion until I have working version of the new phoenix.
Joel, could you elaborate why you implemented the current phoenix version as
it is?


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk