
On 1/18/2012 9:35 AM, Nathan Ridge wrote:
I'm attempting to adapt a third-party struct into a fusion sequence using BOOST_FUSION_ADAPT_ADT to get access to a nice operator<. Unfortunately compilation fails and I'm not sure if it's a bug or me using the library incorrectly. As best I can read the error message, it looks like the code is attempting to compare adt_attribute_proxy structs instead of the values represented by these. Below is some code that demonstrates the problem. Can anybody help me out?
You've bumped into a limitation of proxies. Fusion adapted ADTs do not have access to the actual L-values of the class members, but only through get and set. As such, it actually exposes proxy elements (adt_attribute_proxy) instead of the actual elements. The only thing you can do with these proxies is either to get the values or set the values:
Can't Fusion provide overloads for relational operators that compare adt_attribute_proxy objects by comparing their values?
Yes, that is a reasonable solution. I'd welcome a patch if anyone wants to add such operators. I'm a bit worried about the behavior of such operators, however. It needs to deduce the return types of the actual (non-proxy) overloads. It can be done, but is rather tricky without C++11. Regards, -- Joel de Guzman http://www.boostpro.com http://boost-spirit.com