id summary reporter owner description type status milestone component version severity resolution keywords cc 5825 constructing function_input_iterator without consuming an item Maximiliano Garrone ten Brink Dean Michael Berris "The only constructor for function_input_iterator always consumes an item from the generator. This makes it difficult to define a past-the-end iterator. The first example given in http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html calls rand() 11 times instead of the 10 expected. This can be a more serious problem when, for example, reading a file, as shown in the following program: {{{ #include #include #include #include #include static const std::string filename( ""test.txt"" ); struct generator { typedef int result_type; generator() : in( filename ) {} result_type operator() () { result_type ret; in >> ret; return ret; } std::ifstream in; }; int main(int argc, char * argv[]) { std::ofstream out( filename ); out << 0 << std::endl << 1 << std::endl << 2 << std::endl << 3 << std::endl; generator f; std::copy( boost::make_function_input_iterator(f, 0), boost::make_function_input_iterator(f, 3), std::ostream_iterator(std::cout, "" "") ); // ""1 2 3"" is shown on cout, instead of ""0 1 2"" return 0; } }}} A possible solution could be adding a different constructor to function_input_iterator specifically to represent a past-the-end iterator." Bugs closed To Be Determined iterator Boost 1.47.0 Showstopper fixed function_input_iterator past-the-end mikhailberis@…