diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h index 9b28958d33f..58f20b7be41 100644 --- a/src/corelib/global/qtypeinfo.h +++ b/src/corelib/global/qtypeinfo.h @@ -228,8 +228,8 @@ template struct is_container : std::false_type {}; template struct is_container().begin() != std::declval().end()), bool>, - typename T::value_type + typename T::value_type, + std::is_convertible().begin() != std::declval().end()), bool> >> : std::true_type {}; @@ -259,7 +259,11 @@ struct expand_operator_equal_container : expand_operator_equal_tuple {}; // if T::value_type exists, check first T::value_type, then T itself template struct expand_operator_equal_container : - std::conjunction, expand_operator_equal_tuple> {}; + std::conjunction< + std::disjunction< + std::is_same, // avoid endless recursion + expand_operator_equal + >, expand_operator_equal_tuple> {}; // recursively check the template arguments of a tuple like object template @@ -295,7 +299,12 @@ template struct expand_operator_less_than_container : expand_operator_less_than_tuple {}; template struct expand_operator_less_than_container : - std::conjunction, expand_operator_less_than_tuple> {}; + std::conjunction< + std::disjunction< + std::is_same, + expand_operator_less_than + >, expand_operator_less_than_tuple + > {}; template using expand_operator_less_than_recursive = std::conjunction...>; diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index df9beabe737..09a51258863 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -2128,5 +2128,15 @@ void tst_QMetaType::constexprMetaTypeIds() Q_UNUSED(metaType); } +struct S { + using value_type = S; // used to cause compilation error with Qt6 + int begin(); + int end(); +}; + +// should not cause a compilation failure +// used to cause issues due to S being equal to S::value_type +Q_DECLARE_METATYPE(S) + QTEST_MAIN(tst_QMetaType) #include "tst_qmetatype.moc"