Re: [Spirit Development] Bug in today's boost_trunk -- ambiguous operator >

"Hartmut Kaiser" <[email protected]> Thu, 23 Dec 2010 19:34:53 -0600
Newsgroups gmane.comp.parsers.spirit.devel
Message-ID <[email protected]>
> I have a fairly large program that compiled just fine on boost_trunk
> version 67416, but is now broken.  I traced to problem to an ambiguous
> operator overload that occurs when both qi.hpp and fusion/tuple.hpp are
> included.
> 
> The following code does not compile as of today, but should compile on
> version 67416.
> 
> #include <boost/fusion/tuple.hpp> //including this file caused ambiguity
> errors #include <boost/spirit/include/qi.hpp> #include <string>
> 
> int main()
> {
>   static const boost::spirit::qi::rule<std::string::const_iterator> a;
>   static const boost::spirit::qi::rule<std::string::const_iterator> b;
>   boost::spirit::qi::rule<std::string::const_iterator> rule = a > b; }
> 

Ohh, that looks serious! The ambiguity is caused by a proto/fusion overlap. 
A qi::rule is both, a proto expression and a fusion sequence (as all proto
expressions are proto sequences now). 

Proto's overload for operator>() is a valid choice for this, as is fusions
operator>().

I'm cc'ing Eric and Christopher, perhaps they have an idea how to proceed.

Regards Hartmut
---------------
http://boost-spirit.com




------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl