diff options
| author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2023-09-23 18:06:15 +0200 |
|---|---|---|
| committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2023-09-23 22:10:10 +0000 |
| commit | 6c504f2519e1180dbcfd77d5bb08b0db9742eeaa (patch) | |
| tree | 423305e99f280e0eb85f78e0ab2fea3cc759e4c7 /src/gui/vulkan/qbasicvulkanplatforminstance.cpp | |
| parent | 3bac47336483d720c1d7376ea053c03a4e80173c (diff) | |
QPointer: also provide a converting assignment operator
d026fad3d962eed0119351cd37f34490e09153fd added converting constructors
for QPointer. This however made converting _assignments_ ambiguous,
introducing a regression for users coming from Qt < 6.6.
This code:
QPointer<Base> base;
QPointer<Derived> derived;
base = derived;
used to convert `derived` to `Derived *` (using the implicit conversion
operator from `QPointer<Derived>` to `Derived *`), and then the
assignment operator for `QPointer<Base>` that took a `Base *`.
The introduction of the conversion constructor in 6.6 makes it possible
to convert `QPointer<Derived>` to `QPointer<Base>`, and then fall back
to the compiler-generated assignment operator for `QPointer<Base>`.
The result is that the code above is now ambiguous and stops compiling.
Fix this by adding a converting assignment operator for QPointer.
I'm only adding the const-lvalue overload because the implementation
requires going through the private QWeakPointer::assign helper. We
cannot copy-assign or move-assign the inner QWeakPointer, as those
assignments require lock()ing the QWeakPointer and that's not possible
on a QObject-tracking QWeakPointer (but cf. QTBUG-117483).
Assigning from a rvalue QPointer would mean calling assign() on
the internal QWeakPointer _and_ clear the incoming QPointer,
and that's strictly worse than the lvalue overload (where we just call
assign()).
Change-Id: I33fb2a22b3d5110284d78e3d7c6cc79a5b73b67b
Pick-to: 6.6 6.6.0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/gui/vulkan/qbasicvulkanplatforminstance.cpp')
0 files changed, 0 insertions, 0 deletions
