Это превратит цикл по недопустимому диапазону в безоперационный.
Вы, кажется, говорите, что operator<
всегда должен возвращать false
для двух произвольного доступаитераторы, которые не являются частью одного диапазона.Это единственный способ, которым указанный цикл был бы неработоспособен.
Стандарт не имеет смысла указывать это.Помните, что указатели являются итераторами с произвольным доступом.Подумайте о бремени реализации операций с указателями и общей путанице, которая возникает у читателей, если было определено, что следующий код выводит «два»:
int a[5];
int b[5]; // neither [a,b) nor [b,a) is a valid range
if ((a < b) || (b < a)) {
std::cout << "one\n";
} else {
std::cout << "two\n";
}
Вместо этого он остается неопределенным, чтобы люди выиграли 'Во-первых, напиши это.