diff options
-rw-r--r-- | src/corelib/kernel/qmetatype.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 97a5bf44f4..6fc8333a80 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -639,7 +639,7 @@ inline Q_DECL_CONSTEXPR int qMetaTypeId( } template <typename T> -inline int qRegisterMetaType( +inline Q_DECL_CONSTEXPR int qRegisterMetaType( #if !defined(qdoc) && !defined(Q_CC_SUN) T * dummy = 0 #endif diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 230138d40d..b5169fe839 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -1681,11 +1681,19 @@ void tst_QMetaType::metaObject() #define METATYPE_ID_FUNCTION(Type, MetaTypeId, Name) \ case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value; +#define REGISTER_METATYPE_FUNCTION(Type, MetaTypeId, Name) \ + case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value; + template<int> struct MetaTypeIdStruct { }; +template<int> +struct RegisterMetaTypeStruct +{ +}; + #define METATYPE_ID_STRUCT(Type, MetaTypeId, Name) \ template<> \ struct MetaTypeIdStruct< ::qMetaTypeId< Name >()> \ @@ -1693,14 +1701,28 @@ struct MetaTypeIdStruct< ::qMetaTypeId< Name >()> \ enum { Value = ::qMetaTypeId< Name >() }; \ }; +#define REGISTER_METATYPE_STRUCT(Type, MetaTypeId, Name) \ +template<> \ +struct RegisterMetaTypeStruct<qRegisterMetaType< Name >()> \ +{ \ + enum { Value = qRegisterMetaType< Name >() }; \ +}; + #if defined(Q_COMPILER_CONSTEXPR) QT_FOR_EACH_STATIC_TYPE(METATYPE_ID_STRUCT) +QT_FOR_EACH_STATIC_TYPE(REGISTER_METATYPE_STRUCT) template<int i = ::qMetaTypeId<int>()> struct MetaTypeIdStructDefaultTemplateValue { enum { Value }; }; + +template<int i = qRegisterMetaType<int>()> +struct RegisterMetaTypeStructDefaultTemplateValue +{ + enum { Value }; +}; #endif void tst_QMetaType::constexprMetaTypeIds() @@ -1715,6 +1737,14 @@ void tst_QMetaType::constexprMetaTypeIds() #endif default:; } + + switch (id) { +#if defined(Q_COMPILER_CONSTEXPR) + QT_FOR_EACH_STATIC_TYPE(REGISTER_METATYPE_FUNCTION) + metaType = RegisterMetaTypeStructDefaultTemplateValue<>::Value; +#endif + default:; + } Q_UNUSED(metaType); } |