diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 52f36aa7ce7..2e5b18501a1 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1755,4 +1755,17 @@ const bool VectorBoolElements::true_element = true; const bool VectorBoolElements::false_element = false; } +namespace QtPrivate { +#ifndef QT_BOOTSTRAPPED +// Explicit instantiation definition +#define QT_METATYPE_DECLARE_TEMPLATE_ITER(TypeName, Id, Name) template class QMetaTypeForType; +QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(QT_METATYPE_DECLARE_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(QT_METATYPE_DECLARE_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_CLASS(QT_METATYPE_DECLARE_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_POINTER(QT_METATYPE_DECLARE_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_TEMPLATE(QT_METATYPE_DECLARE_TEMPLATE_ITER) +#undef QT_METATYPE_DECLARE_TEMPLATE_ITER +#endif +} + QT_END_NAMESPACE diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 7ee6a2662d8..f9d7fe9f032 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -2723,6 +2723,24 @@ QMetaTypeInterface QMetaTypeForType::metaType = { template constexpr const decltype(typenameHelper()) QMetaTypeForType::name = typenameHelper(); +template<> +class QMetaTypeForType +{ +}; + +#ifndef QT_BOOTSTRAPPED +#define QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER(TypeName, Id, Name) \ + extern template class Q_CORE_EXPORT QMetaTypeForType; +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wattributes") // false positive because of QMetaTypeForType +QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER) +QT_WARNING_POP +QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_CLASS(QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_POINTER(QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER) +QT_FOR_EACH_STATIC_CORE_TEMPLATE(QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER) +#undef QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER +#endif template constexpr QMetaTypeInterface *qMetaTypeIntefaceForType()