%module catches // throw is invalid in C++17 and later, only SWIG to use it #define TESTCASE_THROW3(T1, T2, T3) throw(T1, T2, T3) %{ #define TESTCASE_THROW3(T1, T2, T3) %} %include // for throws(...) typemap %catches(int, const char *, const ThreeException&) test_catches(int i); %catches(int, ...) test_exception_specification(int i); // override the exception specification %catches(...) test_catches_all(int i); %inline %{ struct ThreeException {}; void test_catches(int i) { if (i == 1) { throw int(1); } else if (i == 2) { throw (const char *)"two"; } else if (i == 3) { throw ThreeException(); } } void test_exception_specification(int i) TESTCASE_THROW3(int, const char *, const ThreeException&) { test_catches(i); } void test_catches_all(int i) { test_catches(i); } %}