Duplicate class template instantiations via %template changes
Named duplicate class template instantiations now issue a warning and are ignored. Duplicate empty class template instantiations are quietly ignored. The test cases are fixed for this new behaviour. This commit is a pre-requisite for the near future so that the Python builtin wrappers can correctly use the SwigType_namestr function without generating duplicate symbol names.
This commit is contained in:
parent
777fd2c280
commit
4729cf2b1f
16 changed files with 283 additions and 55 deletions
34
Examples/test-suite/errors/cpp_template_class_repeat.i
Normal file
34
Examples/test-suite/errors/cpp_template_class_repeat.i
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
%module xxx
|
||||
|
||||
template<typename T> struct A {};
|
||||
%template(Aint) A<int>;
|
||||
%template(Aint2) A<int>; // Now ignored and issues a warning
|
||||
|
||||
template<typename T> struct B {};
|
||||
%template() B<int>;
|
||||
%template(Bint) B<int>; // OK
|
||||
|
||||
template<typename T> struct C {};
|
||||
%template() C<int>;
|
||||
%template() C<int>; // Quietly ignored now
|
||||
%template(Cint) C<int>; // OK
|
||||
|
||||
template <typename T, typename U = short> struct D {};
|
||||
%template(Dint) D<int>;
|
||||
%template(Dintshort) D<int, short>;
|
||||
|
||||
template<typename T> struct E {};
|
||||
%template(Eint) E<int>;
|
||||
%template(Eint) E<int>; // Always has been ignored as a redefined identifier
|
||||
|
||||
|
||||
template<typename T> struct F {};
|
||||
%template(Fint) F<int>;
|
||||
%template() F<int>; // Quietly ignored
|
||||
%template() F<int>; // Quietly ignored
|
||||
|
||||
template<typename T> struct G {};
|
||||
%template() G<int>;
|
||||
%template() G<int>; // Quietly ignored
|
||||
%template(Gint) G<int>;
|
||||
%template() G<int>; // Quietly ignored
|
||||
Loading…
Add table
Add a link
Reference in a new issue