Каковы требования для сравнения равенства для входных итераторов, если один из итераторов признан недействительным?
input_iter x = foo();
input_iter y = x;
++x;
return x == y; // What must this return?
В приведенном выше примере разыменование y
очевидно, будет неопределенным, но результат сравнения равенства, как это определено? чтение cppreference.com, это определенно тот случай, когда два входных итератора должны сравнивать true
если они на самом деле одинаковы, так как входные итераторы должны удовлетворять EqualityComparable
, но на самом деле я не вижу ничего, что говорит о том, каким должен быть результат, если не тот же самый. Разрешено ли мне всегда вернуть true
от operator==
(кроме случаев сравнения с конечным итератором)?
«Каковы требования для сравнения равенства для входных итераторов, если один из итераторов признан недействительным?«
Там нет ни одного. квотирование ISO / IEC 14882: 2003 (E), [lib.input.iterators],
==
является отношением эквивалентности по своей области, (выделение добавлено)
bool(a==b) != bool(a!=b)
над областью==
(выделение добавлено)
А также,
любые копии предыдущего значения
r
[до++r
] больше нет
… в области==
,
Там нет требования, что ==
или же !=
иметь какое-то конкретное поведение в отношении недействительных входных итераторов.
Других решений пока нет …