%module cpp17_enable_if_t // test use of enable_if_t but without full %template instantiation, that is no enable_if_t definition is parsed %inline %{ #if defined(_MSC_VER) && _MSC_VER < 1920 #define or || #define and && #endif #include typedef int node_t; typedef int position_t; template , bool> = true> void enableif1(const A a, const B b) {} // tests non-type template parameters within () brackets - was causing an infinite loop, issue #2418 template ), bool> = true> void enableif2(const A a, const B b) {} template || std::is_same_v), bool> = true> void enableif3(const A a, const B b) {} template or std::is_same_v) and (std::is_integral_v or std::is_same_v), bool> = true> void enableif4(const A a, const B b) {} template and std::is_integral_v), bool> = true> int enableif5(const A a, const B b) { return a + b; } void tester() { enableif5(10, 20); } %} // non-type template parameters working well in SWIG, below is a simple workaround as the 3rd parameter is defaulted for enable_if_t (which is just SFINAE to give a nice C++ compiler error) %template(enableif5) enableif5; // workaround