%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 }; %}