Fix template template parameters with default arguments

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10179 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2007-12-06 22:35:43 +00:00
commit 8f09d00bb0
5 changed files with 76 additions and 1 deletions

View file

@ -1,6 +1,12 @@
Version 1.3.34 (in progress) Version 1.3.34 (in progress)
============================ ============================
12/06/2007: wsfulton
Fix #1734415 - template template parameters with default arguments such as:
template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast >
class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > { ... };
12/04/2007: mgossage 12/04/2007: mgossage
[lua] Fix a bug in the class hierachy code, where the methods were not propagated, [lua] Fix a bug in the class hierachy code, where the methods were not propagated,
if the name ordering was in a certain order. if the name ordering was in a certain order.

View file

@ -299,6 +299,7 @@ CPP_TEST_CASES += \
template_specialization_enum \ template_specialization_enum \
template_static \ template_static \
template_tbase_template \ template_tbase_template \
template_template_parameters \
template_typedef \ template_typedef \
template_typedef_cplx \ template_typedef_cplx \
template_typedef_cplx2 \ template_typedef_cplx2 \

View file

@ -0,0 +1,28 @@
import template_template_parameters.*;
public class template_template_parameters_runme {
static {
try {
System.loadLibrary("template_template_parameters");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
System.exit(1);
}
}
public static void main(String argv[]) {
ListFastBool listBool = new ListFastBool();
listBool.setItem(true);
if (listBool.getItem() != true)
throw new RuntimeException("Failed");
ListDefaultDouble listDouble = new ListDefaultDouble();
listDouble.setItem(10.2);
if (listDouble.getItem() != 10.2)
throw new RuntimeException("Failed");
}
}

View file

@ -0,0 +1,37 @@
%module template_template_parameters
%inline %{
namespace pfc {
template<typename t_item, template <typename> class t_alloc> class array_t {};
template<typename t_item> class alloc_fast {
public:
typedef t_item alloc_type;
};
}
template<typename t_item, typename t2> class list_impl_t {};
template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast >
class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > {
public:
t_item item;
// typename t_alloc<t_item>::alloc_type allotype; // SWIG can't handle this yet
void xx() {
typename t_alloc<t_item>::alloc_type atype; // this type is the same as t_item type
atype = 10;
}
};
void TestInstantiations() {
pfc::array_t<int, pfc::alloc_fast> myArrayInt;
list_impl_t<int, pfc::array_t<int, pfc::alloc_fast> > myListImplInt;
}
%}
%template(ListImplFastBool) list_impl_t<bool, pfc::array_t<bool, pfc::alloc_fast> >;
%template(ListFastBool) list_t<bool, pfc::alloc_fast>;
%template(ListImplFastDouble) list_impl_t<double, pfc::array_t<double, pfc::alloc_fast> >;
%template(ListDefaultDouble) list_t<double>;

View file

@ -4432,10 +4432,13 @@ parm : rawtype parameter_declarator {
} }
} }
| TEMPLATE LESSTHAN cpptype GREATERTHAN cpptype idcolon { | TEMPLATE LESSTHAN cpptype GREATERTHAN cpptype idcolon def_args {
$$ = NewParm(NewStringf("template<class> %s %s", $5,$6), 0); $$ = NewParm(NewStringf("template<class> %s %s", $5,$6), 0);
Setfile($$,cparse_file); Setfile($$,cparse_file);
Setline($$,cparse_line); Setline($$,cparse_line);
if ($7.val) {
Setattr($$,"value",$7.val);
}
} }
| PERIOD PERIOD PERIOD { | PERIOD PERIOD PERIOD {
SwigType *t = NewString("v(...)"); SwigType *t = NewString("v(...)");