%module template_construct // Tests templates to make sure an extra <> in a constructor and destructor is ok. %inline %{ template class Foo { T y; public: #ifdef SWIG Foo(T x) : y(x) { } ~Foo() {} #else // Modern compilers (C++20) reject this, so feed the compiler the corrected version Foo(T x) : y(x) { } ~Foo() {} #endif }; %} %template(Foo_int) Foo; %inline %{ template<> class Foo { short y; public: #ifdef SWIG Foo(short x) : y(x) { } Foo() : y(0) { } virtual ~Foo() {} #else // Modern compilers (C++20) reject this, so feed the compiler the corrected version // version. Foo(short x) : y(x) { } Foo() : y(0) { } virtual ~Foo() {} #endif }; %} %template(Foo_short) Foo;