diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h index 0fca56f703..8309e43d89 100644 --- a/src/corelib/kernel/qobjectdefs.h +++ b/src/corelib/kernel/qobjectdefs.h @@ -369,6 +369,7 @@ struct Q_CORE_EXPORT QMetaObject } struct SuperData { + using Getter = const QMetaObject *(*)(); const QMetaObject *direct; SuperData() = default; constexpr SuperData(std::nullptr_t) : direct(nullptr) {} @@ -377,7 +378,6 @@ struct Q_CORE_EXPORT QMetaObject constexpr const QMetaObject *operator->() const { return operator const QMetaObject *(); } #ifdef QT_NO_DATA_RELOCATION - using Getter = const QMetaObject *(*)(); Getter indirect = nullptr; constexpr SuperData(Getter g) : direct(nullptr), indirect(g) {} constexpr operator const QMetaObject *() const @@ -385,6 +385,7 @@ struct Q_CORE_EXPORT QMetaObject template static constexpr SuperData link() { return SuperData(QMetaObject::staticMetaObject); } #else + constexpr SuperData(Getter g) : direct(g()) {} constexpr operator const QMetaObject *() const { return direct; } template static constexpr SuperData link() diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 5958ad7022..49cdf4a0ad 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -489,16 +489,15 @@ void Generator::generateCode() // // Finally create and initialize the static meta object // - fprintf(out, "%sconst QMetaObject %s::staticMetaObject = { {\n", - // ### FIXME: gadgets are not constinit on Windows! - cdef->hasQGadget ? "" : "Q_CONSTINIT ", cdef->qualified.constData()); + fprintf(out, "Q_CONSTINIT const QMetaObject %s::staticMetaObject = { {\n", + cdef->qualified.constData()); if (isQObject) fprintf(out, " nullptr,\n"); else if (cdef->superclassList.size() && !cdef->hasQGadget && !cdef->hasQNamespace) // for qobject, we know the super class must have a static metaobject fprintf(out, " QMetaObject::SuperData::link<%s::staticMetaObject>(),\n", purestSuperClass.constData()); else if (cdef->superclassList.size()) // for gadgets we need to query at compile time for it - fprintf(out, " QtPrivate::MetaObjectForType<%s>::value(),\n", purestSuperClass.constData()); + fprintf(out, " QtPrivate::MetaObjectForType<%s>::value,\n", purestSuperClass.constData()); else fprintf(out, " nullptr,\n"); fprintf(out, " qt_meta_stringdata_%s.offsetsAndSizes,\n"