Remove unneeded Q_DECLARE_METATYPE calls for pointers to QObject subclasses
Compare API dox of Q_DECLARE_METATYPE:
Some types are registered automatically and do not need this macro:
- Pointers to classes derived from QObject
- QPointer, QSharedPointer, QWeakPointer, where T is a class that derives from QObject
This is a ABI-compatible change, as this just replaces explicitly defined template code (by the Q_DECLARE_METATYPE macro use) with the generic predefined one picking up pointers to QObject subclasses.
So instead of the custom explicitly template overload
template <>
struct QMetaTypeId< TYPE >
{ /**/ static int qt_metatype_id() {/**/} };
the predefined template overload one is picked up via
template <typename T>
struct QMetaTypeId : public QMetaTypeIdQObject<T>
{ /**/ };
template <typename T, int =
QtPrivate::IsPointerToTypeDerivedFromQObject<T>::Value ?
QMetaType::PointerToQObject :
/**/ 0>
struct QMetaTypeIdQObject
{ /**/ };
template <typename T>
struct QMetaTypeIdQObject<T*, QMetaType::PointerToQObject>
{ /**/ static int qt_metatype_id() {/**/} };
And thus the constexpr code using QMetaTypeId::qt_metatype_id(), for which all this is done, evaluates as before.
GIT_SILENT
Edited by Friedrich W. H. Kossebau