diff options
-rw-r--r-- | src/corelib/tools/qflatmap_p.h | 4 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp | 37 |
2 files changed, 39 insertions, 2 deletions
diff --git a/src/corelib/tools/qflatmap_p.h b/src/corelib/tools/qflatmap_p.h index 1b3eaea01c..2f9fe87639 100644 --- a/src/corelib/tools/qflatmap_p.h +++ b/src/corelib/tools/qflatmap_p.h @@ -702,7 +702,7 @@ public: auto it = lower_bound(key); if (it == end() || key_compare::operator()(key, it.key())) { c.values.insert(toValuesIterator(it), value); - return { c.keys.insert(it, std::move(key)), true }; + return { fromKeysIterator(c.keys.insert(toKeysIterator(it), std::move(key))), true }; } else { *toValuesIterator(it) = value; return {it, false}; @@ -714,7 +714,7 @@ public: auto it = lower_bound(key); if (it == end() || key_compare::operator()(key, it.key())) { c.values.insert(toValuesIterator(it), std::move(value)); - return { c.keys.insert(it, key), true }; + return { fromKeysIterator(c.keys.insert(toKeysIterator(it), key)), true }; } else { *toValuesIterator(it) = std::move(value); return {it, false}; diff --git a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp index 674d9fa6c0..f8f48d7bfb 100644 --- a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp +++ b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp @@ -45,6 +45,7 @@ private slots: void constructing(); void constAccess(); void insertion(); + void insertRValuesAndLValues(); void removal(); void extraction(); void iterators(); @@ -156,6 +157,42 @@ void tst_QFlatMap::insertion() QCOMPARE(m.value("gnampf").data(), "GNAMPF"); } +void tst_QFlatMap::insertRValuesAndLValues() +{ + using Map = QFlatMap<QByteArray, QByteArray>; + const QByteArray foo = QByteArrayLiteral("foo"); + const QByteArray bar = QByteArrayLiteral("bar"); + + auto rvalue = [](const QByteArray &ba) { return ba; }; +#define lvalue(x) x + + { + Map m; + QVERIFY( m.insert(lvalue(foo), lvalue(bar)).second); + QVERIFY(!m.insert(lvalue(foo), lvalue(bar)).second); + } + + { + Map m; + QVERIFY( m.insert(lvalue(foo), rvalue(bar)).second); + QVERIFY(!m.insert(lvalue(foo), rvalue(bar)).second); + } + + { + Map m; + QVERIFY( m.insert(rvalue(foo), lvalue(bar)).second); + QVERIFY(!m.insert(rvalue(foo), lvalue(bar)).second); + } + + { + Map m; + QVERIFY( m.insert(rvalue(foo), rvalue(bar)).second); + QVERIFY(!m.insert(rvalue(foo), rvalue(bar)).second); + } + +#undef lvalue +} + void tst_QFlatMap::extraction() { using Map = QFlatMap<int, QByteArray>; |