diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index a7796966131..2a341b870a3 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -1520,7 +1520,7 @@ struct SharedPointerMetaTypeIdHelper, true> \ }; \ template \ struct MetaTypeSmartPointerHelper , \ - typename std::enable_if::Value>::type> \ + typename std::enable_if::Value && !std::is_const_v>::type> \ { \ static bool registerConverter() \ { \ diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 6f3d8ba091e..d639cdec26c 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -8143,5 +8143,22 @@ void tst_QObject::objectNameBinding() static_assert(QtPrivate::HasQ_OBJECT_Macro::Value); static_assert(!QtPrivate::HasQ_OBJECT_Macro::Value); +Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr) +Q_DECLARE_SMART_POINTER_METATYPE(std::unique_ptr) + + +// QTBUG-103741: OK to use smart pointers to const QObject in signals/slots +class SenderWithSharedPointerConstQObject : public QObject +{ + Q_OBJECT + +signals: + void aSignal1(const QSharedPointer &); + void aSignal2(const QWeakPointer &); + void aSignal3(const QPointer &); + void aSignal4(const std::shared_ptr &); + void aSignal5(const std::unique_ptr &); +}; + QTEST_MAIN(tst_QObject) #include "tst_qobject.moc"