From 2af188c6d06af7dffbcb7b15f96fe7e188558624 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 16 Sep 2013 15:39:10 +0200 Subject: MetaType: Fix operator{++,--}(int) with the type-erased const_iterators. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar to commit 8b062418 (MetaType: Fix operator{+,-}(int) with the type-erased const_iterators., 2013-09-11), explicitly create a copy of the iterator and intialise it. Change-Id: I8b9edef40ca00c826f72768cba4a0992e55371f8 Reviewed-by: Jędrzej Nowacki Reviewed-by: Olivier Goffart --- src/corelib/kernel/qvariant.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/corelib/kernel/qvariant.h') diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 3115c6a50b..d9aaf0c1f5 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -610,9 +610,9 @@ public: inline bool operator==(const const_iterator &o) const { return m_impl.equal(o.m_impl); } inline bool operator!=(const const_iterator &o) const { return !m_impl.equal(o.m_impl); } inline const_iterator &operator++() { m_impl.advance(1); return *this; } - inline const_iterator operator++(int) { QtMetaTypePrivate::QSequentialIterableImpl impl = m_impl; m_impl.advance(1); return const_iterator(impl, this->ref); } + inline const_iterator operator++(int) { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); m_impl.advance(1); return const_iterator(impl, new QAtomicInt(0)); } inline const_iterator &operator--() { m_impl.advance(-1); return *this; } - inline const_iterator operator--(int) { QtMetaTypePrivate::QSequentialIterableImpl impl = m_impl; m_impl.advance(-1); return const_iterator(impl, this->ref); } + inline const_iterator operator--(int) { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); m_impl.advance(-1); return const_iterator(impl, new QAtomicInt(0)); } inline const_iterator &operator+=(int j) { m_impl.advance(j); return *this; } inline const_iterator &operator-=(int j) { m_impl.advance(-j); return *this; } inline const_iterator operator+(int j) const { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); impl.advance(j); return const_iterator(impl, new QAtomicInt(0)); } @@ -695,9 +695,9 @@ public: inline bool operator==(const const_iterator &o) const { return m_impl.equal(o.m_impl); } inline bool operator!=(const const_iterator &o) const { return !m_impl.equal(o.m_impl); } inline const_iterator &operator++() { m_impl.advance(1); return *this; } - inline const_iterator operator++(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl = m_impl; m_impl.advance(1); return const_iterator(impl, this->ref); } + inline const_iterator operator++(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); m_impl.advance(1); return const_iterator(impl, new QAtomicInt(0)); } inline const_iterator &operator--() { m_impl.advance(-1); return *this; } - inline const_iterator operator--(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl = m_impl; m_impl.advance(-1); return const_iterator(impl, this->ref); } + inline const_iterator operator--(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); m_impl.advance(-1); return const_iterator(impl, new QAtomicInt(0)); } inline const_iterator &operator+=(int j) { m_impl.advance(j); return *this; } inline const_iterator &operator-=(int j) { m_impl.advance(-j); return *this; } inline const_iterator operator+(int j) const { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); impl.advance(j); return const_iterator(impl, new QAtomicInt(0)); } -- cgit v1.2.3