Dekrementieren eines Off-the-End-Iterators

Ich habe heute gelesen, wie für Container, die bidirektionale Iteration unterstützen, dieser Code gültig ist:

Collection c(10, 10);
auto last = --c.end();
*last;

Das brachte mich zum Nachdenken. Ist es erforderlich, dass beim Senden eines Paares bidirektionaler Iteratoren [Beg, End] ein Algorithmus in der STL angegeben wird, für den --end definiert ist? Wenn ja, sollte das Ergebnis dereferenzierbar sein?

dh

void algo(T beg, T end){
    //...
    auto iter = --end;
    //...
    *iter;
} 

Antworten auf die Frage(4)

Ihre Antwort auf die Frage