フェニックスコード[a()、b()]が与えられた場合、正しい動作はそれぞれa()、次にb()と呼ばれると思いますが、明らかにboost 1.47では2番目の関数のみが呼び出されます。以下のコードを参照してください。
struct employee_parser : qi::grammar<Iterator, employee(), ascii::space_type>
{
employee_parser() : employee_parser::base_type(start)
{
using qi::int_;
using qi::lit;
using qi::double_;
using qi::lexeme;
using ascii::char_;
using ascii::string;
using namespace qi::labels;
using boost::phoenix::ref;
using boost::phoenix::val;
quoted_string %= (lexeme['"' >> +(char_ - '"') >> '"' ]) ;
start %= (
lit("employee")
>> '{'
>> int_ >> ','
>> quoted_string [std::cout<<ref(text1)<<" \n",ref(text1) = _1] >> ','
>> quoted_string >> ','
>> double_
>> '}' )
;
}
qi::rule<Iterator, std::string(), ascii::space_type> quoted_string;
qi::rule<Iterator, employee(), ascii::space_type> start;
std::string text1;
};
なぜ最初の部分が呼び出されないのですか? それはバグであり、最新のブーストライブラリで修正されていますか?
std::cout<<ref(text1)<<" \n"