Qt::totally_ordered_wrapper: do not allow operator*() for void*
Disable operator*() for void* type, because it otherwise causes a compiler error: qcomparehelpers.h:1103:18: error: forming reference to void constexpr T& operator*() const noexcept { return *get(); } ^~~~~~~~ Use this as an opportunity to add more tests for operator*(). Amends ece36a7394594ede3fba6744fb8f5b450a477652. Change-Id: I205b9989bd142ca9aa49f8f4d15854e591e3042b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 053b8ff7fedfe5aed29a91a82569c00cac466e9a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
74e50e224f
commit
c197fefb22
@ -775,7 +775,8 @@ public:
|
|||||||
constexpr P get() const noexcept { return ptr; }
|
constexpr P get() const noexcept { return ptr; }
|
||||||
constexpr void reset(P p) noexcept { ptr = p; }
|
constexpr void reset(P p) noexcept { ptr = p; }
|
||||||
constexpr P operator->() const noexcept { return get(); }
|
constexpr P operator->() const noexcept { return get(); }
|
||||||
constexpr T& operator*() const noexcept { return *get(); }
|
template <typename U = T, std::enable_if_t<!std::is_void_v<U>, bool> = true>
|
||||||
|
constexpr U &operator*() const noexcept { return *get(); }
|
||||||
|
|
||||||
explicit constexpr operator bool() const noexcept { return get(); }
|
explicit constexpr operator bool() const noexcept { return get(); }
|
||||||
|
|
||||||
|
@ -66,4 +66,15 @@ void tst_QCompareHelpers::totallyOrderedWrapperBasics()
|
|||||||
Qt::totally_ordered_wrapper<int*> pi; // partially-formed
|
Qt::totally_ordered_wrapper<int*> pi; // partially-formed
|
||||||
pi = nullptr;
|
pi = nullptr;
|
||||||
QCOMPARE_EQ(pi.get(), nullptr);
|
QCOMPARE_EQ(pi.get(), nullptr);
|
||||||
|
|
||||||
|
// Test that we can create a wrapper for void*.
|
||||||
|
[[maybe_unused]] constexpr Qt::totally_ordered_wrapper<void*> voidWrp{nullptr};
|
||||||
|
|
||||||
|
// test that operator*() works
|
||||||
|
int val = 10;
|
||||||
|
Qt::totally_ordered_wrapper<int*> intWrp{&val};
|
||||||
|
QCOMPARE_EQ(*intWrp, 10);
|
||||||
|
*intWrp = 20;
|
||||||
|
QCOMPARE_EQ(*intWrp, 20);
|
||||||
|
QCOMPARE_EQ(val, 20);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user