$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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?