summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qvector.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-02-26 21:51:17 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-29 14:31:41 +0100
commit737c0a3717a5a52037fe18d664a93d5f6f52a1bc (patch)
treee4bc6bf634d76bdaa5825dba91b021bbafd5ad38 /src/corelib/tools/qvector.h
parent7919c0529ed5bdafd9a7dab82780ad1b1bf33178 (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.h14
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