summaryrefslogtreecommitdiff
path: root/CHANGES.current
blob: 5fc73eb15cb27d7a089a5c06a13d9eec4e08fcc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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-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 <template<template<class> class, class> class Op, template<class> 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<int>;
                %template(Aint2) A<int>; // 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<int>;
                %template(Bint) B<int>; // OK

                %template() C<int>;
                %template() C<int>; // Quietly ignored now
                %template(Cint) C<int>; // OK

            Note that default template parameters are considered when looking for duplicates such as:

                template <typename T, typename U = short> struct D {};
                %template(Dint) D<int>;
                %template(Dintshort) D<int, short>;

            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<int>;
                %template(Eint) E<int>; // 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 ***