On 10/9/2011 8:32 PM, Joel de Guzman wrote: > Hi, > > This code: > > #include <boost/spirit/include/qi.hpp> > > int main() > { > namespace qi = boost::spirit::qi; > > qi::rule<char const*> r; > r %= (+qi::char_); > > return 0; > } > > no longer works as expected. r %= (+qi::char_) becomes a no-op. > Before it calls either: > > template <typename Expr> > friend rule& operator%=(rule& r, Expr const& expr); > > // non-const version needed to suppress proto's %= kicking in > template <typename Expr> > friend rule& operator%=(rule& r, Expr& expr); > > Both defined in the rule class. > > Correct me if I'm wrong, but it seems the changes in proto forces > us to support rvalue refs, but we are not ready for that yet and > it's too late in the release cycle. > > Thoughts?
Bummer. I suggest adding an rvalue ref overload of operator%= that shares an implementation with the const lvalue one. Should just be a few lines of code. Is that a problem? As an alternative, you can use a domain/grammar to disable Proto's operator%= for Spirit rules. -- Eric Niebler BoostPro Computing http://www.boostpro.com _______________________________________________ proto mailing list proto@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/proto