Subject: Re: [boost] [fusion] Trouble using BOOST_FUSION_ADAPT_ADT with boost::fusion::operator<
From: Joel de Guzman (joel_at_[hidden])
Date: 2012-01-17 21:44:28
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
> 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.
-- Joel de Guzman http://www.boostpro.com http://boost-spirit.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk