diff options
Diffstat (limited to 'Examples/test-suite/cpp11_copyctor_delete.i')
-rw-r--r-- | Examples/test-suite/cpp11_copyctor_delete.i | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/Examples/test-suite/cpp11_copyctor_delete.i b/Examples/test-suite/cpp11_copyctor_delete.i new file mode 100644 index 000000000..d708ba8d1 --- /dev/null +++ b/Examples/test-suite/cpp11_copyctor_delete.i @@ -0,0 +1,192 @@ +%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 +}; +%} |