From 4c32443bc9e738067f518fff54b1db99cde1c3fd Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Fri, 5 Jun 2020 14:24:31 +0200 Subject: metatype: Do not try analyze T in Q*Pointer if T is incomplete Change-Id: I41737ce470f6d2b071ad5e85f8cad1da3869241c Reviewed-by: Ulf Hermann --- src/corelib/kernel/qmetatype.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/corelib/kernel/qmetatype.h') diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 6939adb678..d8b547c8e2 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -2839,11 +2839,29 @@ struct is_complete_helper { template struct is_complete : detail::is_complete_helper::type {}; +template +struct qRemovePointerLike +{ + using type = std::remove_pointer_t; +}; + +#define Q_REMOVE_POINTER_LIKE_IMPL(Pointer) \ +template \ +struct qRemovePointerLike> \ +{ \ + using type = T; \ +}; + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(Q_REMOVE_POINTER_LIKE_IMPL) +template +using qRemovePointerLike_t = typename qRemovePointerLike::type; +#undef Q_REMOVE_POINTER_LIKE_IMPL + template constexpr QMetaTypeInterface *qTryMetaTypeInterfaceForType() { using Ty = std::remove_cv_t>; - using Tz = std::remove_pointer_t; + using Tz = qRemovePointerLike_t; if constexpr (!is_complete::value) { return nullptr; } else { -- cgit v1.2.3