Приоритет оператора в boost :: spirit?

Я сделал несколько тестов, используя образец духа mini_c. К сожалению, он не сохраняет приоритет оператора, как ожидалось:

int main() { return 3 > 10 || 3 > 1; } 

оценивается до 0.

 return (3 > 10) || (3 > 1); 

возвращает 1

Я попытался переместить определение «||» и “&&” до самого верха в конструкторе

 template  expression::expression( 

но это ничего не меняет. Как это можно исправить. Я использую boost 1.3.38.

Подтверждено, что это ошибка в примере mini_c, связанная с приоритетом оператора. Я сделал исправление для SVN, которое будет доступно в Boost V1.45. Вот что я изменил в файле заголовка mini_cb.hpp:

старый код:

 equality_expr = relational_expr >> *( ("==" > relational_expr [op(op_eq)]) | ("!=" > relational_expr [op(op_neq)]) ) ; relational_expr = logical_expr >> *( ("<=" > logical_expr [op(op_lte)]) | ('<' > logical_expr [op(op_lt)]) | (">=" > logical_expr [op(op_gte)]) | ('>' > logical_expr [op(op_gt)]) ) ; logical_expr = additive_expr >> *( ("&&" > additive_expr [op(op_and)]) | ("||" > additive_expr [op(op_or)]) ) ; 

новый код:

 equality_expr = logical_expr >> *( ("==" > logical_expr [op(op_eq)]) | ("!=" > logical_expr [op(op_neq)]) ) ; logical_expr = relational_expr >> *( ("&&" > relational_expr [op(op_and)]) | ("||" > relational_expr [op(op_or)]) ) ; relational_expr = additive_expr >> *( ("<=" > additive_expr [op(op_lte)]) | ('<' > additive_expr [op(op_lt)]) | (">=" > additive_expr [op(op_gte)]) | ('>' > additive_expr [op(op_gt)]) ) ;