summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qduplicatetracker_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qduplicatetracker_p.h')
-rw-r--r--src/corelib/tools/qduplicatetracker_p.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h
index 565d592ac2..8d64ee5371 100644
--- a/src/corelib/tools/qduplicatetracker_p.h
+++ b/src/corelib/tools/qduplicatetracker_p.h
@@ -105,6 +105,13 @@ class QDuplicateTracker {
#endif
Q_DISABLE_COPY_MOVE(QDuplicateTracker);
public:
+ static constexpr inline bool uses_pmr =
+ #ifdef __cpp_lib_memory_resource
+ true
+ #else
+ false
+ #endif
+ ;
QDuplicateTracker() = default;
explicit QDuplicateTracker(qsizetype n)
#ifdef __cpp_lib_memory_resource
@@ -125,11 +132,22 @@ public:
}
template <typename C>
- void appendTo(C &c) const
+ void appendTo(C &c) const &
{
for (const auto &e : set)
c.push_back(e);
}
+
+ template <typename C>
+ void appendTo(C &c) &&
+ {
+ if constexpr (uses_pmr) {
+ while (!set.empty())
+ c.push_back(std::move(set.extract(set.begin()).value()));
+ } else {
+ return appendTo(c); // lvalue version
+ }
+ }
};
QT_END_NAMESPACE