mirror of https://github.com/swig/swig
74 lines
2.5 KiB
OpenEdge ABL
74 lines
2.5 KiB
OpenEdge ABL
%module cpp11_noexcept
|
|
|
|
%ignore NoExceptAbstract::operator std::string;
|
|
%ignore NoExceptAbstract::operator int;
|
|
%ignore NoExceptClass(NoExceptClass&&);
|
|
%rename(Assignment) NoExceptClass::operator=;
|
|
|
|
%{
|
|
extern "C" void global_noexcept(int, bool) noexcept {}
|
|
%}
|
|
%inline %{
|
|
#include <string>
|
|
|
|
extern "C" void global_noexcept(int, bool) noexcept;
|
|
extern "C" void global_noexcept2(int, bool) noexcept {}
|
|
|
|
struct NoExceptClass {
|
|
static const bool VeryTrue = true;
|
|
|
|
NoExceptClass() noexcept {}
|
|
NoExceptClass(const NoExceptClass&) noexcept {}
|
|
NoExceptClass(NoExceptClass&&) noexcept {}
|
|
NoExceptClass& operator=(const NoExceptClass&) noexcept { return *this; }
|
|
virtual ~NoExceptClass() noexcept {}
|
|
|
|
void noex0() noexcept {}
|
|
void noex1() noexcept(sizeof(int) == 4) {}
|
|
void noex2() noexcept(true) {}
|
|
void noex3() noexcept(false) {}
|
|
void noex4() noexcept(VeryTrue) {}
|
|
|
|
template<typename T> void template_noexcept(T) noexcept {}
|
|
|
|
void noo1() const noexcept {}
|
|
static void noo2() noexcept {}
|
|
virtual void noo3() const noexcept {}
|
|
|
|
// Workaround clang 10.0.1 -std=c++17 linker error (oddly for Java and not Python):
|
|
// Undefined symbols for architecture x86_64: "___cxa_deleted_virtual", referenced from: vtable for NoExceptClass
|
|
#if !(defined(__clang__) && __cplusplus >= 201703L)
|
|
virtual void noo4() const noexcept = delete;
|
|
virtual void noo5() const throw() = delete;
|
|
#endif
|
|
};
|
|
|
|
struct NoExceptAbstract {
|
|
virtual void noo4() const noexcept = 0;
|
|
virtual ~NoExceptAbstract() noexcept = 0;
|
|
// Regression test for https://github.com/swig/swig/issues/2474
|
|
virtual explicit operator std::string() const noexcept = 0;
|
|
explicit virtual operator int() const noexcept = 0;
|
|
};
|
|
|
|
struct NoExceptDefaultDelete {
|
|
template<typename T> NoExceptDefaultDelete(T) noexcept = delete;
|
|
NoExceptDefaultDelete() noexcept = default;
|
|
NoExceptDefaultDelete(const NoExceptDefaultDelete&) noexcept = delete;
|
|
NoExceptDefaultDelete(NoExceptDefaultDelete&&) = delete;
|
|
NoExceptDefaultDelete& operator=(const NoExceptDefaultDelete&) = delete;
|
|
~NoExceptDefaultDelete() noexcept = default;
|
|
};
|
|
|
|
%}
|
|
|
|
// Regression tests for #2087 (noexcept on a function pointer parameter type).
|
|
//
|
|
// FIXME: We've only fixed `noexcept` on parameter types which are function
|
|
// pointers to parse - the generated code has `noexcept` in the wrong place
|
|
// and won't compile so for now we only check SWIG can parse this.
|
|
%ignore f2087a;
|
|
%ignore f2087b;
|
|
void f2087a(int (*g)() noexcept) { (void)g; }
|
|
void f2087b(int const (*g)() noexcept) { (void)g; }
|