You might also want to consider phoenix::lambda, it is like protect, but slightly more powerful.
your example would then read:
#include <boost/phoenix.hpp>
int main( )
{
std::vector<int> v;
v += 0,1,2,3,4,5,6;
using boost::phoenix::bind;
using boost::phoenix::lambda;
using boost::phoenix::placeholders::_1;
using boost::phoenix::local_names::_1;
for_each( v.begin( ), v.end( ),
bind(g, lambda(_a = _1)[bind(f, _a)]));
Please don't remind me! I'd love to, but I'm stuck in the antediluvian days of 1.37!
- Rob.