This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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] |
On 11/09/17 07:44 +0200, Daniel Krügler wrote:
2017-09-11 7:12 GMT+02:00 François Dumont <frs.dumont@gmail.com>:When user declare a container iterator like that: std::forward_list<int>::iterator it; There is no reason to initialize it with a null node pointer. It is just an uninitialized iterator which is invalid to use except to initialize it.While that is correct, for every forward iterator (and std::forward_list<int>::iterator meets these requirements), it is also required that a value-initialized iterator can be compared against other initialized iterators, so this reduces the amount of freedom to define a default constructor for such iterators even when used to default-initialize. This is not meant as a showstopper argument, since I have not fully understood of what you are planning, but just a reminder.
Right, which means that
std::forward_list<int>::iterator it = {}; must initialize the node pointer to nullptr. If we remove the initialization of _Fwd_list_iterator<T>::_M_node from the default constructor then it would be left uninitialized. But I'm confused, François was talking about removing the initialization of _Fwd_list_node_base::_M_next, what has that got to do with forward_list<T>::iterator? Thee is no node-base in the iterator. So I'm still wondering why the initialization of _M_next should be removed.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |