28

これは非常に明白かもしれませんが、ブーストのストリームベースの解析で最後の文字が複製されるのはなぜですか? 私は何か間違ったことをしているに違いありません:

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

XCode 5.0 および Boost 1.54.0 でテスト済み。

編集: この問題は libc++ に固有のようです。確認するためにClangケアを使用している人はいますか?

4

1 に答える 1

1

私の理解が正しければ、バックトラッキングで問題が発生する可能性があるため、入力 iterators を使用しないでください。たぶん、これが時々まったく機能するのは、まったくの運/実装の違いです。

于 2015-03-18T12:23:29.950 に答える