Can anyone explain why my last output line is garbage?

#include <iostream>
#include <boost/range/algorithm/copy.hpp>
#include <boost/range/counting_range.hpp>
#include <boost/range/adaptor/reversed.hpp> 
#include <boost/range/adaptor/transformed.hpp> 
#include <boost/phoenix/bind/bind_function.hpp>
#include <boost/phoenix/core/argument.hpp>

int doubled( int i ) { return i * 2; }

template <typename Range> void print_it( const Range & range )
{
    boost::copy( range, std::ostream_iterator<int>( std::cout, " " ) );
    std::cout << std::endl;
}

int main( )
{
    using boost::adaptors::reversed;
    using boost::adaptors::transformed;
    using boost::counting_range;
    using boost::phoenix::arg_names::_1;

    print_it( counting_range( 1, 5 ) );
    print_it( counting_range( 1, 5 ) | reversed );

    print_it( counting_range( 1, 5 ) |            transformed( doubled ) );
    print_it( counting_range( 1, 5 ) | reversed | transformed( doubled ) );

    print_it( counting_range( 1, 5 ) |            transformed( bind( doubled, _1 ) ) );
    print_it( counting_range( 1, 5 ) | reversed | transformed( bind( doubled, _1 ) ) );
}

Output is

1 2 3 4 
4 3 2 1 
2 4 6 8 
8 6 4 2 
2 4 6 8 
-711713824 -711713824 -711713824 -711713824 

Compiling with gcc-4.9.1, Boost 1.56 on Fedora 20 64-bit.

Thx, Rob.