This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: N3644 Comparing value-initialized iterators
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: François Dumont <frs dot dumont at gmail dot com>
- Cc: "libstdc++" <libstdc++ at gcc dot gnu dot org>
- Date: Mon, 25 Nov 2013 22:33:43 +0000
- Subject: Re: N3644 Comparing value-initialized iterators
- Authentication-results: sourceware.org; auth=none
- References: <CAH6eHdSVdfKnz72KK0a_-7xipcJ=F9e0iC2P=odKJm3_PhG+1A at mail dot gmail dot com> <528FC1D4 dot 1090605 at gmail dot com> <CAH6eHdQuD6LUf14CuncUfbW+DzqH1z+jGLKhX45SoTZkS8x9eQ at mail dot gmail dot com> <529265A0 dot 7080001 at gmail dot com> <CAH6eHdSx=V2JFHhedBe0b+2cvP45Mmw60_+x6oe_xW9oyusD-w at mail dot gmail dot com> <5293C294 dot 3010808 at gmail dot com>
On 25 November 2013 21:35, François Dumont wrote:
> Ok, N3644 is for C++14 ?
Yes.
> However there are already checks like:
>
> // _GLIBCXX_RESOLVE_LIB_DEFECTS
> // DR 408. Is vector<reverse_iterator<char*> > forbidden?
> _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
> || __x._M_current == _Iterator(),
> _M_message(__msg_copy_singular)
> ._M_iterator(*this, "this")
> ._M_iterator(__x, "other"));
>
> According comment it looks like it is especially targetting built-in
> types like pointers. But for other iterator types it looks like an undefined
> behavior, we might miss invalid usage because of it, no ?
The DR means it is OK to copy value-initialized iterators.
The check above relies on the fact we can compare value-initialized
iterators, which is not actually safe before C++14! (Although IIRC
part of the point of N3644 was that in practice comparing two
value-init'd ForwardIterators usually has well-defined semantics).
> By the way, N3644 is only for == and != operators or also for ordering
> ones like < ?
For any comparisons, but you can only compare value-initialized
iterators to other value-initialized iterators.
> I guess it is not for operator-, right ?
That's not a comparison :-)