#define BOOST_SPIRIT_USE_PHOENIX_V3 #include #include #include #include int main() { namespace qi = boost::spirit::qi; namespace phx = boost::phoenix; using namespace boost::phoenix::arg_names; typedef char* Iter; //Doesn't compile qi::rule()> rule_a = (-qi::int_)[ phx::if_(qi::_1)[ phx::nothing ] //Uncomment next line and it compiles // , phx::nothing ] ; //Doesn't compile qi::rule >() > rule_b = (qi::int_ | qi::double_ | qi::eps)[ phx::if_(qi::_1)[ phx::nothing ] //Uncomment next line and it compiles // , phx::nothing ] ; //Compiles qi::rule >() > rule_c = (qi::int_ | qi::double_ | qi::eps)[ phx::if_(phx::val(true))[ phx::nothing ] ] ; //Compiles qi::rule()> rule_d = (-qi::int_)[ std::cout << qi::_1 ] ; //Compiles phx::if_(arg1)[ phx::nothing ] (boost::optional(5)); return 0; }