id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 3999,multi_pass cannot deal with all input iterators,Sebastian Redl,Hartmut Kaiser,"multi_pass has trouble with various input iterators. First, Microsoft's istreambuf_iterator, because it doesn't implement DR445, reports its reference as Char&, but its operator* returns Char. This causes compilation errors all over the place. Second, a standards-conformant istreambuf_iterator post-DR445 (i.e. C++0x) has both operator* return type and reference as Char. This compiles but is unsafe because InputPolicy::get_value is specified to return a const Value&, and this reference binds to the temporary returned by operator*. InputPolicy::get_value should return MultiPass::reference. This would also make the Value template parameter to this function superfluous. Doing this change allows Spirit to compile with my own istreambuf_iterator replacement. I have no idea what to do about Microsoft's istreambuf_iterator, though. A workaround for that problem would be nice, since using istreambuf_iterator is far preferable over using istream_iterator, since the latter is subject to the skipws flag and thus easily leads to hard-to-find bugs. (By the way, the documentation should prominently mention the danger of skipws.)",Bugs,closed,Boost 1.43.0,spirit,Boost 1.42.0,Problem,fixed,,