mirror of https://github.com/swig/swig
65 lines
1.8 KiB
OpenEdge ABL
65 lines
1.8 KiB
OpenEdge ABL
/* 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>>;
|