bool operator() (Value const & left, WeakPtr <Value> const & right) const { return left == right.value(); }
bool operator() (WeakPtr <Value> const & left, Value const & right) const { return left.value() == right; }
template <class Value> std::size_t hash_value (WeakPtr <Value> const & p) { boost::hash <Value> hasher; return hasher (p.value()); }