diff options
Diffstat (limited to 'include/libcamera/base/signal.h')
-rw-r--r-- | include/libcamera/base/signal.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/include/libcamera/base/signal.h b/include/libcamera/base/signal.h index 91000d0d..444997b4 100644 --- a/include/libcamera/base/signal.h +++ b/include/libcamera/base/signal.h @@ -13,10 +13,11 @@ #include <vector> #include <libcamera/base/bound_method.h> -#include <libcamera/base/object.h> namespace libcamera { +class Object; + class SignalBase { public: @@ -44,7 +45,7 @@ public: } #ifndef __DOXYGEN__ - template<typename T, typename R, typename std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr> + template<typename T, typename R, std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr> void connect(T *obj, R (T::*func)(Args...), ConnectionType type = ConnectionTypeAuto) { @@ -52,7 +53,7 @@ public: SignalBase::connect(new BoundMethodMember<T, R, Args...>(obj, object, func, type)); } - template<typename T, typename R, typename std::enable_if_t<!std::is_base_of<Object, T>::value> * = nullptr> + template<typename T, typename R, std::enable_if_t<!std::is_base_of<Object, T>::value> * = nullptr> #else template<typename T, typename R> #endif @@ -63,7 +64,11 @@ public: #ifndef __DOXYGEN__ template<typename T, typename Func, - typename std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr> + std::enable_if_t<std::is_base_of<Object, T>::value +#if __cplusplus >= 201703L + && std::is_invocable_v<Func, Args...> +#endif + > * = nullptr> void connect(T *obj, Func func, ConnectionType type = ConnectionTypeAuto) { Object *object = static_cast<Object *>(obj); @@ -71,7 +76,11 @@ public: } template<typename T, typename Func, - typename std::enable_if_t<!std::is_base_of<Object, T>::value> * = nullptr> + std::enable_if_t<!std::is_base_of<Object, T>::value +#if __cplusplus >= 201703L + && std::is_invocable_v<Func, Args...> +#endif + > * = nullptr> #else template<typename T, typename Func> #endif |