Questo può essere molto ovvio, ma perché l'analisi basata sul flusso in boost duplica l'ultima lettera? Devo fare qualcosa di sbagliato:Boost Spirit Qi - Duplica ultima lettera con parsing basato sul flusso
#include <iostream>
#include <sstream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main() {
std::string input = "hello";
std::stringstream ss(input);
std::string r1, r2;
boost::spirit::istream_iterator first(ss), last;
qi::phrase_parse(input.begin(), input.end(), qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r1);
std::cout << r1 << std::endl; // prints "hello"
qi::phrase_parse(first, last, qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r2);
std::cout << r2 << std::endl; // prints "helloo"
}
Testato con XCode 5.0 e Boost 1.54.0.
Modifica: Il problema sembra essere specifico per libC++. Qualcuno che usa Clang per confermare?
Il tuo codice stampa due volte "ciao" sul mio sistema. Mingw, gcc 4.8.1, boost 1.54.0 –
Grazie per il test. Proverò un paio di altre configurazioni ... – kloffy
Ok, dipende se scelgo libC++ (output errato) o libstdC++ (output corretto). Questo è strano ... – kloffy