#include <boost/assert.hpp>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/phoenix/core.hpp>
#include <boost/phoenix/operator.hpp>

template <typename Iterator>
void test_forward_iterator(Iterator const& i)
{
    Iterator j = i;
    BOOST_ASSERT(*j == *i); // OK
    
    Iterator k;
    k = i;
    BOOST_ASSERT(*k == *i); // Oops!
}

int main(int argc, char* argv[])
{
    using boost::phoenix::arg_names::_1;
    
    int ar[3] = {};
    
    test_forward_iterator(boost::make_transform_iterator(ar, _1 + 5));
    
    return 0;
}
