Opened 6 years ago
Last modified 5 years ago
#12208 new Bugs
Lexer does not work with boost::spirit::istream_iterator
Reported by: | Owned by: | Hartmut Kaiser | |
---|---|---|---|
Milestone: | To Be Determined | Component: | wave |
Version: | Boost 1.61.0 | Severity: | Problem |
Keywords: | Cc: |
Description
According to the documentation, any forward iterator should be usable for the input stream iterator. boost::spirit::istream_iterator is a forward iterator, yet I find boost::wave::lexing_exception is called when it is used instead of std::string_iterator. Further, the Changelog has this to say:
TODO (known issues): ...
- Fix the re2c lexer for iterators others then string::iterator (or more generally for iterators, which aren't random access iterators)
which implies that this is a known problem.
Either the documentation should indicate that a random access iterator is required (and this should be enforced with an iterator traits check), or the code should be fixed to only require a forward iterator.
Attachments (1)
Change History (3)
by , 6 years ago
Attachment: | wave_testcase1.cpp added |
---|
comment:1 by , 5 years ago
So the issue is basically here. We take the address of the first element of the input and assume the rest is lined up in memory behind it. I'm looking at solutions - the most obvious is to make a copy, but Wave already makes one copy of the input and I'm not convinced even that should be necessary.
comment:2 by , 5 years ago
This issue was resolved by merging https://github.com/boostorg/wave/pull/21 and may be closed.
test case demonstrating a failure with forward iterator