
I don't particularly love the class name.
An istream_iterator iterates over the elements of the stream. A directory_iterator iterates over the contents of a directory. A vector::iterator iterates over the elements of the vector.
A scanline_read_iterator iterates over the scanlines of an image.
One might reasonably expect a scanline_read_iterator to iterate over the elements of a scanline.
I choose that name since I can imagine several types of image iterators. Like a tile_read_iterator, multiple_scanline_read_iterator, etc.
I could be wrong and I don't really have a better name aside from maybe scanline_reader::iterator. (reader_t::iterator in your example code)
Reader class now has a typedef iterator_t. But still, what would I call the scanline_read_iterator class?
Also scanline_read_iterator.hpp is in the detail folder. If this class isn't meant for public consumption completely ignore my naming concerns.
Users are meant to include format specific header, like bmp_all.hpp, or tiff_write.hpp, or png_read.hpp. So, I put all the other headers in the detail folder even so some of them are not inside the detail namespace. Christian