Для вызова std::for_each допустимо ли, чтобы оба итератора были конечным итератором? Например,
std::for_each
std::vector<int> some_ints; std::for_each(ints.end(), ints.end(), [&](int i) { std::cout << i; });
Да, это совершенно законно и создает пустой диапазон.В результате ничего не происходит, но поведение четко определено.
Вот соответствующая цитата со справочной страницы SGI об итераторах и их использовании в качестве диапазонов ( Документация )
Большинство алгоритмов выражены не в терминаходин итератор, но с точки зрения диапазона итераторов;нотация [first, last) относится ко всем итераторам от первого до, но не включая, последнего.Обратите внимание, что диапазон может быть пустым, т.е. первый и последний могут быть одним и тем же итератором.