Decrementando um iterador final
Eu estava lendo hoje sobre como para contêineres que suportam iteração bidirecional, este trecho de código é válido:
Collection c(10, 10);
auto last = --c.end();
*last;
Isso me fez pensar: é necessário que, ao enviar um par de iteradores bidirecionais [beg, end] para um algoritmo no STL que --end seja definido? Em caso afirmativo, o resultado deve ser desreferenciável?
ou seja
void algo(T beg, T end){
//...
auto iter = --end;
//...
*iter;
}