QAtomicScopedValueRollback: fix CTAD for Q(Basic)AtomicPointer
We need deduction guides to turn the AtomicPointer template argument (the pointee) into a pointer: QAtomicPointer<int> → QAtomicScopedValueRollback<int*> Extend a test to cover pointers, too. Fixes: QTBUG-115105 Change-Id: Ib416c6a43e4da480b707a0bf6a10d186bbaad163 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 97ec1d7d8ecb07be20cf43f475067faba04f5aa5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
40024a24f0
commit
ac328eec8d
@ -108,6 +108,13 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
QAtomicScopedValueRollback(QBasicAtomicPointer<T> &)
|
||||
-> QAtomicScopedValueRollback<T*>;
|
||||
template <typename T>
|
||||
QAtomicScopedValueRollback(QBasicAtomicPointer<T> &, std::memory_order)
|
||||
-> QAtomicScopedValueRollback<T*>;
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QATOMICASCOPEDVALUEROLLBACK_P_H
|
||||
|
@ -24,23 +24,30 @@ void tst_QAtomicScopedValueRollback::leavingScope()
|
||||
QAtomicInt i = 0;
|
||||
QBasicAtomicInteger<bool> b = false;
|
||||
std::atomic<bool> b2 = false;
|
||||
int x = 0, y = 42;
|
||||
QBasicAtomicPointer<int> 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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user