/* This unit tests whether SWIG correctly parses the code and makes wrappers for the new C++11 extern templates (explicit template instantiation without using the translation unit). */ %module cpp11_template_explicit /* Suppress SWIG warnings related to explicit template instantiation and extern templates */ #pragma SWIG nowarn=SWIGWARN_PARSE_EXPLICIT_TEMPLATE #pragma SWIG nowarn=SWIGWARN_PARSE_EXTERN_TEMPLATE %inline %{ template class Temper { public: T valu; }; class A { public: int member; int memberFunction() { return 100; } }; class B { public: short member; short memberFunction() { return 100; } }; template class Temper; extern template class Temper; template class Temper; extern template class Temper; template class Temper; extern template class Temper; /* Templated function to check support for extern template functions */ template T my_templated_function(int a, double b) { return T(); } /* Explicit extern function template instantiation with simple type */ extern template int my_templated_function(int, double); template int my_templated_function(int, double); /* Explicit extern function template instantiation with more complex types */ extern template A my_templated_function(int, double); template A my_templated_function(int, double); extern template Temper my_templated_function>(int, double); template Temper my_templated_function>(int, double); %} %template(TemperInt) Temper; /* Enable several versions of the templated function */ %template(my_templated_function_int ) my_templated_function; %template(my_templated_function_A ) my_templated_function; %template(my_templated_function_TemperInt) my_templated_function>;