diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2020-04-08 12:13:55 -0300 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2020-04-11 12:04:25 +0000 |
commit | bfb9b02d3b36244dc19c94a5693071a738bac8a2 (patch) | |
tree | 4da555e1dd31c2f4567a6a179445cd7ceb14a7c7 /tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp | |
parent | 1ec350e35fcea87c527b36cf429b595731059240 (diff) |
QCborValue: fix the move-assignment operatorv5.15.0-beta4
The double-swap technique I used was flawed and broke on
self-assignment. What I had meant to use was the move-and-swap
technique. Thanks to Peppe for pointing it out.
This also fixes a compiler bug in the Green Hills compiler. It was
finding the wrong "swap" function in qSwap:
using std::swap;
swap(value1, value2);
It's supposed to find swap(QCborValue &, QCborValue &) due to argument-
dependent lookup. It's instead finding std::swap<QCborValue>, which
recurses.
Fixes: QTBUG-83390
Change-Id: Ibdc95e9af7bd456a94ecfffd1603e1bee90cd107
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp')
-rw-r--r-- | tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp index 05cf199abe..64321c11fa 100644 --- a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp +++ b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp @@ -385,9 +385,21 @@ void tst_QCborValue::copyCompare() { QFETCH(QCborValue, v); QCborValue other = v; + + // self-moving + v = std::move(v); + QCOMPARE(v, other); // make sure it's still valid + + // moving + v = std::move(other); + other = std::move(v); + + // normal copying + other = v; other = v; v = other; + QCOMPARE(v.compare(other), 0); QCOMPARE(v, other); QVERIFY(!(v != other)); |