
Hi It would be nice if operator== could be added to boost::any. A partial solution would be the following: template<typename ValueType> bool operator==(const ValueType & rhs) const { return content ? content->equal(any(rhs).content) : content == any(rhs).content; } bool operator==(const any &rhs) const { return content && rhs.content ? content->equal(rhs.content) : content == rhs.content; } equal is a pure virtual member of placeholder declared as: virtual bool equal(const placeholder *rhs) const = 0; and implemented as (in holder): virtual bool equal(const placeholder *rhs) const { return type() == rhs->type() && held == static_cast<const holder<ValueType>*>(rhs)->held; } However, this will break existing code when the holded object class does no have operator== defined. Kevlin Henney proposed: namespace equality { template<typename Type> bool operator==(const Type &lhs, const Type &rhs) { return &lhs == &rhs; } } virtual bool equal(const placeholder *rhs) const { using namespace equality; return type() == rhs->type() && held == static_cast<const holder<ValueType>*>(rhs)->held; } Thus providing a default operator== for everyone not having its own, which returns true if the object addresses are the same. This will prevent compiler errors when the operator== really needed to be there. What I think is needed is: 1. If operator== is not used there should be no need for holded classes to implement it. 2. If operator== is used, and the holded class does not define it, the code must not compile. Do you think this is possible to implement? Thanks in advance Jorge Lodos