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@…