diff options
Diffstat (limited to 'boost/spirit/home/qi/stream/stream.hpp')
-rw-r--r-- | boost/spirit/home/qi/stream/stream.hpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/boost/spirit/home/qi/stream/stream.hpp b/boost/spirit/home/qi/stream/stream.hpp index 952f2f976d..83b417df64 100644 --- a/boost/spirit/home/qi/stream/stream.hpp +++ b/boost/spirit/home/qi/stream/stream.hpp @@ -58,23 +58,28 @@ namespace boost { namespace spirit { namespace qi , typename Skipper, typename Attribute> bool parse(Iterator& first, Iterator const& last , Context& /*context*/, Skipper const& skipper - , Attribute& attr) const + , Attribute& attr_) const { typedef qi::detail::iterator_source<Iterator> source_device; typedef boost::iostreams::stream<source_device> instream; qi::skip_over(first, last, skipper); - instream in(first, last); // copies 'first' - in >> attr; // use existing operator>>() + instream in(first, last); // copies 'first' + in >> attr_; // use existing operator>>() // advance the iterator if everything is ok - if (in.good()) { - std::streamsize pos = in.tellg(); - std::advance(first, pos); + if (in) { + if (!in.eof()) { + std::streamsize pos = in.tellg(); + std::advance(first, pos); + } else { + first = last; + } + return true; } - return in.good() || in.eof(); + return false; } template <typename Context> |