Currently, there doesn't seem to be any way to look up a Value* in a map/set indexed by AssertingVH/PoisoningVH, without creating a value handle, which is fairly expensive, because it involves adding the value handle to the use list and immediately removing it again. Using find_as(Value *) does not work (and is in fact worse than just using find(Value *)), because it will end up creating multiple value handles during the lookup.
For AssertingVH, address this by simply using DenseMapInfo<T *> instead of manually implementing something. The AssertingVH<T> will now get coerced to T*, rather than the other way around.
For PoisoningVH, add extra overloads of getHashValue() and isEqual() that accept a T* argument.
This allows using find_as(Value *) to perform efficient lookups in assertion-enabled builds.
public can be omitted.
Reusing DenseMapInfo<T *> is clever and more efficient.