From bec35fa0c2b478a71fbda9096f6080a792235a8f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 8 Dec 2021 02:25:50 +0100 Subject: [PATCH] Define "equivalent" typecheck typemap attribute for shared_ptr<> This is required to handle overloaded functions taking shared_ptr or raw type correctly and is checked in cpp11_shared_ptr_overload unit test. --- Lib/c/std_shared_ptr.i | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Lib/c/std_shared_ptr.i b/Lib/c/std_shared_ptr.i index a82a49c45..d2049f5f9 100644 --- a/Lib/c/std_shared_ptr.i +++ b/Lib/c/std_shared_ptr.i @@ -67,6 +67,18 @@ explicit operator bool() const { return swig_self_ != nullptr; } %} +// This is required to handle overloads on shared_ptr/normal type correctly. +%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="TYPE *") + TYPE CONST, + TYPE CONST &, + TYPE CONST *, + TYPE *CONST&, + SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >, + SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &, + SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *, + SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& + "" + %enddef %include