Fix instantiation of variadic class templates
containing parameter pack arguments that are function pointers.
template <typename... V> struct VariadicParms {
void ParmsFuncPtrVal(int (*)(V...)) {}
};
%template(VariadicParms0) VariadicParms<>;
%template(VariadicParms1) VariadicParms<A>;
This commit is contained in:
parent
70837bbc26
commit
674abaddbf
6 changed files with 162 additions and 30 deletions
|
|
@ -139,8 +139,13 @@ public:
|
|||
%template (LotsInherit3) LotsInherit<A,B,C>;
|
||||
%template (LotsInherit4) LotsInherit<A,B,C,D>;
|
||||
|
||||
|
||||
%inline %{
|
||||
struct KlassMemFuncs {
|
||||
int memfunc0() { return 0; }
|
||||
int memfunc1() { return 1; }
|
||||
int memfunc2() { return 2; }
|
||||
int memfunc3() { return 3; }
|
||||
};
|
||||
template <typename... V> struct VariadicParms {
|
||||
public:
|
||||
void ParmsVal(V... vparms_v) {}
|
||||
|
|
@ -151,15 +156,39 @@ public:
|
|||
void ParmsRValueRef(V&&... vparms_r) {}
|
||||
void ParmsConstRef(const V&... vparms_cr) {}
|
||||
|
||||
void ParmsFuncPtrVal(int (*)(V...)) {}
|
||||
void ParmsMemFuncPtrVal(int (KlassMemFuncs::*)(V...)) {}
|
||||
// TODO
|
||||
// void ParmsFuncPtr(int (*)(V...)) {}
|
||||
// void ParmsFuncPtrRef(int (*)(V&...)) {}
|
||||
};
|
||||
%}
|
||||
|
||||
%template(VariadicParms0) VariadicParms<>;
|
||||
%template(VariadicParms1) VariadicParms<A>;
|
||||
%template(VariadicParms2) VariadicParms<A,B>;
|
||||
%template(VariadicParms3) VariadicParms<A,B,C>;
|
||||
|
||||
%inline %{
|
||||
template <typename... V> struct FixedAndVariadicParms {
|
||||
public:
|
||||
void ParmsVal(short shortvar, V... vparms_v) {}
|
||||
void ParmsPtr(short shortvar, V*... vparms_p) {}
|
||||
void ParmsPtrRef(short shortvar, V*&... vparms_pr) {}
|
||||
void ParmsPtrRValueRef(short shortvar, V*&&... vparms_rvr) {}
|
||||
void ParmsRef(short shortvar, V&... vparms_r) {}
|
||||
void ParmsRValueRef(short shortvar, V&&... vparms_r) {}
|
||||
void ParmsConstRef(short shortvar, const V&... vparms_cr) {}
|
||||
|
||||
void ParmsFuncPtrVal(short shortvar, int (*)(short, V...)) {}
|
||||
void ParmsMemFuncPtrVal(int (KlassMemFuncs::*)(V...)) {}
|
||||
};
|
||||
%}
|
||||
|
||||
%template(FixedAndVariadicParms0) FixedAndVariadicParms<>;
|
||||
%template(FixedAndVariadicParms1) FixedAndVariadicParms<A>;
|
||||
%template(FixedAndVariadicParms2) FixedAndVariadicParms<A,B>;
|
||||
%template(FixedAndVariadicParms3) FixedAndVariadicParms<A,B,C>;
|
||||
|
||||
|
||||
// #1863
|
||||
%inline %{
|
||||
|
|
@ -167,11 +196,13 @@ class Container {
|
|||
public:
|
||||
template<typename... Args>
|
||||
static void notifyMyTypes(void (fn)(Args...));
|
||||
//static void notifyMyTypes(void (*fn)(Args...));
|
||||
};
|
||||
%}
|
||||
%{
|
||||
template<typename... Args>
|
||||
void Container::notifyMyTypes(void (fn)(Args...)) {}
|
||||
// void Container::notifyMyTypes(void (*fn)(Args...)) {}
|
||||
|
||||
// Explicit template instantiations
|
||||
template void Container::notifyMyTypes<>(void (tt)());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue