%module typemap_self // This typemap should be ignored for self? %typemap(in) A* (A* ptr) { if (SWIG_ConvertPtr($input, (void**) &ptr, $1_descriptor, 0) != -1) { $1 = ptr; } else { $1 = new A(); } } // Simple but unsecure current fix //%apply SWIGTYPE* {A* self} %inline %{ class A; int foo(A* self) { return 0; } struct A { static int bar(int, A* self) { return 1; } int val; int foo(A* self, A* b) { return 1; } }; struct B { B(A*) { } }; %}