rule に対する operator| は短絡評価だよ

Boost.Spirit 使うたびにやらかす間違い.例えば以下のルールの定義では relational_operator は「絶対に "<=" や ">=" にマッチしない」.
もう何回この間違いやらかしたことか…….最初の頃はこれにハマって,かつ脱出するのにとんでもない時間を食いましたが,今は挙動がおかしいときにこの間違いを疑える(したがって間違いからの回復も一瞬で済む)ようにはなりました.ただし今でもこの間違い自体はやらかすのねん.ついこの間もこの間違いやらかして「もぉ〜,おにいちゃんこの間違い今までに3回はやらかしてるんだからいい加減学習してよねっ!!」と隣に居た妹に怒られました.おかしいよね.俺一人っ子なのに.

#include <iostream>
#include <boost/spirit/core.hpp>


int main()
{
  using namespace boost::spirit;

  rule<> integer
    = +digit_p
    ;
  rule<> relational_operator
    = ch_p( '<' )
    | ch_p( '>' )
    | str_p( "<=" )
    | str_p( ">=" )
    ;
  rule<> relational_expression
    = integer >> relational_operator >> integer
    ;

  if( parse( "1<2", relational_expression ).full ){
    std::cout << "`1<2' matches" << std::endl;
  }
  else{
    std::cout << "`1<2' does not match" << std::endl;
  }

  if( parse( "1<=2", relational_expression ).full ){
    std::cout << "`1<=2' matches" << std::endl;
  }
  else{
    std::cout << "`1<=2' does not match" << std::endl;
  }

  return EXIT_SUCCESS;
}