According to the documentation the first argument to copy
is a range and the second is an iterator, so changing your invocation to:
boost::copy(input
| boost::adaptors::filtered(filter)
| boost::adaptors::transformed(transform)
| boost::adaptors::reversed,
std::back_inserter(output)
);
makes it compile fine with g++ 4.8.1 and boost 1.53.0.