Use C++11 direct init in __debug::forward_list

François Dumont frs.dumont@gmail.com
Thu Oct 11 20:46:00 GMT 2018


This patch makes extensive use of C++11 direct init in 
__debug::forward_list.

Doing so I also try to detect useless creation of safe iterators in 
debug implementation. In __debug::forward_list there are severals but I 
wonder if it is worth fixing those. Most of them are like this:

       void
       splice_after(const_iterator __pos, forward_list& __list)
       { splice_after(__pos, std::move(__list)); }

__pos is copied.

Do you think I shouldn't care, gcc will optimize it ?

I wonder if it would be ok in debug implementation to use this kind of 
signature:

void splice_after(const const_iterator& __pos, forward_list& __list)

Iterator taken as rvalue reference ?

I guess it is not Standard conformant so not correct but maybe I could 
add a private _M_splice_after with this signature.

     * include/debug/forward_list
     (forward_list<>::before_begin()): Use C++11 direct initialization.
     (forward_list<>::begin()): Likewise.
     (forward_list<>::end()): Likewise.
     (forward_list<>::cbefore_begin()): Likewise.
     (forward_list<>::cbegin()): Likewise.
     (forward_list<>::cend()): Likewise.
     (forward_list<>::emplace_after<>(const_iterator, _Args&&...)): 
Likewise.
     (forward_list<>::insert_after(const_iterator, const _Tp&)): Likewise.
     (forward_list<>::insert_after(const_iterator, _Tp&&)): Likewise.
     (forward_list<>::insert_after(const_iterator, size_type, const _Tp&)):
     Likewise.
     (forward_list<>::insert_after(const_iterator, initializer_list<>)):
     Likewise.
     (forward_list<>::erase_after(const_iterator)): Likewise.
     (forward_list<>::erase_after(const_iterator, const_iterator)): Likewise
     and ensure consistent iterator comparison.

Tested under Linux x86_64, Debug mode and committed.

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: fl_direct_init.patch
Type: text/x-patch
Size: 4196 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20181011/0b9785dc/attachment.bin>


More information about the Libstdc++ mailing list