1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 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
};
%}
|