
On Thu, May 15, 2008 at 8:36 PM, Daniel Walker <daniel.j.walker@gmail.com> wrote:
Yes, so long as the copy constructor of the wrapped function object maintains internal_state.
If the copy c'tor copies the internal state then what's the difference between: function<float(float,float)> add_floats = plus(); add_floats.target<plus>()->internal_state = 7; function<int(int,int)> f0 = functional_cast<plus(int,int)>(add_floats); std::cout << f0.internal_state; // it's 7 ! And function<float(float,float)> add_floats = plus(); add_floats.target<plus>()->internal_state = 7; plus tmp( *add_floats.target<plus>() ); // copy c'tor here ! function<int(int,int)> f0 = tmp; std::cout << f0.target<plus>()->internal_state; // should be 7 the same I would say It seems that expression function<int(int,int)> f0 = functional_cast<plus(int,int)>(add_floats); is very similar to plus tmp( *add_floats.target<plus>() ); function<int(int,int)> f0 = tmp; Is this correct ? Thanks Marco