Какое определенное поведение std::upper_bound для пустого конечного диапазона?

Я пытаюсь понять на С++, допускает ли стандарт допустимый вызов std::upper_bound с диапазоном, который является end() контейнера до его end()?

Другими словами, допустим ли пустой диапазон [end(), end())? Достижимо ли end() из самого себя? Остается ли ответ в С++ 98 таким же, как и в С++ 11?


person WilliamKF    schedule 25.12.2014    source источник
comment
если пустой диапазон не разрешен, то это дефект. поэтому этот вопрос включает в себя (1) поиск соответствующего языка и, если он не найден, (2) поиск отчетов о дефектах. вы сами это пробовали?   -  person Cheers and hth. - Alf    schedule 25.12.2014


Ответы (1)


[first, last)

Стандарт говорит, что [first, last) не является допустимым диапазоном, если первый находится позади последнего в диапазоне. Это делает [cont.end(), cont.end()] допустимым диапазоном. Однако для этих диапазонов алгоритмы бесполезны. Например: -

std::reverse(cont.end(), cont.end());

это просто отсутствие операции, а не неопределенное поведение.

person ravi    schedule 25.12.2014