Below are the changes for the current release. See the CHANGES file for changes in older releases. See the RELEASENOTES file for a summary of changes in each release. Issue # numbers mentioned below can be found on Github. For more details, add the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.2.0 (in progress) =========================== 2022-12-06: wsfulton #1636 Fix syntax error for misplaced Doxygen comment after struct/class member. Fix syntax error using Doxygen member groups syntax, "///*}", when used after final struct/class member. 2022-12-05: wsfulton #2023 Fix garbled Doxygen post comments in parameter lists. Fix syntax error parsing a trailing Doxygen comment in parameter lists. 2022-12-03: wsfulton #1609 Fix syntax error parsing of Doxygen comments after last enum item. 2022-12-03: wsfulton #1715 Fix syntax error parsing of unconventionally placed Doxygen post comments for enum items. 2022-12-02: wsfulton #624 #1021 Improved template template parameters support. Previously, specifying more than one simple template template parameter resulted in a parse error. Now multiple template template parameters are working including instantiation with %template. Example: template class, class> class Op, template class X, class Y> class C { ... }; 2022-11-26: wsfulton #1589 #1590 Slightly better decltype() support for expressions, such as: int i,j; ... decltype(i+j) ... ... decltype(&i) ... These result in a warning for non-trivial expressions which SWIG cannot evaluate: Warning 344: Unable to deduce decltype for 'i+j'. See 'Type Inference' in CPlusPlus.html for workarounds. 2022-11-22: wsfulton #1037 Fix seg fault handling template parameter expressions containing '<=' or '>='. 2022-11-18: wsfulton Duplicate class template instantiations via %template now issue a warning and are ignored. %template(Aint) A; %template(Aint2) A; // Now ignored and issues a warning example.i:7: Warning 404: Duplicate template instantiation of 'A< int >' with name 'Aint2' ignored, example.i:6: Warning 404: previous instantiation of 'A< int >' with name 'Aint'. A single empty template instantiation before a named instantiation is the one exception for allowing duplicate template instantiations as the empty template instantation does not create a wrapper for the template, it merely adds the instantiation into SWIG's internal type system. Duplicate empty template instantiations are quietly ignored. %template() B; %template(Bint) B; // OK %template() C; %template() C; // Quietly ignored now %template(Cint) C; // OK Note that default template parameters are considered when looking for duplicates such as: template struct D {}; %template(Dint) D; %template(Dintshort) D; example.i:7: Warning 404: Duplicate template instantiation of 'D< int,short >' with name 'Dintshort' ignored, example.i:6: Warning 404: previous instantiation of 'D< int >' with name 'Dint'. Note that the following always was ignored, but that was because the chosen name was a duplicate rather than the template being a duplicate: %template(Eint) E; %template(Eint) E; // Always has been ignored as a redefined identifier The old warning was: example.i:7: Warning 302: Identifier 'Eint' redefined (ignored) (Renamed from 'E< int >'), example.i:6: Warning 302: previous definition of 'Eint' (Renamed from 'E< int >'). *** POTENTIAL INCOMPATIBILITY ***