diff --git a/src/corelib/tools/qatomicscopedvaluerollback_p.h b/src/corelib/tools/qatomicscopedvaluerollback_p.h index 67299327fcd..a5c1a2fa611 100644 --- a/src/corelib/tools/qatomicscopedvaluerollback_p.h +++ b/src/corelib/tools/qatomicscopedvaluerollback_p.h @@ -108,6 +108,13 @@ public: } }; +template +QAtomicScopedValueRollback(QBasicAtomicPointer &) + -> QAtomicScopedValueRollback; +template +QAtomicScopedValueRollback(QBasicAtomicPointer &, std::memory_order) + -> QAtomicScopedValueRollback; + QT_END_NAMESPACE #endif // QATOMICASCOPEDVALUEROLLBACK_P_H diff --git a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp index 81d8242f71a..8a56d957bd2 100644 --- a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp +++ b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp @@ -24,23 +24,30 @@ void tst_QAtomicScopedValueRollback::leavingScope() QAtomicInt i = 0; QBasicAtomicInteger b = false; std::atomic b2 = false; + int x = 0, y = 42; + QBasicAtomicPointer p = &x; //test rollback on going out of scope { QAtomicScopedValueRollback ri(i); QAtomicScopedValueRollback rb(b); QAtomicScopedValueRollback rb2(b2, true); + QAtomicScopedValueRollback rp(p); QCOMPARE(b.loadRelaxed(), false); QCOMPARE(b2, true); QCOMPARE(i.loadRelaxed(), 0); + QCOMPARE(p.loadRelaxed(), &x); b.storeRelaxed(true); i.storeRelaxed(1); + p.storeRelaxed(&y); QCOMPARE(b.loadRelaxed(), true); QCOMPARE(i.loadRelaxed(), 1); + QCOMPARE(p.loadRelaxed(), &y); } QCOMPARE(b.loadRelaxed(), false); QCOMPARE(b2, false); QCOMPARE(i.loadRelaxed(), 0); + QCOMPARE(p.loadRelaxed(), &x); } void tst_QAtomicScopedValueRollback::leavingScopeAfterCommit()