Consider the following code:
namespace qi = boost::spirit::qi;
typedef qi::rule<
std::string::const_iterator
> rule_type;
rule_type value_rule = +qi::char_ - ( '[' | qi::eoi );
std::string input( "Hello World" );
std::string value0, value1;
bool b0 = qi::parse( input.begin( ),
input.end( ),
value_rule,
value0 );
bool b1 = qi::parse( input.begin( ),
input.end( ),
+qi::char_ - ( '[' | qi::eoi ),
value1 );
Result:
b0 = true
b1 = true
value0 = ""
value1 = "Hello World"
I am confused why is the result different. What is the correct definition of the qi::rule type to get the same result ?
You forgot to make the rule declare its exposed attribute type:
Live On Coliru
Output