Сравнение двух пролетов, указывающих на тот же контейнер хорошо определен?C++

Программы на C++. Форум разработчиков
Anonymous
Сравнение двух пролетов, указывающих на тот же контейнер хорошо определен?

Сообщение Anonymous »

Является ли сравнение begin () и end () итераторы двух std :: span s, которые указывают на одну и ту же память, четко определенную?

Код: Выделить всё

#include 
#include 

int main() {
int arr[5]{1,2,3,4,5};
std::span s1{arr};
std::span s2{arr};
assert(s1.begin() == s2.begin());
assert(s1.end() == s2.end());
assert(s1.begin() + s1.size() == s2.end());
}
Все утверждения передают все реализации std :: span , но есть ли что -то, что я могу пропустить, что делает эту ошибку, например, Ub?

Код: Выделить всё

class some_class
{
public:
std::span vec_view() { return vec; }
private:
std::vector vec;
};

int main() {
some_class c;
std::for_each(c.vec_view().begin(), c.vec_view().end(), [](auto&){});
}
Это связано с C ++, позволяющим сравнивать между std :: span :: eterators, когда один промежуток является подпаном другого?, но этот вопрос не о STD :: subspan , и, кроме того>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ll-defined

Вернуться в «C++»