
On 1 November 2010 12:15, Christopher Jefferson <chris@bubblescope.net> wrote:
A user recently posted on boost-users asking for operator== support in boost::any. I have added this support to my private version, which extends spirit's implementation of any. I am interested in cleaning this up and submitting it to replace boost::any, if everyone is happy with this.
It depends on what its semantics are. I can get the functionality that user posted by externally comparing the addresses of the boost::any objects, so it isn't very useful. Semantics that are, say: 1. Not equal of they are different types of objects. 2. Use they expression l == r if they are the same type of object. 3. Throw if l == r is ill-formed. Would be useful.
The major issue is that my implementation requires type support operator==, operator< , hash and operator<< / operator>>. Are there any techniques in boost for detecting the presence of these operators which are sufficiently reliable they could be used in boost::any?
As part of my BoostCon '10 talk on Type Erasure, I implemented the stream insertion operator for boost::any (as an example, not a proposal). Slides are at <http://www.filetolink.com/850e7c00>. My is_ostreamable type trait is based on the implementation of is_incrementable found in boost/detail/is_incrementable.hpp. (If you want me to send it to you contact me off-list.) What I'd like to see is more of these type traits: is_ostreamable, is_equality_comparable, etc. I'm willing to contribute the first one. :-) -- Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404