PR 57779 New debug check

Jonathan Wakely jwakely.gcc@gmail.com
Thu Jul 11 20:49:00 GMT 2013


On 11 July 2013 21:16, François Dumont wrote:
>     I am indeed dereferencing the end iterator but as long as it is just to
> get the address of the resulting element it is fine.

I don't think that's what the standard says.

C99 and later say that &*p is OK if p is a null pointer, but C++ does
not have the same rule, see e.g.
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 for an
open issue on this topic.  Even if that proposed resolution were to be
accepted (very unlikely, it's sat untouched for many years) what
you're doing is not the same, because you dereference an iterator
which returns a reference, and _then_ you take the address, so it's
equivalent to:

T& end() { T* p = 0; return *p; }
T* p = &end();

That forms an invalid reference before taking the address, so is not
the same as &*(T*)0, it's more like &(T&)*(T*)0 and I'm uncomfortable
with that.



More information about the Libstdc++ mailing list