Hughes, James wrote:
RemoveIf(Fred.begin(),
Fred.end(),
boost::bind(&map
::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::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::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?