summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qmetatype.cpp8
-rw-r--r--src/corelib/kernel/qmetatype.h24
-rw-r--r--src/corelib/kernel/qmetatype_p.h4
3 files changed, 15 insertions, 21 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index 5032cf9590..98f53f7dd1 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -1578,13 +1578,9 @@ class Flags
template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted>
struct FlagsImpl
{
- static quint32 Flags(const int type)
+ static quint32 Flags(const int /* type */)
{
- return (!QTypeInfo<T>::isStatic * QMetaType::MovableType)
- | (QTypeInfo<T>::isComplex * QMetaType::NeedsConstruction)
- | (QTypeInfo<T>::isComplex * QMetaType::NeedsDestruction)
- | (type == QMetaType::QObjectStar ? QMetaType::PointerToQObject : 0)
- | (type == QMetaType::QWidgetStar ? QMetaType::PointerToQObject : 0);
+ return QtPrivate::QMetaTypeTypeFlags<T>::Flags;
}
};
template<typename T>
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 0010c27beb..bf1b126200 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -435,6 +435,17 @@ namespace QtPrivate {
template <class Result, class Arg0> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0)> { enum { Value = false }; };
template <class Result, class Arg0, class Arg1> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0, Arg1)> { enum { Value = false }; };
template <class Result, class Arg0, class Arg1, class Arg2> struct IsPointerToTypeDerivedFromQObject<Result(*)(Arg0, Arg1, Arg2)> { enum { Value = false }; };
+
+ template<typename T>
+ struct QMetaTypeTypeFlags
+ {
+ enum { Flags = (!QTypeInfo<T>::isStatic ? QMetaType::MovableType : 0)
+ | (QTypeInfo<T>::isComplex ? QMetaType::NeedsConstruction : 0)
+ | (QTypeInfo<T>::isComplex ? QMetaType::NeedsDestruction : 0)
+ | (IsPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::PointerToQObject : 0)
+ | (Q_IS_ENUM(T) ? QMetaType::IsEnumeration : 0)
+ };
+ };
}
template <typename T>
@@ -448,18 +459,7 @@ int qRegisterMetaType(const char *typeName
if (typedefOf != -1)
return QMetaType::registerTypedef(typeName, typedefOf);
- QMetaType::TypeFlags flags;
- if (!QTypeInfo<T>::isStatic)
- flags |= QMetaType::MovableType;
- if (QTypeInfo<T>::isComplex) {
- flags |= QMetaType::NeedsConstruction;
- flags |= QMetaType::NeedsDestruction;
- }
- if (QtPrivate::IsPointerToTypeDerivedFromQObject<T>::Value)
- flags |= QMetaType::PointerToQObject;
- if (Q_IS_ENUM(T))
- flags |= QMetaType::IsEnumeration;
-
+ QMetaType::TypeFlags flags(QtPrivate::QMetaTypeTypeFlags<T>::Flags);
return QMetaType::registerType(typeName, qMetaTypeDeleteHelper<T>,
qMetaTypeCreateHelper<T>,
qMetaTypeDestructHelper<T>,
diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h
index b50521c7a6..c73f8d0a20 100644
--- a/src/corelib/kernel/qmetatype_p.h
+++ b/src/corelib/kernel/qmetatype_p.h
@@ -155,9 +155,7 @@ public:
/*constructor*/(qMetaTypeConstructHelper<Type>), \
/*destructor*/(qMetaTypeDestructHelper<Type>), \
/*size*/(QTypeInfo<Type>::sizeOf), \
- /*flags*/(!QTypeInfo<Type>::isStatic * QMetaType::MovableType) \
- | (QTypeInfo<Type>::isComplex * QMetaType::NeedsConstruction) \
- | (QTypeInfo<Type>::isComplex * QMetaType::NeedsDestruction) \
+ /*flags*/QtPrivate::QMetaTypeTypeFlags<Type>::Flags \
}