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. Pick-to: 6.8 Change-Id: I205b9989bd142ca9aa49f8f4d15854e591e3042b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
f9f3bf79dc
commit
053b8ff7fe
@ -984,7 +984,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(); }
|
||||
|
||||
|
@ -110,4 +110,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