[libcamera-devel] libcamera: signal: Fix compilation on gcc

Message ID 20190711191235.25150-1-laurent.pinchart@ideasonboard.com
State Accepted
Commit b50c5f28b14e2fb14d4de0c088949e1405d22c6a
Headers show
Series
  • [libcamera-devel] libcamera: signal: Fix compilation on gcc
Related show

Commit Message

Laurent Pinchart July 11, 2019, 7:12 p.m. UTC
gcc complains that the recently template specialisation of the
SlotBase::match() method is invalid as it is in a non-namespace scope.
Luckily this can easily be fixed by removing the specialisation for the
fully specialised implementation. As an additional safety measure, using
std::enable_if<!std::is_same<Object, T>> on the template implementation
ensures that it will never be called for an Object instance.

Fixes: 56c2e653008a ("libcamera: signal: Fix Object handling in multiple inheritance cases")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/signal.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Patch

diff --git a/include/libcamera/signal.h b/include/libcamera/signal.h
index d3be362637f8..8f6db700cd80 100644
--- a/include/libcamera/signal.h
+++ b/include/libcamera/signal.h
@@ -27,9 +27,8 @@  public:
 		: obj_(obj), object_(object) {}
 	virtual ~SlotBase() {}
 
-	template<typename T>
+	template<typename T, typename std::enable_if<!std::is_same<Object, T>::value>::type * = nullptr>
 	bool match(T *obj) { return obj == obj_; }
-	template<>
 	bool match(Object *object) { return object == object_; }
 
 	void disconnect(SignalBase *signal);