#include #include #include #include #include #include #include #include typedef boost::wave::cpplexer::lex_token<> cpplexer_token_t; typedef boost::wave::cpplexer::lex_iterator cpplexer_iterator_t; int main() { std::string cppstr{"struct Foo {};"}; auto cbeg = cppstr.begin(); auto cend = cppstr.end(); using namespace boost::wave; // works cpplexer_iterator_t beg(cbeg, cend, cpplexer_token_t::position_type("fake.cpp"), language_support(support_cpp|support_cpp0x)); cpplexer_iterator_t end; for (auto tok = beg; tok != end; ++tok) { std::cout << tok->get_value(); } cbeg = cppstr.begin(); // does not work std::stringstream ss(cppstr); ss.unsetf(std::ios::skipws); boost::spirit::istream_iterator mpbeg(ss); boost::spirit::istream_iterator mpend; cpplexer_iterator_t beg2(mpbeg, mpend, cpplexer_token_t::position_type("fake.cpp"), language_support(support_cpp|support_cpp0x)); // throws boost::wave::lexing_exception for (auto tok = beg2; tok != end; ++tok) { std::cout << tok->get_value(); } } // manually instantiate necessary template template struct boost::wave::cpplexer::new_lexer_gen;