Hello,

In upgrading from boost 1.39 to 1.47 I changed my use of the Phoenix library (which was within Spirit) to the stand alone Phoenix library.  This caused my below code to stop working.

/**** Code Start ***/
static boost::char_separator<char> seperator(":");
boost::tokenizer< boost::char_separator<char> > tokens(s, seperator);  //s is a passed in std::string
std::vector<std::string> string_tokens;

namespace phx = boost::phoenix;
//This line fails to compile now.
std::for_each(tokens.begin(), tokens.end(), phx::bind(&std::vector<std::string>::push_back, &string_tokens, phx::arg_names::arg1));
/**** Code Stop ***/

This lead me to three questions.

1.  What changed about phoenix bind that caused this not to work any more?

2.  I tried using the lazy version of push_back to bypass the bind issue.  In the documentation there are not any examples of multiple algorithm and container methods calling each other to show how the arguments of one method is passed to another.

std::for_each(tokens.begin(), tokens.end(), phx::push_back(&string_tokens, phx::arg_names::arg1));

This compiles but nothing is placed into string_tokens.  So I'm assuming the argument from for_each isn't being passed to push_back.  What needs to changed in this method call?

3.  Can that entire line of question 2 be replaced with the lazy version of the method calls or does the outer most call need to be a non-lazy method?

phx::for_each(phx::arg_names::arg1, phx::push_back(phx::arg_names::arg2, phx::arg_names::arg3))(tokens, string_tokens, ???);

If the entire line can be a lazy version then how would I map for_each to push_back for arg3?

Any help for these three questions would really be appreciated.

Ryan