[..]
fooIndex.erase(b) involves hashing and equality comparison for Bar*'s,
which as you correctly point out does not throw. Once the element(s) to
be erased are identified, no further user-provided function
(getBarValue or any other) is invoked, and deletion will succeed. Briefly
put, fooIndex.erase(b) does not ever throw and does not ever call
getBarValue, if this is what you were after.


Precisely! Thanks,  nick