Boost 1.34 のスキップパーサー
昨日のBoost 1.34で上手くパースできない問題ですが、CVSの履歴を二分探索で追ったところ、2005/10/18の変更が影響していました。
http://boost.cvs.sourceforge.net/boost/boost/boost/spirit/core/scanner/impl/skipper.ipp?r1=1.8&r2=1.9
Boost 1.33.1までは、最後のフレーズの後にもスキップパーサーが呼ばれていました。
// Boost 1.34でもOK assert(parse("1 2 3", *int_p, space_p).full); // Boost 1.33.1ではOK assert(parse("1 2 3 ", *int_p, space_p).full);
ところが、Boost 1.34では末尾の空白類が許されていないようです。
CVSのログでは「No Postskips」と書かれているので、仕様変更なのでしょう。
Boost 1.34で動かすには、末尾の空白類を手動で取り除けば、とりあえず上手くいきます。
// Boost 1.34でもOK parse("1 2 3 ", *int_p >> lexeme_d[!space_p], space_p);
う〜ん、不便ですね。