diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index 66269b4c2ad..5fcf138b443 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -391,14 +391,15 @@ public: static QMetaCallEvent *create(QtPrivate::QSlotObjectBase *slotObj, const QObject *sender, int signal_index, const Args &...argv) { + const void* const argp[] = { nullptr, std::addressof(argv)... }; + const QMetaType metaTypes[] = { QMetaType::fromType(), QMetaType::fromType()... }; + constexpr auto argc = sizeof...(Args) + 1; auto metaCallEvent = std::make_unique(slotObj, sender, - signal_index, int(1 + sizeof...(Args))); + signal_index, int(argc)); void **args = metaCallEvent->args(); QMetaType *types = metaCallEvent->types(); - const std::array argp{ nullptr, std::addressof(argv)... }; - const std::array metaTypes{ QMetaType::fromType(), QMetaType::fromType()... }; - for (size_t i = 0; i < sizeof...(Args) + 1; ++i) { + for (size_t i = 0; i < argc; ++i) { types[i] = metaTypes[i]; args[i] = types[i].create(argp[i]); Q_CHECK_PTR(!i || args[i]);