summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-07-13 16:13:29 +0200
committerLars Knoll <lars.knoll@qt.io>2020-08-24 00:17:50 +0200
commitfefb1c136220750ff4bbe2638108c4f7273bab19 (patch)
tree912e7f452c470798d62e2120b78aecaacfa55409 /src/corelib/kernel/qmetatype.h
parentf21a7116e950286b7f13cdff23aab653fefc2ddb (diff)
Move enum conversions over into QMetaType
Take the opportunity to properly handle the underlying type (size and signed vs unsigned). Change-Id: I0cb8cf40acac6de03c24ed3fe570db68268952c8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qmetatype.h')
-rw-r--r--src/corelib/kernel/qmetatype.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index a6c415b268..b4217bc3a1 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -356,6 +356,7 @@ public:
IsGadget = 0x200,
PointerToGadget = 0x400,
IsPointer = 0x800,
+ IsUnsignedEnumeration = 0x1000
};
Q_DECLARE_FLAGS(TypeFlags, TypeFlag)
@@ -1428,6 +1429,11 @@ namespace QtPrivate {
template <typename Result, typename... Args>
struct IsPointerToTypeDerivedFromQObject<Result(*)(Args...)> { enum { Value = false }; };
+ template<typename T, bool = std::is_enum<T>::value>
+ constexpr bool IsUnsignedEnum = false;
+ template<typename T>
+ constexpr bool IsUnsignedEnum<T, true> = !std::is_signed_v<std::underlying_type_t<T>>;
+
template<typename T>
struct QMetaTypeTypeFlags
{
@@ -1442,6 +1448,7 @@ namespace QtPrivate {
| (IsGadgetHelper<T>::IsGadgetOrDerivedFrom ? QMetaType::IsGadget : 0)
| (IsPointerToGadgetHelper<T>::IsGadgetOrDerivedFrom ? QMetaType::PointerToGadget : 0)
| (QTypeInfo<T>::isPointer ? QMetaType::IsPointer : 0)
+ | (IsUnsignedEnum<T> ? QMetaType::IsUnsignedEnumeration : 0)
};
};