Hey Lucas,
Rehashing isn’t sufficient, because you will still end up with a broken container. Multiple keys of the same (stale) value will not (cannot) be coalesced into a single key. Exposing Rehash() will likely just give users the wrong idea about how to handle stale weak keys. Whereas it makes sense to rehash after subobject instancing because the keys in that case are non-stale, unique pointer values.
Steve