
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