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>
This commit is contained in:
parent
e29d578066
commit
0cbc91d65d
@ -172,6 +172,13 @@ public:
|
|||||||
template <typename Predicate>
|
template <typename Predicate>
|
||||||
qsizetype removeIf(Predicate pred);
|
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 begin, const_iterator end);
|
||||||
iterator erase(const_iterator pos) { return erase(pos, pos + 1); }
|
iterator erase(const_iterator pos) { return erase(pos, pos + 1); }
|
||||||
|
|
||||||
@ -400,7 +407,10 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
void resize(qsizetype sz, const T &v)
|
void resize(qsizetype sz, const T &v)
|
||||||
{ Base::resize_impl(Prealloc, this->array, sz, v); }
|
{ Base::resize_impl(Prealloc, this->array, sz, v); }
|
||||||
|
using Base::clear;
|
||||||
|
#ifdef Q_QDOC
|
||||||
inline void clear() { resize(0); }
|
inline void clear() { resize(0); }
|
||||||
|
#endif
|
||||||
void squeeze() { reallocate(size(), size()); }
|
void squeeze() { reallocate(size(), size()); }
|
||||||
|
|
||||||
using Base::capacity;
|
using Base::capacity;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user