On 12/8/2010 5:30 AM, Thomas Heller wrote: > Eric Niebler wrote: >> On 12/7/2010 2:37 PM, Thomas Heller wrote: >>> So, How to handle that correctly? >> >> Yup, that's a problem. I don't have an answer for you at the moment, >> sorry. > > I think i solved the problem. The testcase for this solution is attached. > Let me restate what I wanted to accomplish: <snip>
Thomas, A million thanks for following through. The holidays and my day job are taking their toll, and I just don't have the time to dig into this right now. It's on my radar, though. I'm glad you have a work-around, but it really shouldn't require such Herculean efforts to do this. There are 2 bugs in Proto: 1) Proto operator overloads are too fragile in the presence of subdomains. Your line (5) should just work. It seems like a problem that Proto is conflating grammars with subdomain relationships the way it is, but I really need to sit down and think it through. One possible solution is an implicit modification of the grammar used to check expressions when the children are in different domains. For instance, in the expression "A+B", the grammar used to check the expression currently is: common_domain<A, B>::type::proto_grammar. Instead, it should be: or_< typename common_domain<A, B>::type::proto_grammar , if_< is_subdomain_of< typename common_domain<A, B>::type , domain_of< _ > >() > > That is, any expression in a subdomain of the common domain is by definition a valid expression in the common domain. is_subdomain_of doesn't exist yet, but it's trivial to implement. However ... 2) Using domain_of<_> in proto::if_ doesn't work because grammar checking is currently done after stripping expressions of all their domain-specific wrappers. That loses information about what domain an expression is in. Fixing this requires some intensive surgery on how Proto does pattern matching, but I foresee no inherent obstacles. It'd be a big help if you could file these two bugs. -- Eric Niebler BoostPro Computing http://www.boostpro.com _______________________________________________ proto mailing list proto@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/proto