summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/debug
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-11-11 20:23:48 +0000
committerJonathan Wakely <jwakely@redhat.com>2021-11-11 21:55:11 +0000
commit4a407d358e2896a9ab42364c0b70dfb6f9761d61 (patch)
tree748e408e922a7f5fea61a3d33a869e01efab719f /libstdc++-v3/include/debug
parent53b3edceab96de49034fa8cea79f3b365c63f3e5 (diff)
libstdc++: Fix debug containers for C++98 mode
Since r12-5072 made _Safe_container::operator=(const _Safe_container&) protected, the debug containers no longer compile in C++98 mode. They have user-provided copy assignment operators in C++98 mode, and they assign each base class in turn. The 'this->_M_safe() = __x' expressions fail, because calling a protected member function is only allowed via 'this'. They could be fixed by using this->_Safe::operator=(__x) but a simpler solution is to just remove the user-provided assignment operators and let the compiler define them (as we do for C++11 and later, by defining them as defaulted). The only change needed for that to work is to define the _Safe_vector copy assignment operator in C++98 mode, so that the implicit __gnu_debug::vector::operator= definition will call it, instead of needing to call _M_update_guaranteed_capacity() manually. libstdc++-v3/ChangeLog: * include/debug/deque (deque::operator=(const deque&)): Remove definition. * include/debug/list (list::operator=(const list&)): Likewise. * include/debug/map.h (map::operator=(const map&)): Likewise. * include/debug/multimap.h (multimap::operator=(const multimap&)): Likewise. * include/debug/multiset.h (multiset::operator=(const multiset&)): Likewise. * include/debug/set.h (set::operator=(const set&)): Likewise. * include/debug/string (basic_string::operator=(const basic_string&)): Likewise. * include/debug/vector (vector::operator=(const vector&)): Likewise. (_Safe_vector::operator=(const _Safe_vector&)): Define for C++98 as well.
Diffstat (limited to 'libstdc++-v3/include/debug')
-rw-r--r--libstdc++-v3/include/debug/deque10
-rw-r--r--libstdc++-v3/include/debug/list10
-rw-r--r--libstdc++-v3/include/debug/map.h10
-rw-r--r--libstdc++-v3/include/debug/multimap.h10
-rw-r--r--libstdc++-v3/include/debug/multiset.h10
-rw-r--r--libstdc++-v3/include/debug/set.h10
-rw-r--r--libstdc++-v3/include/debug/string10
-rw-r--r--libstdc++-v3/include/debug/vector23
8 files changed, 14 insertions, 79 deletions
diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index 8e4811149d2..52778ba1617 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -156,15 +156,7 @@ namespace __debug
deque(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- deque&
- operator=(const deque& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
deque&
operator=(const deque&) = default;
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index de30edb19c2..f40ebc8521e 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -161,15 +161,7 @@ namespace __debug
list(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- list&
- operator=(const list& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
list&
operator=(const list&) = default;
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 9e142cf7023..3883c546871 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -152,15 +152,7 @@ namespace __debug
__gnu_debug::__base(__last),
__comp, __a) { }
-#if __cplusplus < 201103L
- map&
- operator=(const map& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
map&
operator=(const map&) = default;
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index a05b8a8493e..073c1c39240 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -152,15 +152,7 @@ namespace __debug
multimap(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- multimap&
- operator=(const multimap& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
multimap&
operator=(const multimap&) = default;
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index a312ccf6f50..479411d9d06 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -152,15 +152,7 @@ namespace __debug
multiset(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- multiset&
- operator=(const multiset& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
multiset&
operator=(const multiset&) = default;
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index 01da942eb78..e35e5c1faae 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -150,15 +150,7 @@ namespace __debug
set(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- set&
- operator=(const set& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
set&
operator=(const set&) = default;
diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string
index a8389528001..2209f88fd54 100644
--- a/libstdc++-v3/include/debug/string
+++ b/libstdc++-v3/include/debug/string
@@ -201,15 +201,7 @@ namespace __gnu_debug
__glibcxx_check_valid_constructor_range(__begin, __end)),
__gnu_debug::__base(__end), __a) { }
-#if __cplusplus < 201103L
- basic_string&
- operator=(const basic_string& __str)
- {
- this->_M_safe() = __str;
- _M_base() = __str;
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
basic_string&
operator=(const basic_string&) = default;
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index 03fd9405cc9..b532a168e0e 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -71,18 +71,18 @@ namespace __gnu_debug
: _M_guaranteed_capacity(__n)
{ }
-#if __cplusplus >= 201103L
- _Safe_vector(_Safe_vector&& __x) noexcept
- : _Safe_vector()
- { __x._M_guaranteed_capacity = 0; }
-
_Safe_vector&
- operator=(const _Safe_vector&) noexcept
+ operator=(const _Safe_vector&) _GLIBCXX_NOEXCEPT
{
_M_update_guaranteed_capacity();
return *this;
}
+#if __cplusplus >= 201103L
+ _Safe_vector(_Safe_vector&& __x) noexcept
+ : _Safe_vector()
+ { __x._M_guaranteed_capacity = 0; }
+
_Safe_vector&
operator=(_Safe_vector&& __x) noexcept
{
@@ -234,16 +234,7 @@ namespace __debug
vector(_Base_ref __x)
: _Base(__x._M_ref) { }
-#if __cplusplus < 201103L
- vector&
- operator=(const vector& __x)
- {
- this->_M_safe() = __x;
- _M_base() = __x;
- this->_M_update_guaranteed_capacity();
- return *this;
- }
-#else
+#if __cplusplus >= 201103L
vector&
operator=(const vector&) = default;