diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 60588e93299..c9a0a40cd00 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -2925,14 +2925,23 @@ QMetaType::QMetaType(int typeId) : QMetaType(interfaceForType(typeId)) {} namespace QtPrivate { #ifndef QT_BOOTSTRAPPED + +#if defined(Q_CC_MSVC) && defined(QT_BUILD_CORE_LIB) +#define QT_METATYPE_TEMPLATE_EXPORT Q_CORE_EXPORT +#else +#define QT_METATYPE_TEMPLATE_EXPORT +#endif + // Explicit instantiation definition -#define QT_METATYPE_DECLARE_TEMPLATE_ITER(TypeName, Id, Name) template class QMetaTypeForType; +#define QT_METATYPE_DECLARE_TEMPLATE_ITER(TypeName, Id, Name) \ + template class QT_METATYPE_TEMPLATE_EXPORT 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 +#undef QT_METATYPE_TEMPLATE_EXPORT #endif } diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index a6631dc2d99..2f6303deb40 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -2228,10 +2228,15 @@ public: #undef QT_METATYPE_CONSTEXPRLAMDA #ifndef QT_BOOTSTRAPPED + +#if !defined(Q_CC_MSVC) || !defined(QT_BUILD_CORE_LIB) +#define QT_METATYPE_TEMPLATE_EXPORT Q_CORE_EXPORT +#else +#define QT_METATYPE_TEMPLATE_EXPORT +#endif + #define QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER(TypeName, Id, Name) \ - extern template class Q_CORE_EXPORT QMetaTypeForType; -QT_WARNING_PUSH -QT_WARNING_DISABLE_MSVC(4910) // '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation + extern template class QT_METATYPE_TEMPLATE_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) @@ -2240,8 +2245,8 @@ 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) -QT_WARNING_POP #undef QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER +#undef QT_METATYPE_TEMPLATE_EXPORT #endif template