From: Joel de G. <jo...@bo...> - 2010-01-30 00:48:01
|
On 1/30/2010 5:36 AM, Mat...@gm... wrote: > Hi, > > I get a compiler error for this code which appears to be correct: > [...] > I can see why the second works, but my (very limited) understanding of Spirit is that the first one should also work. > What's going on? It seems to be a precedence or grouping problem. Putting some of the code in parens fixes it: = name >> attr(DCurrentDepSource::Current) >> (qi::repeat(2)[node] > name >> attr(DCurrentDepSource::Gain) >> +eol); I think this is a major gotcha that should be documented. It has to do with flattening of the sequences. Your original code has this grouping: (a >> b) > (c >> d >> e) // > has a lower precendence than >> while the fix has this: a >> (b > (c >> d >> e)) It's very subtle and should be studied well and documented. Regards, -- Joel de Guzman http://www.boostpro.com http://spirit.sf.net http://www.facebook.com/djowel Meet me at BoostCon http://www.boostcon.com/home http://www.facebook.com/boostcon |