Fix %naturalvar and templated methods using enums

%naturalvar was not being picked up - use the symbol table instead for
looking up the feature.

use_naturalvar_mode() has been moved to Language class (not strictly necessary though)
This commit is contained in:
William S Fulton 2013-10-04 23:08:33 +01:00
commit e186d2176a
5 changed files with 68 additions and 9 deletions

View file

@ -274,6 +274,7 @@ CPP_TEST_CASES += \
nspace \
nspace_extend \
naturalvar \
naturalvar_more \
nested_class \
nested_comment \
nested_workaround \

View file

@ -0,0 +1,46 @@
%module naturalvar_more
// The instantiation of a template using an enum in the template parameter was not picking up %naturalvar.
// These typemaps will be used if %naturalvar is not working
%typemap(out) T<Space::E> *te, T<Space::E> *const_te "_should_not_use_this_out_typemap_"
%typemap(varout) T<Space::E> *te, T<Space::E> *const_te "_should_not_use_this_varout_typemap_"
%typemap(out) Hidden *hidden "_should_not_use_this_out_typemap_"
%typemap(varout) Hidden *hidden "_should_not_use_this_varout_typemap_"
%naturalvar T<Space::E>;
%naturalvar Hidden;
%inline %{
template <typename X> struct T {};
struct K {};
struct Hidden;
%}
%{
struct Hidden {};
%}
%inline %{
namespace Space {
enum E { E1, E2, E3 };
}
%}
%template(TE) T<Space::E>;
%include <std_string.i>
%include <std_vector.i>
%template(VectorString) std::vector<std::string>;
%inline {
using namespace Space;
struct S {
T<E> te;
const T<E> const_te;
const std::vector<std::string>::value_type const_string_member; // check this resolves to std::string which has a naturalvar
std::vector<std::string>::value_type string_member; // check this resolves to std::string which has a naturalvar
Hidden hidden;
S() : const_te(), const_string_member("initial string value") {}
};
}