blob: d708ba8d1974e0b1718be97d2c0c016abbd6a7c2 [file] [log] [blame]
%module cpp11_copyctor_delete
%{
#if defined(_MSC_VER)
#pragma warning(disable : 4624) // warning C4624: 'StackOnlyDerived1': destructor was implicitly defined as deleted
#endif
%}
%inline %{
struct DeletedPublic1 {
DeletedPublic1() = delete;
};
struct DeletedPublic2 {
DeletedPublic2() = delete;
DeletedPublic2(const DeletedPublic2&) = delete;
};
struct DeletedPublic3 {
DeletedPublic3(const DeletedPublic3&) = delete;
};
struct DeletedPublic4 {
DeletedPublic4() = default;
DeletedPublic4(const DeletedPublic4&) = delete;
};
struct DeletedPublic5 {
DeletedPublic5() = default;
DeletedPublic5(const DeletedPublic5&) = delete;
};
struct DeletedProtected1 {
protected:
DeletedProtected1() = delete;
};
struct DeletedProtected2 {
protected:
DeletedProtected2() = delete;
DeletedProtected2(const DeletedProtected2&) = delete;
};
struct DeletedProtected3 {
protected:
DeletedProtected3(const DeletedProtected3&) = delete;
};
struct DeletedProtected4 {
protected:
DeletedProtected4() = default;
DeletedProtected4(const DeletedProtected4&) = delete;
};
struct DeletedProtected5 {
protected:
DeletedProtected5() = default;
DeletedProtected5(const DeletedProtected5&) = delete;
};
struct DeletedPrivate1 {
private:
DeletedPrivate1() = delete;
};
struct DeletedPrivate2 {
private:
DeletedPrivate2() = delete;
DeletedPrivate2(const DeletedPrivate2&) = delete;
};
struct DeletedPrivate3 {
private:
DeletedPrivate3(const DeletedPrivate3&) = delete;
};
struct DeletedPrivate4 {
private:
DeletedPrivate4() = default;
DeletedPrivate4(const DeletedPrivate4&) = delete;
};
struct DeletedPrivate5 {
private:
DeletedPrivate5() = default;
DeletedPrivate5(const DeletedPrivate5&) = delete;
};
struct StackOnly1 {
// Only constructible on the stack
~StackOnly1() = delete;
};
struct StackOnlyDerived1 : StackOnly1 {
// this class is not constructible due to deleted base destructor
};
struct StackOnlyDerivedMore1 : StackOnlyDerived1 {
// this class is not constructible due to deleted base destructor
};
%}
// copyctor feature turned on
%copyctor;
%inline %{
struct CopyCtorDeletedPublic1 {
#if __cplusplus >= 202002L
// Uniform/aggregate initialization was removed in C++20 if there is a user declared constructor, so the initialization in make() below does not work
// This example can only be tested for C++11 to C++17, in C++20 the constructor declaration is removed by making it an aggregate
// SWIG still sees the deleted constructor below
#else
CopyCtorDeletedPublic1() = delete;
#endif
static CopyCtorDeletedPublic1 make() { return {}; }
};
struct CopyCtorDeletedPublic2 {
CopyCtorDeletedPublic2() = delete;
CopyCtorDeletedPublic2(const CopyCtorDeletedPublic2&) = delete;
};
struct CopyCtorDeletedPublic3 {
CopyCtorDeletedPublic3(const CopyCtorDeletedPublic3&) = delete;
};
struct CopyCtorDeletedPublic4 {
CopyCtorDeletedPublic4() = default;
CopyCtorDeletedPublic4(const CopyCtorDeletedPublic4&) = delete;
};
struct CopyCtorDeletedPublic5 {
CopyCtorDeletedPublic5() = default;
CopyCtorDeletedPublic5(const CopyCtorDeletedPublic5&) = delete;
};
struct CopyCtorDeletedProtected1 {
protected:
#if __cplusplus >= 202002L
// Uniform/aggregate initialization was removed in C++20 if there is a user declared constructor, so the initialization in make() below does not work
// This example can only be tested for C++11 to C++17, in C++20 the constructor declaration is removed by making it an aggregate
// SWIG still sees the deleted constructor below
#else
CopyCtorDeletedProtected1() = delete;
#endif
public:
static CopyCtorDeletedProtected1 make() { return {}; }
};
struct CopyCtorDeletedProtected2 {
protected:
CopyCtorDeletedProtected2() = delete;
CopyCtorDeletedProtected2(const CopyCtorDeletedProtected2&) = delete;
};
struct CopyCtorDeletedProtected3 {
protected:
CopyCtorDeletedProtected3(const CopyCtorDeletedProtected3&) = delete;
};
struct CopyCtorDeletedProtected4 {
protected:
CopyCtorDeletedProtected4() = default;
CopyCtorDeletedProtected4(const CopyCtorDeletedProtected4&) = delete;
};
struct CopyCtorDeletedProtected5 {
protected:
CopyCtorDeletedProtected5() = default;
CopyCtorDeletedProtected5(const CopyCtorDeletedProtected5&) = delete;
};
struct CopyCtorDeletedPrivate1 {
private:
#if __cplusplus >= 202002L
// Uniform/aggregate initialization was removed in C++20 if there is a user declared constructor, so the initialization in make() below does not work
// This example can only be tested for C++11 to C++17, in C++20 the constructor declaration is removed by making it an aggregate
// SWIG still sees the deleted constructor below
#else
CopyCtorDeletedPrivate1() = delete;
#endif
public:
static CopyCtorDeletedPrivate1 make() { return {}; }
};
struct CopyCtorDeletedPrivate2 {
private:
CopyCtorDeletedPrivate2() = delete;
CopyCtorDeletedPrivate2(const CopyCtorDeletedPrivate2&) = delete;
};
struct CopyCtorDeletedPrivate3 {
private:
CopyCtorDeletedPrivate3(const CopyCtorDeletedPrivate3&) = delete;
};
struct CopyCtorDeletedPrivate4 {
private:
CopyCtorDeletedPrivate4() = default;
CopyCtorDeletedPrivate4(const CopyCtorDeletedPrivate4&) = delete;
};
struct CopyCtorDeletedPrivate5 {
private:
CopyCtorDeletedPrivate5() = default;
CopyCtorDeletedPrivate5(const CopyCtorDeletedPrivate5&) = delete;
};
struct CopyCtorStackOnly1 {
// Only constructible on the stack
~CopyCtorStackOnly1() = delete;
};
struct CopyCtorStackOnlyDerived1 : CopyCtorStackOnly1 {
// this class is not constructible due to deleted base destructor
};
struct CopyCtorStackOnlyDerivedMore1 : CopyCtorStackOnlyDerived1 {
// this class is not constructible due to deleted base destructor
};
%}