$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?