summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-01-07 09:20:00 +0100
committerMarc Mutz <marc.mutz@qt.io>2022-01-07 14:31:38 +0100
commite6cd1eb0791bde5d61e6c4aa2275bc7050e0c1d1 (patch)
tree2d2a4ead53acdb969bcecbac984ad97e74eb30a4
parentfaa26be44cd7306c8ec2276131414866d3de712d (diff)
QFlatMap: fix mixed rvalue/lvalue insert overloads
They never worked. Pick-to: 6.3 6.2 Change-Id: I9a15c848416419823f28ea580248fbe93a4365dd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/corelib/tools/qflatmap_p.h4
-rw-r--r--tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp37
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>;