std::unordered_set::erase() には 3 つのオーバーロードがあります: 参照を取得するものでは、「無効な」値、つまりセットに存在しない値を渡すと、単純に erase() が 0 を返します。他の2つの過負荷?
C++ 11 標準は、この場合に erase() が何をすべきかを述べていますか、それともコンパイラに依存していますか? end() または未定義の動作を返すことになっていますか?
仕様、cppreference.com、cplusplus.com で答えが見つかりませんでした。IBM のサイトでは、操作後に要素が残っていない場合は end() を返すと書かれていますが、イテレータが無効なために操作自体が失敗した場合はどうなりますか?
そして、一般に、STL コンテナーの erase() メソッドは、これらの場合に未定義の動作をするだけですか? (そのため、erase() に何かを渡す前にイテレータをチェックするか、失敗した場合は単純に 0 を返す value_type 参照を取る unordered_set::erase() オーバーロードを使用する必要があります)