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 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(); }
|
||||||
|
|
||||||
|
@ -110,4 +110,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