/* 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<typename T> 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<A>; extern template class Temper<B>; template class Temper<A*>; extern template class Temper<B*>; template class Temper<int>; extern template class Temper<short>; /* Templated function to check support for extern template functions */ template <typename T> 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>(int, double); template int my_templated_function<int>(int, double); /* Explicit extern function template instantiation with more complex types */ extern template A my_templated_function<A>(int, double); template A my_templated_function<A>(int, double); extern template Temper<int> my_templated_function<Temper<int>>(int, double); template Temper<int> my_templated_function<Temper<int>>(int, double); %} %template(TemperInt) Temper<int>; /* Enable several versions of the templated function */ %template(my_templated_function_int ) my_templated_function<int>; %template(my_templated_function_A ) my_templated_function<A>; %template(my_templated_function_TemperInt) my_templated_function<Temper<int>>;
Generated by dwww version 1.15 on Tue Jul 2 00:23:57 CEST 2024.