[PATCH] libstdc++/92124 for associative containers
Jonathan Wakely
jwakely@redhat.com
Mon Jan 6 15:19:00 GMT 2020
On 03/01/20 22:04 +0100, François Dumont wrote:
>This is the patch to extend PR 92124 to the associative containers.
>
>As it is pretty simple I thought it could maybe go in now.
>
>I also think that the existing 92124 tests are not really testing what
>they should with the move assignment operators noexcept qualified, no
>?
>
> PR libstdc++/92124
> * include/bits/stl_tree.h
> (_Rb_tree<>::_M_move_assign(_Rb_tree&, false_type)): Replace
> std::move_if_noexcept by std::move.
> * testsuite/23_containers/deque/92124.cc
> (X::operator==(X&&)): Qualify noexcept(false).
> * testsuite/23_containers/forward_list/92124.cc: Likewise.
> * testsuite/23_containers/list/92124.cc: Likewise.
> * testsuite/23_containers/vector/92124.cc: Likewise.
> * testsuite/23_containers/map/92124.cc: New.
> * testsuite/23_containers/set/92124.cc: New.
>
>Tested under linux x86_64.
>
>François
>
>diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
>index 12ba3181dd9..9339011e872 100644
>--- a/libstdc++-v3/include/bits/stl_tree.h
>+++ b/libstdc++-v3/include/bits/stl_tree.h
>@@ -1695,7 +1695,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> [&__roan](const value_type& __cval)
> {
> auto& __val = const_cast<value_type&>(__cval);
>- return __roan(std::move_if_noexcept(__val));
>+ return __roan(std::move(__val));
This part is OK and so is the new test.
> };
> _M_root() = _M_copy(__x, __lbd);
> __x.clear();
>diff --git a/libstdc++-v3/testsuite/23_containers/deque/92124.cc b/libstdc++-v3/testsuite/23_containers/deque/92124.cc
>index 0bdfcb70dcf..ea16d415a49 100644
>--- a/libstdc++-v3/testsuite/23_containers/deque/92124.cc
>+++ b/libstdc++-v3/testsuite/23_containers/deque/92124.cc
>@@ -30,7 +30,7 @@ struct X {
> // Tracking calls to assignment functions
> X& operator=(const X&) { throw 1; }
>
>- X& operator=(X&&) noexcept(true) { return *this; }
>+ X& operator=(X&&) noexcept(false) { return *this; }
These changes don't seem to be needed. Is there a reason to change it?
More information about the Gcc-patches
mailing list