This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] libstdc++/8780


I wrote:
> > The short answer is that, given
> >     std::vector<T>::iterator iter_T;
> > 
> > then
> >     &*iter_T
> > 
> > has type T* and points to the same object.  As the elements of a vector
> > must be contiguous, this works portably.

Martin writes:
> Unfortunately, it will not work for an iterator pointing at the end
> of a container.

You are of course correct that there are no guarantees that 
&*some_vector.end() will not produce a one-past-the-end pointer;
debugging implementations of vector<T>::iterator will very likely
throw an exception or abort.

Still, note that I said "has type T* and points to the same object":
in most cases, users that complain about this are trying to interface
data in a vector to a function that wants a pointer, and for them
the &*iter_T mechanism will do.

The most common case where I've needed to use the &* construction is to
pass data in a vector<T> to some function that wants a const T* and
perhaps a count.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]