| %module xxx | |
| %inline %{ | |
| namespace std { | |
| template<typename T> class vector {}; | |
| } | |
| template<typename T> void Func() {} | |
| %} | |
| %inline %{ | |
| // Class template | |
| template class std::vector<int>; // C++03 template explicit instantiation definition in C++ | |
| extern template class std::vector<int>; // C++11 template explicit instantiation declaration (extern template) | |
| %} | |
| %template(VectorInt) std::vector<int>; // SWIG template instantiation | |
| %inline %{ | |
| // Function template | |
| template void Func<int>(); // C++03 template explicit instantiation definition in C++ | |
| extern template void Func<int>(); // C++11 template explicit instantiation declaration (extern template) | |
| %} | |
| %template(FuncInt) Func<int>; // SWIG template instantiation | |
| %inline %{ | |
| // Function template with a trailing return type | |
| template<typename T> auto Trailing(T t) -> T { return t; } | |
| template auto Trailing<int>(int) -> int; | |
| extern template auto Trailing<int>(int) -> int; | |
| template auto Trailing<const int *>(const int *) -> const int *; | |
| %} |