
Hughes, James wrote:
RemoveIf(Fred.begin(), Fred.end(), boost::bind(&map<string, shared_ptr<data>
::value_type::second::unique, _1) )
Still get same compile fault however.
It would be nice if this could work with a single bind, but unfortunately you need two: boost::bind( &shared_ptr<data>::unique, boost::bind( &map<string, shared_ptr<data> >::value_type::second, _1 ) ) There is an additional pitfall here; depending on the version of boost::bind and the compiler, the inner bind may return a shared_ptr by value, making the use_count at least 2. You should probably just fall back to the old-fashioned bool second_unique( map<string, shared_ptr<data> >::value_type & v ) { return v.second.unique(); } (I'm using a non-const reference as a parameter to guard against potential silent implicit conversions which could also increase the use_count.) Removing the unique entries sounds like purging a cache, maybe weak_ptr will work better in your map?