c++ boost boost-spirit libc++

c++ - Boost Spirit Qi-Última letra duplicada con análisis basado en flujo



boost-spirit libc++ (1)

Si entendí correctamente, no se supone que uses iteradores de entrada , porque pueden dar problemas con el rastreo. Quizás es pura suerte / una diferencia en la implementación que a veces funciona.

Esto puede ser muy obvio, pero ¿por qué el análisis basado en flujo duplica la última letra? Debo estar haciendo algo mal:

#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" }

Probado con XCode 5.0 y Boost 1.54.0.

Editar: el problema parece ser específico de libc ++. ¿Alguien usando Clang care para confirmar?