Есть некий итератор стандартного контейнера, а из него надо получить указатель на объект этого контейнера.
Многие советуют использовать конструкцию вида:
ptr = &*it;
но для past-the-end итератора такая конструкция не валидна.
Вроде бы для past-the-end итератора можно использовать конструкцию вида:
ptr = it.operator->();
но у меня возникли сомнения...
Поэтому вопросы следующие:
Есть ли гарантия, что it.operator->() вернёт именно указатель, а не некий тип его имитирующий?
Верно ли, что если it — это past-the-end итератор, то результат it.operator->() — это past-the-end указатель? Или это зависит от типа контейнера?
Верно ли, что для пустого контейнера x, следующий код — это UB:
bool bEmpty = std::begin(x).operator->() == std::end(x).operator->()
? Или же есть гарантия, что для такого случая значения указателей устанавливаются в NULL и всё ok?