diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h index 2a87912c4a..9db8981bf5 100644 --- a/src/corelib/tools/qmap.h +++ b/src/corelib/tools/qmap.h @@ -655,6 +655,12 @@ public: if (!map.d || map.d->m.empty()) return; + if (map.d.isShared()) { + // fall back to a regular copy + insert(map); + return; + } + detach(); #ifdef __cpp_lib_node_extract @@ -1292,6 +1298,12 @@ public: if (!map.d || map.d->m.empty()) return; + if (map.d.isShared()) { + // fall back to a regular copy + insert(map); + return; + } + detach(); #ifdef __cpp_lib_node_extract diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index c8a228f8dd..4f7ac08c2d 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -1205,6 +1205,100 @@ void tst_QMap::insert() } } +template