I have a list of weak_ptrs that I'm using to keep track of objects. At a certain point, I would like to remove an item from the list given a shared_ptr or a weak_ptr.

#include <list>

int main()
{
typedef std::list< std::weak_ptr<int> > intList;

std::shared_ptr<int> sp(new int(5));
std::weak_ptr<int> wp(sp);

intList myList;
myList.push_back(sp);

//myList.remove(sp);
//myList.remove(wp);
}

However, when I uncomment the above lines, the program won't build:

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\list(1194): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::tr1::weak_ptr<_Ty>' (or there is no acceptable conversion)

How do I remove an item from the list given a shared_ptr or a weak_ptr?

Edit
Report