diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-12-29 21:04:48 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-12-30 00:19:02 +0000 |
commit | 004af63f3cef63fbe91389cec1ad0c84498915e2 (patch) | |
tree | c8692bb445e824465f5481c6e4e651a7f07b253f /Examples | |
parent | 674abaddbf854e2374f115ef08e59fa79702e19a (diff) | |
download | swig-004af63f3cef63fbe91389cec1ad0c84498915e2.tar.gz |
Syntax error fixes parsing more elaborate parameter pack arguments
that are function pointers and member function pointers.
template <typename... V> struct VariadicParms {
void ParmsFuncPtrPtr(int (*)(V*...)) {}
void ParmsFuncPtrPtrRef(int (*)(V*&...)) {}
void ParmsFuncPtrPtrRValueRef(int (*)(V*&&...)) {}
void ParmsFuncPtrRef(int (*)(V&...)) {}
void ParmsFuncPtrRValueRef(int (*)(V&&...)) {}
void ParmsMemFuncPtrPtr(int (KlassMemFuncs::*)(V*...)) {}
void ParmsMemFuncPtrPtrRef(int (KlassMemFuncs::*)(V*&...)) {}
void ParmsMemFuncPtrPtrRValueRef(int (KlassMemFuncs::*)(V*&&...)) {}
void ParmsMemFuncPtrRef(int (KlassMemFuncs::*)(V&...)) {}
void ParmsMemFuncPtrRValueRef(int (KlassMemFuncs::*)(V&&...)) {}
};
%template(VariadicParms0) VariadicParms<>;
%template(VariadicParms1) VariadicParms<A>;
Also in various other places such as within noexcept specifiers:
template<typename T, typename... Args>
void emplace(Args &&... args) noexcept(
std::is_nothrow_constructible<T, Args &&...>::value);
Issue #1863
Diffstat (limited to 'Examples')
-rw-r--r-- | Examples/test-suite/cpp11_variadic_templates.i | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/Examples/test-suite/cpp11_variadic_templates.i b/Examples/test-suite/cpp11_variadic_templates.i index c053e8020..287409b10 100644 --- a/Examples/test-suite/cpp11_variadic_templates.i +++ b/Examples/test-suite/cpp11_variadic_templates.i @@ -147,7 +147,6 @@ struct KlassMemFuncs { int memfunc3() { return 3; } }; template <typename... V> struct VariadicParms { -public: void ParmsVal(V... vparms_v) {} void ParmsPtr(V*... vparms_p) {} void ParmsPtrRef(V*&... vparms_pr) {} @@ -157,9 +156,20 @@ public: void ParmsConstRef(const V&... vparms_cr) {} void ParmsFuncPtrVal(int (*)(V...)) {} + void ParmsFuncPtrPtr(int (*)(V*...)) {} + void ParmsFuncPtrPtrRef(int (*)(V*&...)) {} + void ParmsFuncPtrPtrRValueRef(int (*)(V*&&...)) {} + void ParmsFuncPtrRef(int (*)(V&...)) {} + void ParmsFuncPtrRValueRef(int (*)(V&&...)) {} + void ParmsFuncPtrConstRef(int (*)(const V&...)) {} + void ParmsMemFuncPtrVal(int (KlassMemFuncs::*)(V...)) {} -// TODO -// void ParmsFuncPtrRef(int (*)(V&...)) {} + void ParmsMemFuncPtrPtr(int (KlassMemFuncs::*)(V*...)) {} + void ParmsMemFuncPtrPtrRef(int (KlassMemFuncs::*)(V*&...)) {} + void ParmsMemFuncPtrPtrRValueRef(int (KlassMemFuncs::*)(V*&&...)) {} + void ParmsMemFuncPtrRef(int (KlassMemFuncs::*)(V&...)) {} + void ParmsMemFuncPtrRValueRef(int (KlassMemFuncs::*)(V&&...)) {} + void ParmsMemFuncPtrConstRef(int (KlassMemFuncs::*)(const V&...)) {} }; %} @@ -209,3 +219,17 @@ template void Container::notifyMyTypes<>(void (tt)()); template void Container::notifyMyTypes<int>(void (tt)(int)); template void Container::notifyMyTypes<int, double>(void (tt)(int, double)); %} + +// #1863 +%inline %{ +#include <type_traits> +class EmplaceContainer { +public: +template<typename T, typename... Args> +void emplace(Args &&... args) noexcept( + std::is_nothrow_constructible<T, Args &&...>::value) {} +}; +%} + +%template(emplace) EmplaceContainer::emplace<int,A>; +//%template(emplace) EmplaceContainer::emplace<int,A,B,C>; |