summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-02-10 14:25:20 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-15 19:49:48 +0000
commit8bb9290b72b379c9af6ae99b9f9b66235fd99675 (patch)
treedf381da8aceb74dbdb75dbf8dcbd3a71a65c0ef2
parent16d67bcb3dba5bdd6facb0e4334ebed897363938 (diff)
downloadqtbase-8bb9290b72b379c9af6ae99b9f9b66235fd99675.tar.gz
QVarLengthArray: clear() is not resize(0)
The latter needs the value_type to be default-constructible, which shouldn't be required to clear() a container. Use std::destroy_n() instead. [ChangeLog][QtCore][QVarLengthArray] clear() no longer requires the value_type to be default-constructible. Change-Id: I806de8f3826b50c0bd38156892c3afeb15f13ac9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit fbfee2d7c59a7c6cd17ae7a3f63f983b9f3316f5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/corelib/tools/qvarlengtharray.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index bd38e2dcc1..9fa8990dbb 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -172,6 +172,13 @@ public:
template <typename Predicate>
qsizetype removeIf(Predicate pred);
+ void clear()
+ {
+ if constexpr (QTypeInfo<T>::isComplex)
+ std::destroy_n(data(), size());
+ s = 0;
+ }
+
iterator erase(const_iterator begin, const_iterator end);
iterator erase(const_iterator pos) { return erase(pos, pos + 1); }
@@ -400,7 +407,10 @@ public:
#endif
void resize(qsizetype sz, const T &v)
{ Base::resize_impl(Prealloc, this->array, sz, v); }
+ using Base::clear;
+#ifdef Q_QDOC
inline void clear() { resize(0); }
+#endif
void squeeze() { reallocate(size(), size()); }
using Base::capacity;