On 04/10/21 10:05 pm, François Dumont wrote:
On 02/10/21 10:24 pm, Jonathan Wakely wrote:
On Sat, 2 Oct 2021 at 18:27, François Dumont wrote:
I would like to propose this alternative approach.
In this patch I make __normal_iterator and random iterator
_Safe_iterator compatible for pointer_traits primary template.
Regarding pointer_traits I wonder if it shouldn't check for the
to_pointer method availability and use per default: return {
std::addressof(__e) }; otherwise. This way we wouldn't have to
provide a
pointer_to method on __normal_iterator.
But I would rather not have these members present in vector::iterator
and string::iterator, in case users accidentally start to rely on them
being present.
Making pointer_traits friends would help but I do not like it neither.
Another option would be to overload std::__to_address so it knows how
to get the address from __normal_iterator and _Safe_iterator.
.
I start thinking that rather than proposing not-useful and even
incorrect code in the case of the _Safe_iterator<> it might be a
better approach.
Even the rebind for __normal_iterator is a little strange because when
doing rebind on std::vector<int>::iterator for long it produces
__normal_iterator<long*, std::vector<int>>, quite inconsistent even if
useless.
But there's something that I'm missing, what is the relation between
__addressof and std::pointer_traits ? Is it that __builtin_addressof
is using it ?
Ignore this last question, I realized that we are talking about
__to_address, not __addressof.