diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2012-02-26 21:51:17 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-29 14:31:41 +0100 |
commit | 737c0a3717a5a52037fe18d664a93d5f6f52a1bc (patch) | |
tree | e4bc6bf634d76bdaa5825dba91b021bbafd5ad38 /src/corelib/tools/qvector.h | |
parent | 7919c0529ed5bdafd9a7dab82780ad1b1bf33178 (diff) |
QVector: fix initializer_list constructor implementation
The old implementation didn't compile.
Change-Id: I9892e1fff11b3a03607c468c9091eebea7e62584
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Diffstat (limited to 'src/corelib/tools/qvector.h')
-rw-r--r-- | src/corelib/tools/qvector.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 8c686a2547..c119ef43ae 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -452,9 +452,17 @@ QVector<T>::QVector(std::initializer_list<T> args) d->alloc = uint(d->size); d->capacityReserved = false; d->offset = offsetOfTypedData(); - T* i = d->end(); - auto it = args.end(); - while (i != d->begin()) + if (QTypeInfo<T>::isComplex) { + T* b = d->begin(); + T* i = d->end(); + const T* s = args.end(); + while (i != b) + new(--i) T(*--s); + } else { + // std::initializer_list<T>::iterator is guaranteed to be + // const T* ([support.initlist]/1), so can be memcpy'ed away from: + ::memcpy(d->begin(), args.begin(), args.size() * sizeof(T)); + } } #endif |