Хотя ваша подпись для operator==
выглядит нормально, перегрузить ее для class_type
недостаточно, поскольку boost::any
волшебным образом не использует ее. Однако для удаления элементов вы можете передать предикат remove_if
, например ::
template<class T>
bool test_any(const boost::any& a, const T& to_test) {
const T* t = boost::any_cast<T>(&a);
return t && (*t == to_test);
}
std::list<boost::any> l = ...;
class_type to_test = ...;
l.remove_if(boost::bind(&test_any<class_type>, _1, to_test));