From 737c0a3717a5a52037fe18d664a93d5f6f52a1bc Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 26 Feb 2012 21:51:17 +0100 Subject: [PATCH] QVector: fix initializer_list constructor implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old implementation didn't compile. Change-Id: I9892e1fff11b3a03607c468c9091eebea7e62584 Reviewed-by: Olivier Goffart Reviewed-by: João Abecasis --- src/corelib/tools/qvector.h | 14 +++++++++++--- 1 file 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::QVector(std::initializer_list 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::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::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