id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 4853,Actor is never assignable regardless of the template parameter,Neil Groves,Hartmut Kaiser,"On November 3, a user reported an issue using multiple Boost.Range adaptors upon a sequence. He produced code similar to this: struct Foo { Foo(const std::string& name, int value) : name_(name), value_(value) { } std::string name_; int value_; }; typedef boost::shared_ptr FooPtr; int range_test_complex() { typedef std::vector V; V source; source += boost::make_shared(""Foo"", 10), boost::make_shared(""Bar"", 20), boost::make_shared(""Baz"", 30), boost::make_shared(""Baz"", 30) // duplicate is here ; std::vector result1; std::vector result2; using namespace boost::adaptors; using phx::arg_names::arg1; boost::push_back(result1, source | transformed(phx::bind(&Foo::name_, *arg1)) | uniqued); // Fails boost::push_back(result2, source | transformed(phx::bind(&Foo::value_, *arg1)) | uniqued); // Fails return 0; } I investigated the issue and found that replacing the bind expressions solved the problem. The issue appears to have been introduced in revision 57503 by a change intended to remove a warning about being unable to generate the assignment operator. I confirmed with the user that by commenting out line 143 in boost/spirit/home/pheonix/core/actor.hpp that the code compiled and worked as expected. Hence I believe that revision 57503 had the unintended consequence of making the actors non-assignable when they should be assignable.",Bugs,closed,Boost 1.49.0,spirit,Boost Release Branch,Regression,fixed,actor assignable,