Can the last line, labelled NOT Ok, be made to work? I think the lambda does
not publish its result as a bind does, so I suspect it's hopeless. Any thoughts?

Thx, Rob.

#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/algorithm_ext/push_back.hpp>
#include <boost/bind.hpp>
#include <vector>
#include <algorithm>

struct S { int i; };

void f( std::vector<int> & out, std::vector<S> & in )
{
    using boost::adaptors::transformed;

    // Ok
    std::transform( in.begin( ), in.end( ), std::back_inserter( out ), bind( & S::i, _1 ) );

    // Ok
    boost::range::push_back( out, in | transformed( bind( & S::i, _1 ) ) );

    // Ok
    std::transform( in.begin( ), in.end( ), std::back_inserter( out ), []( S & s ) { return s.i; } );

    // NOT Ok
    boost::range::push_back( out, in | transformed( []( S & s ) { return s.i; } ) );
}