summaryrefslogtreecommitdiff
path: root/Examples
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-12-23 16:25:50 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-12-23 16:25:50 +0000
commit70837bbc2638ec18bd07d333c6e474c89f4ce695 (patch)
tree84e7553d0957d120b536a6c0ef75ac34e1473416 /Examples
parentb13f584258079dd88a4ca87412b87ac4464686df (diff)
downloadswig-70837bbc2638ec18bd07d333c6e474c89f4ce695.tar.gz
Fix syntax error parsing variadic template parameter pack arguments
that are function pointers Issue #1863
Diffstat (limited to 'Examples')
-rw-r--r--Examples/test-suite/cpp11_variadic_templates.i25
1 files changed, 24 insertions, 1 deletions
diff --git a/Examples/test-suite/cpp11_variadic_templates.i b/Examples/test-suite/cpp11_variadic_templates.i
index 9ea11368e..bb370cebf 100644
--- a/Examples/test-suite/cpp11_variadic_templates.i
+++ b/Examples/test-suite/cpp11_variadic_templates.i
@@ -143,15 +143,38 @@ public:
%inline %{
template <typename... V> struct VariadicParms {
public:
+ void ParmsVal(V... vparms_v) {}
void ParmsPtr(V*... vparms_p) {}
void ParmsPtrRef(V*&... vparms_pr) {}
void ParmsPtrRValueRef(V*&&... vparms_rvr) {}
- void ParmsVal(V... vparms_v) {}
void ParmsRef(V&... vparms_r) {}
+ void ParmsRValueRef(V&&... vparms_r) {}
void ParmsConstRef(const V&... vparms_cr) {}
+
+// TODO
+// void ParmsFuncPtr(int (*)(V...)) {}
};
%}
%template(VariadicParms1) VariadicParms<A>;
%template(VariadicParms2) VariadicParms<A,B>;
%template(VariadicParms3) VariadicParms<A,B,C>;
+
+
+// #1863
+%inline %{
+class Container {
+public:
+template<typename... Args>
+static void notifyMyTypes(void (fn)(Args...));
+};
+%}
+%{
+template<typename... Args>
+ void Container::notifyMyTypes(void (fn)(Args...)) {}
+
+// Explicit template instantiations
+template void Container::notifyMyTypes<>(void (tt)());
+template void Container::notifyMyTypes<int>(void (tt)(int));
+template void Container::notifyMyTypes<int, double>(void (tt)(int, double));
+%}