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 void reset(P p) noexcept { ptr = p; }
|
||||
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(); }
|
||||
|
||||
|
@ -66,4 +66,15 @@ void tst_QCompareHelpers::totallyOrderedWrapperBasics()
|
||||
Qt::totally_ordered_wrapper<int*> 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<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