Make QSlotObject helpers usable for SFINAE
Disable if any of the types used in the old-style connections is involved. Change-Id: Ie22c73704370c7f239d7303b555a0b572d2b4f22 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
4c5290e744
commit
60655cbbbb
@ -15,6 +15,8 @@
|
|||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QObject;
|
class QObject;
|
||||||
class QObjectPrivate;
|
class QObjectPrivate;
|
||||||
|
class QMetaMethod;
|
||||||
|
class QByteArray;
|
||||||
|
|
||||||
namespace QtPrivate {
|
namespace QtPrivate {
|
||||||
template <typename T> struct RemoveRef { typedef T Type; };
|
template <typename T> struct RemoveRef { typedef T Type; };
|
||||||
@ -339,7 +341,13 @@ namespace QtPrivate {
|
|||||||
not compatible with the \a ExpectedArguments, otherwise returns >= 0.
|
not compatible with the \a ExpectedArguments, otherwise returns >= 0.
|
||||||
*/
|
*/
|
||||||
template<typename Prototype, typename Functor>
|
template<typename Prototype, typename Functor>
|
||||||
constexpr int inline countMatchingArguments()
|
inline constexpr std::enable_if_t<!std::disjunction_v<std::is_convertible<Prototype, const char *>,
|
||||||
|
std::is_same<std::decay_t<Prototype>, QMetaMethod>,
|
||||||
|
std::is_convertible<Functor, const char *>,
|
||||||
|
std::is_same<std::decay_t<Functor>, QMetaMethod>
|
||||||
|
>,
|
||||||
|
int>
|
||||||
|
countMatchingArguments()
|
||||||
{
|
{
|
||||||
using ExpectedArguments = typename QtPrivate::FunctionPointer<Prototype>::Arguments;
|
using ExpectedArguments = typename QtPrivate::FunctionPointer<Prototype>::Arguments;
|
||||||
using Actual = std::decay_t<Functor>;
|
using Actual = std::decay_t<Functor>;
|
||||||
@ -464,8 +472,9 @@ namespace QtPrivate {
|
|||||||
|
|
||||||
template <typename Func>
|
template <typename Func>
|
||||||
struct ContextTypeForFunctor<Func,
|
struct ContextTypeForFunctor<Func,
|
||||||
std::enable_if_t<std::negation_v<std::disjunction<std::is_same<const char *, Func>,
|
std::enable_if_t<!std::disjunction_v<std::is_convertible<Func, const char *>,
|
||||||
std::is_member_function_pointer<Func>>>
|
std::is_member_function_pointer<Func>
|
||||||
|
>
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
@ -473,9 +482,10 @@ namespace QtPrivate {
|
|||||||
};
|
};
|
||||||
template <typename Func>
|
template <typename Func>
|
||||||
struct ContextTypeForFunctor<Func,
|
struct ContextTypeForFunctor<Func,
|
||||||
std::enable_if_t<std::conjunction_v<std::negation<std::is_same<const char *, Func>>,
|
std::enable_if_t<std::conjunction_v<std::negation<std::is_convertible<Func, const char *>>,
|
||||||
std::is_member_function_pointer<Func>,
|
std::is_member_function_pointer<Func>,
|
||||||
std::is_convertible<typename QtPrivate::FunctionPointer<Func>::Object *, QObject *>>
|
std::is_convertible<typename QtPrivate::FunctionPointer<Func>::Object *, QObject *>
|
||||||
|
>
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user