summaryrefslogtreecommitdiff
path: root/Examples
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-12-30 22:31:56 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-12-30 22:31:56 +0000
commit041ec797478ec1a3dc0da6f05784f1db11fc11ce (patch)
tree1c455a244569ae2fea77dbc8bd193788bad05db1 /Examples
parent32c86d9f1432f479e0cfb4fb52d433a9343d190e (diff)
downloadswig-041ec797478ec1a3dc0da6f05784f1db11fc11ce.tar.gz
More variadic template testing
Test less conventional function ptr parameters
Diffstat (limited to 'Examples')
-rw-r--r--Examples/test-suite/cpp11_variadic_templates.i34
1 files changed, 31 insertions, 3 deletions
diff --git a/Examples/test-suite/cpp11_variadic_templates.i b/Examples/test-suite/cpp11_variadic_templates.i
index 287409b10..008539393 100644
--- a/Examples/test-suite/cpp11_variadic_templates.i
+++ b/Examples/test-suite/cpp11_variadic_templates.i
@@ -155,6 +155,7 @@ template <typename... V> struct VariadicParms {
void ParmsRValueRef(V&&... vparms_r) {}
void ParmsConstRef(const V&... vparms_cr) {}
+ // Conventional unnamed parameter function ptr
void ParmsFuncPtrVal(int (*)(V...)) {}
void ParmsFuncPtrPtr(int (*)(V*...)) {}
void ParmsFuncPtrPtrRef(int (*)(V*&...)) {}
@@ -163,6 +164,25 @@ template <typename... V> struct VariadicParms {
void ParmsFuncPtrRValueRef(int (*)(V&&...)) {}
void ParmsFuncPtrConstRef(int (*)(const V&...)) {}
+ // Unconventional unnamed parameter function ptr
+ void ParmsFuncUnnamedVal(int (V...)) {}
+ void ParmsFuncUnnamedPtr(int (V*...)) {}
+ void ParmsFuncUnnamedPtrRef(int (V*&...)) {}
+ void ParmsFuncUnnamedPtrRValueRef(int (V*&&...)) {}
+ void ParmsFuncUnnamedRef(int (V&...)) {}
+ void ParmsFuncUnnamedRValueRef(int (V&&...)) {}
+ void ParmsFuncUnnamedConstRef(int (const V&...)) {}
+
+ // Unconventional named parameter function ptr
+ void ParmsFuncNamedVal(int fn(V...)) {}
+ void ParmsFuncNamedPtr(int fn(V*...)) {}
+ void ParmsFuncNamedPtrRef(int fn(V*&...)) {}
+ void ParmsFuncNamedPtrRValueRef(int fn(V*&&...)) {}
+ void ParmsFuncNamedRef(int fn(V&...)) {}
+ void ParmsFuncNamedRValueRef(int fn(V&&...)) {}
+ void ParmsFuncNamedConstRef(int fn(const V&...)) {}
+
+ // Conventional unnamed parameter member function ptr
void ParmsMemFuncPtrVal(int (KlassMemFuncs::*)(V...)) {}
void ParmsMemFuncPtrPtr(int (KlassMemFuncs::*)(V*...)) {}
void ParmsMemFuncPtrPtrRef(int (KlassMemFuncs::*)(V*&...)) {}
@@ -205,14 +225,16 @@ public:
class Container {
public:
template<typename... Args>
-static void notifyMyTypes(void (fn)(Args...));
-//static void notifyMyTypes(void (*fn)(Args...));
+ static void notifyMyTypes(void (fn)(Args...)); // unconventional function (ptr)
+template<typename... Args>
+ static void notifyMyTypesA(void (*fn)(Args...)) {} // conventional function ptr
+template<typename... Args>
+ static void notifyMyTypesB(void fn(Args...)) {}; // unconventional function (ptr)
};
%}
%{
template<typename... Args>
void Container::notifyMyTypes(void (fn)(Args...)) {}
-// void Container::notifyMyTypes(void (*fn)(Args...)) {}
// Explicit template instantiations
template void Container::notifyMyTypes<>(void (tt)());
@@ -220,6 +242,11 @@ template void Container::notifyMyTypes<int>(void (tt)(int));
template void Container::notifyMyTypes<int, double>(void (tt)(int, double));
%}
+// Not supported (most vexing parse), see Extending.html#Extending_nn7
+//%template(ContainerNotifyMyTypes1) Container::notifyMyTypes<int>;
+%template(ContainerNotifyMyTypesA1) Container::notifyMyTypesA<int>;
+%template(ContainerNotifyMyTypesB1) Container::notifyMyTypesB<int>;
+
// #1863
%inline %{
#include <type_traits>
@@ -232,4 +259,5 @@ void emplace(Args &&... args) noexcept(
%}
%template(emplace) EmplaceContainer::emplace<int,A>;
+// TODO
//%template(emplace) EmplaceContainer::emplace<int,A,B,C>;