summaryrefslogtreecommitdiff
path: root/boost/spirit/home/qi/stream/stream.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/spirit/home/qi/stream/stream.hpp')
-rw-r--r--boost/spirit/home/qi/stream/stream.hpp19
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>