[gcc r12-2824] libstdc++: [_GLIBCXX_DEBUG] Avoid allocator operator== when always equal
Franथईois Dumont
fdumont@gcc.gnu.org
Mon Aug 9 18:49:15 GMT 2021
https://gcc.gnu.org/g:1354603bf7d2ef8cd0cb1f76e801732020502987
commit r12-2824-g1354603bf7d2ef8cd0cb1f76e801732020502987
Author: François Dumont <fdumont@gcc.gnu.org>
Date: Mon Aug 9 11:55:43 2021 +0200
libstdc++: [_GLIBCXX_DEBUG] Avoid allocator operator== when always equal
Use std::allocator_traits::is_always_equal to find out if we need to compare
allocator instances on safe container allocator aware move constructor.
libstdc++-v3/ChangeLog:
* include/debug/safe_container.h
(_Safe_container(_Safe_container&&, const _Alloc&, std::true_type)): New.
(_Safe_container(_Safe_container&&, const _Alloc&, std::false_type)): New.
(_Safe_container(_Safe_container&&, const _Alloc&)): Use latters.
Diff:
---
libstdc++-v3/include/debug/safe_container.h | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/libstdc++-v3/include/debug/safe_container.h b/libstdc++-v3/include/debug/safe_container.h
index d9636c29e9b..97c47167fe8 100644
--- a/libstdc++-v3/include/debug/safe_container.h
+++ b/libstdc++-v3/include/debug/safe_container.h
@@ -57,7 +57,12 @@ namespace __gnu_debug
_Safe_container(const _Safe_container&) = default;
_Safe_container(_Safe_container&&) = default;
- _Safe_container(_Safe_container&& __x, const _Alloc& __a)
+ private:
+ _Safe_container(_Safe_container&& __x, const _Alloc&, std::true_type)
+ : _Safe_container(std::move(__x))
+ { }
+
+ _Safe_container(_Safe_container&& __x, const _Alloc& __a, std::false_type)
: _Safe_container()
{
if (__x._M_cont().get_allocator() == __a)
@@ -65,6 +70,12 @@ namespace __gnu_debug
else
__x._M_invalidate_all();
}
+
+ protected:
+ _Safe_container(_Safe_container&& __x, const _Alloc& __a)
+ : _Safe_container(std::move(__x), __a,
+ typename std::allocator_traits<_Alloc>::is_always_equal{})
+ { }
#endif
public:
More information about the Libstdc++-cvs
mailing list