Hi all !


Considering this function :

void my_function( std::vector<float> my_param ) ;


I want to call this function using the builtin Python array, made possible using :

%include «std_vector.i»

%template () std::vector<float>;   // anonymous template because this type is useless in Python.


Doing this, though, leads to segfault when I (wrongly) call the function with any wrapped object.


Indead, the type checker will look for the « std::vector<float, allocator…> » type, which does not exist (return NULL), then will assume the parameter is a pointer to a std::vector<float> ! This leads quickly to a segfault.




%module test


%include "std_vector.i"

%template () std::vector<int>;



struct Anything

{ };


void function( const std::vector<int> )

{ }



struct Anything

{ };


void function( const std::vector<int> );



It is not clear to me why the conversion always succeed when no type info is given to SWIG_Python_ConvertPtrAndOwn, is it on purpose ?

It could also be solved in the trait : traits_asptr_stdseq ::asptr, checking if swig::type_info<sequence>() returns NULL.



Remark : the problem does not occur if the template instanciation has a name.

%template (std_vector_int) std::vector<int>;



Any thoughts ?