vcpkg/ports/qtbase/clang-cl_QGADGET_fix.diff
Alexander Neumann 0d209ca968
[Qt] 6.3.1 (#25259)
* [qtbase] Change qt source downloads to point at GitHub

* [qtbase] Rewrite update system to emit tarball data

* [qtbase] PR feedback

* Update Qt to 6.3.1

* reenable qtlocation ?

* v db

* move buildtrees - to b in pipeline; trying to get webengine logs

* fix patch

* v db

* remove special handling of arm cross case fixed in windows toolchain

* v db

* Fix stuff

* fix more stuff

* fix more stuff

* retry

* fix regex replacement

* fix regex stuff. And qtinterface ref?

* more fixes

* remove unused variable

* v db

* Revert scripts/azure-pipelines/test-modified-ports.ps1

* v db fix

* revert qtlocation changes

* revert v db

* v db

* v db

Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
2022-07-01 15:48:36 -07:00

38 lines
1.3 KiB
Diff

diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index e40cd85..ba68a01 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -18,5 +18,6 @@
#endif
+#include <type_traits>
#include <array>
#include <new>
#include <vector>
@@ -826,7 +829,13 @@
struct IsGadgetHelper { enum { IsRealGadget = false, IsGadgetOrDerivedFrom = false }; };
template<typename T>
+#if defined(__clang__) && (__clang_major__ > 11)
+ // Clang does not reject T::QtGadgetHelper as ambiguous if a class inherits from two QGADGETS
+ // but is not a QGADGET itself
+ struct IsGadgetHelper<T, std::void_t<typename T::QtGadgetHelper, decltype(&T::qt_check_for_QGADGET_macro)>>
+#else
struct IsGadgetHelper<T, typename T::QtGadgetHelper>
+#endif
{
template <typename X>
static char checkType(void (X::*)());
@@ -841,7 +850,11 @@
struct IsPointerToGadgetHelper { enum { IsRealGadget = false, IsGadgetOrDerivedFrom = false }; };
template<typename T>
+#if defined(__clang__) && (__clang_major__ > 11)
+ struct IsPointerToGadgetHelper<T*, std::void_t<typename T::QtGadgetHelper, decltype(&T::qt_check_for_QGADGET_macro)>>
+#else
struct IsPointerToGadgetHelper<T*, typename T::QtGadgetHelper>
+#endif
{
using BaseType = T;
template <typename X>