aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/cpp11_copyctor_delete.i
blob: d708ba8d1974e0b1718be97d2c0c016abbd6a7c2 (plain)
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
};
%}