P0646R1 Improving the Return Value of Erase-Like Algorithms I

Programming / Compilers / GCC - redi [138bc75d-0d04-0410-961f-82ee72b054a4] - 4 July 2018 20:15 EDT

In C++2a the remove, remove_if and unique members of std::list and std::forward_list have been changed to return the number of elements removed. This is an ABI change for the remove members and the non-template unique members, so an abi-tag is used to give those symbols new mangled names in C++2a mode. For the function templates the return type is part of the mangled name so no abi-tag is needed.

- include/bits/forward_list.h (__cpp_lib_list_remove_return_type): Define. (forward_list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value. (_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or empty, according to __cplusplus value. (forward_list::remove, forward_list::unique): Use typedef and macro to change return type and add abi-tag for C++2a. (forward_list::remove_if, forward_list::unique): Use typedef to change return type for C++2a.
- include/bits/forward_list.tcc (_GLIBCXX20_ONLY): Define macro. (forward_list::remove, forward_list::remove_if) (forward_list::unique): Return number of removed elements for C++2a.
- include/bits/list.tcc (_GLIBCXX20_ONLY): Define macro. (list::remove, list::unique, list::remove_if) (list::unique): Return number of removed elements for C++2a.
- include/bits/stl_list.h (__cpp_lib_list_remove_return_type): Define. (list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value. (_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or empty, according to __cplusplus value. (list::remove, list::unique): Use typedef and macro to change return type and add abi-tag for C++2a. (list::remove_if, list::unique): Use typedef to change return type for C++2a.
- include/std/version (__cpp_lib_list_remove_return_type): Define.
- testsuite/23_containers/forward_list/operations/ remove_cxx20_return.cc: New.
- testsuite/23_containers/forward_list/operations/ unique_cxx20_return.cc: New.

43c7ee54a2c P0646R1 Improving the Return Value of Erase-Like Algorithms I
libstdc++-v3/ChangeLog | 34 +++++++++++
libstdc++-v3/include/bits/forward_list.h | 26 +++++++--
libstdc++-v3/include/bits/forward_list.tcc | 44 +++++++++++----
libstdc++-v3/include/bits/list.tcc | 53 +++++++++++++----
libstdc++-v3/include/bits/stl_list.h | 24 ++++++--
libstdc++-v3/include/std/version | 1 +
.../forward_list/operations/remove_cxx20_return.cc | 66 ++++++++++++++++++++++
.../forward_list/operations/unique_cxx20_return.cc | 55 ++++++++++++++++++
.../list/operations/remove_cxx20_return.cc | 66 ++++++++++++++++++++++
.../list/operations/unique_cxx20_return.cc | 55 ++++++++++++++++++
10 files changed, 394 insertions(+), 30 deletions(-)

Upstream: gcc.gnu.org


  • Share