Allow an instantiated template to have the same name as the C++ template name
For example, this is now possible:
template<typename T> struct X { ... };
%template(X) X<int>;
Closes #1100.
This commit is contained in:
parent
d37e41fed8
commit
e27a606335
7 changed files with 325 additions and 4 deletions
51
Examples/test-suite/errors/cpp_template_duplicate_names.i
Normal file
51
Examples/test-suite/errors/cpp_template_duplicate_names.i
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
%module cpp_template_duplicate_names
|
||||
|
||||
// From test-suite/template_class_reuse.i test
|
||||
|
||||
%{
|
||||
namespace Space {
|
||||
template <bool B> struct Duplicate1 { void f(){}; };
|
||||
}
|
||||
%}
|
||||
|
||||
// %warnfilter(SWIGWARN_PARSE_REDEFINED) Space::Duplicate1;
|
||||
namespace Space {
|
||||
template <bool B> struct Duplicate1 { void f(){}; };
|
||||
template <bool B> struct Duplicate1 { void f(){}; };
|
||||
}
|
||||
|
||||
|
||||
// %warnfilter(SWIGWARN_PARSE_REDEFINED) Space::Duplicate2;
|
||||
%inline %{
|
||||
namespace Space {
|
||||
template <int I> struct Duplicate2 { void n(){}; };
|
||||
}
|
||||
%}
|
||||
%template(Duplicate2_0) Space::Duplicate2<0>;
|
||||
%template(Duplicate2_0) Space::Duplicate2<0>;
|
||||
|
||||
|
||||
// %warnfilter(SWIGWARN_PARSE_REDEFINED) Space::Duplicate3;
|
||||
%inline %{
|
||||
namespace Space {
|
||||
template <int I> struct Duplicate3 { void n(){}; };
|
||||
}
|
||||
%}
|
||||
%template(Duplicate3) Space::Duplicate3<0>;
|
||||
%template(Duplicate3) Space::Duplicate3<0>;
|
||||
|
||||
|
||||
%{
|
||||
namespace Space {
|
||||
template <bool B> struct Duplicate4 { void f(){}; };
|
||||
}
|
||||
%}
|
||||
|
||||
// %warnfilter(SWIGWARN_PARSE_REDEFINED) Space::Duplicate4;
|
||||
namespace Space {
|
||||
template <bool B> struct Duplicate4 { void f(){}; };
|
||||
template <bool B> struct Duplicate4 { void f(){}; };
|
||||
}
|
||||
%template(Duplicate4) Space::Duplicate4<0>;
|
||||
%template(Duplicate4) Space::Duplicate4<0>;
|
||||
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
cpp_template_duplicate_names.i:14: Warning 302: Identifier 'Duplicate1' redefined (ignored),
|
||||
cpp_template_duplicate_names.i:13: Warning 302: previous definition of 'Duplicate1'.
|
||||
cpp_template_duplicate_names.i:14: Warning 302: Identifier 'Duplicate1' redefined (ignored),
|
||||
cpp_template_duplicate_names.i:13: Warning 302: previous definition of 'Duplicate1'.
|
||||
cpp_template_duplicate_names.i:25: Warning 302: Identifier 'Duplicate2_0' redefined (ignored) (Renamed from 'Duplicate2< 0 >'),
|
||||
cpp_template_duplicate_names.i:24: Warning 302: previous definition of 'Duplicate2_0' (Renamed from 'Duplicate2< 0 >').
|
||||
cpp_template_duplicate_names.i:35: Warning 302: Identifier 'Duplicate3' redefined (ignored) (Renamed from 'Duplicate3< 0 >'),
|
||||
cpp_template_duplicate_names.i:31: Warning 302: previous definition of 'Duplicate3'.
|
||||
cpp_template_duplicate_names.i:47: Warning 302: Identifier 'Duplicate4' redefined (ignored),
|
||||
cpp_template_duplicate_names.i:46: Warning 302: previous definition of 'Duplicate4'.
|
||||
cpp_template_duplicate_names.i:47: Warning 302: Identifier 'Duplicate4' redefined (ignored),
|
||||
cpp_template_duplicate_names.i:46: Warning 302: previous definition of 'Duplicate4'.
|
||||
cpp_template_duplicate_names.i:50: Warning 302: Identifier 'Duplicate4' redefined (ignored) (Renamed from 'Duplicate4< 0 >'),
|
||||
cpp_template_duplicate_names.i:46: Warning 302: previous definition of 'Duplicate4'.
|
||||
Loading…
Add table
Add a link
Reference in a new issue