diff --git a/src/corelib/global/qcomparehelpers.h b/src/corelib/global/qcomparehelpers.h index 3ff49286e91..1c727a8f37f 100644 --- a/src/corelib/global/qcomparehelpers.h +++ b/src/corelib/global/qcomparehelpers.h @@ -775,7 +775,8 @@ public: constexpr P get() const noexcept { return ptr; } constexpr void reset(P p) noexcept { ptr = p; } constexpr P operator->() const noexcept { return get(); } - constexpr T& operator*() const noexcept { return *get(); } + template , bool> = true> + constexpr U &operator*() const noexcept { return *get(); } explicit constexpr operator bool() const noexcept { return get(); } diff --git a/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp index b8e2ab97c16..bc4099d4a52 100644 --- a/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp +++ b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp @@ -66,4 +66,15 @@ void tst_QCompareHelpers::totallyOrderedWrapperBasics() Qt::totally_ordered_wrapper pi; // partially-formed pi = nullptr; QCOMPARE_EQ(pi.get(), nullptr); + + // Test that we can create a wrapper for void*. + [[maybe_unused]] constexpr Qt::totally_ordered_wrapper voidWrp{nullptr}; + + // test that operator*() works + int val = 10; + Qt::totally_ordered_wrapper intWrp{&val}; + QCOMPARE_EQ(*intWrp, 10); + *intWrp = 20; + QCOMPARE_EQ(*intWrp, 20); + QCOMPARE_EQ(val, 20); }