summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.h
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-03-31 08:48:56 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-06-02 22:42:15 +0200
commit47c6466d0acc6d8d733b4fdbaf980a60bbfc93ef (patch)
tree31aad5a433def4b15fbfca44d5be1e0f94f3fcfd /src/corelib/kernel/qmetatype.h
parent649d834443326bfef6ad296cd53819121b8d1a17 (diff)
QMetaType: create metatype for void
Create a QMetaTypeInterface for void. This allows us differentiate QMetaType::Unknown from QMetaType::Void. In addition, this will enable the usage of QMetaMethod::metaReturnType in QMetaMethod::returnType, and will facilitate using metaReturnType in declarative, which needs to distinguish between Unknown and Void. Change-Id: I83296b49587f3deb7ec73e25a33f0d8c98cf8da0 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qmetatype.h')
-rw-r--r--src/corelib/kernel/qmetatype.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 60192e4131..3c7781c850 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -2758,7 +2758,6 @@ QMetaTypeInterface QMetaTypeForType<T>::metaType = {
}
})
};
-#undef QT_METATYPE_CONSTEXPRLAMDA
template<typename T>
constexpr const decltype(typenameHelper<T>()) QMetaTypeForType<T>::name = typenameHelper<T>();
@@ -2766,7 +2765,28 @@ constexpr const decltype(typenameHelper<T>()) QMetaTypeForType<T>::name = typena
template<>
class QMetaTypeForType<void>
{
+ static const decltype(typenameHelper<void>()) name;
+
+public:
+ static inline QMetaTypeInterface metaType =
+ {
+ /*.revision=*/ 0,
+ /*.size=*/ 0,
+ /*.alignment=*/ 0,
+ /*.flags=*/ 0,
+ /*.metaObject=*/ nullptr,
+ /*.name=*/ "void",
+ /*.typeId=*/ BuiltinMetaType<void>::value,
+ /*.ref=*/ Q_REFCOUNT_INITIALIZE_STATIC,
+ /*.deleteSelf=*/ nullptr,
+ /*.defaultCtr=*/ nullptr,
+ /*.copyCtr=*/ nullptr,
+ /*.moveCtr=*/ nullptr,
+ /*.dtor=*/ nullptr,
+ /*.legacyRegisterOp=*/ nullptr
+ };
};
+#undef QT_METATYPE_CONSTEXPRLAMDA
#ifndef QT_BOOTSTRAPPED
#define QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER(TypeName, Id, Name) \
@@ -2789,11 +2809,7 @@ template<typename T>
constexpr QMetaTypeInterface *qMetaTypeInterfaceForType()
{
using Ty = std::remove_cv_t<std::remove_reference_t<T>>;
- if constexpr (std::is_same_v<Ty, void>) {
- return nullptr;
- } else {
- return &QMetaTypeForType<Ty>::metaType;
- }
+ return &QMetaTypeForType<Ty>::metaType;
}
namespace detail {
@@ -2818,8 +2834,6 @@ constexpr QMetaTypeInterface *qTryMetaTypeInterfaceForType()
using Tz = std::remove_pointer_t<Ty>;
if constexpr (!is_complete<Tz, Unique>::value) {
return nullptr;
- } else if constexpr (std::is_same_v<Ty, void>) {
- return nullptr;
} else {
return &QMetaTypeForType<Ty>::metaType;
}