@@ -40,6 +40,7 @@ void f();
4040// special member function.
4141#define DEFAULTED = default ;
4242#define DELETED = delete ;
43+ #define NOT_DECLARED ; // null statement
4344#define CUSTOMIZED { helpers::f (); }
4445// clang-format on
4546
@@ -154,118 +155,174 @@ class PrivateMoveAssign { // NON_COMPLIANT
154155namespace additional_requirements {
155156
156157// A class with a customized copy constructor requires a customized destructor
157- class CustomizedMoveCtorCompliant { // COMPLIANT
158+ class CustomizedMoveCtorCompliant { // COMPLIANT: move-only (1)
158159public:
159160 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedMoveCtorCompliant, DELETED, CUSTOMIZED,
160161 DELETED, DELETED, CUSTOMIZED)
161162};
162163
163- class CustomizedCtorsCompliant { // COMPLIANT
164+ class CustomizedCtorsCompliant { // COMPLIANT: copy-enabled (1)
164165public:
165166 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedCtorsCompliant, CUSTOMIZED, CUSTOMIZED,
166167 DELETED, DELETED, CUSTOMIZED)
167168};
168169
169- class CustomizedMoveAssignCompliant { // COMPLIANT
170+ class CustomizedMoveAssignCompliant { // COMPLIANT: move-only (2)
170171public:
171172 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedMoveAssignCompliant, DELETED, CUSTOMIZED,
172173 DELETED, CUSTOMIZED, CUSTOMIZED)
173174};
174175
175- class CustomizedAssignsCompliant { // COMPLIANT
176+ class CustomizedAssignsCompliant { // COMPLIANT: copy-enabled (2)
176177public:
177178 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedAssignsCompliant, CUSTOMIZED, CUSTOMIZED,
178179 CUSTOMIZED, CUSTOMIZED, CUSTOMIZED)
179180};
180181
181- class CustomizedCopyCtorDefaultedNonCompliant { // NON_COMPLIANT
182+ class CustomizedCopyCtorDefaultedNonCompliant { // NON_COMPLIANT: copy-enabled (2)
182183public:
183184 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedCopyCtorDefaultedNonCompliant,
184185 CUSTOMIZED, DEFAULTED, DEFAULTED, DEFAULTED,
185186 DEFAULTED)
186187};
187188
188- class CustomizedCopyCtorDeletedNonCompliant { // NON_COMPLIANT
189+ class CustomizedCopyCtorDeletedNonCompliant { // NON_COMPLIANT: copy-enabled (2)
189190public:
190191 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedCopyCtorDeletedNonCompliant, CUSTOMIZED,
191192 DEFAULTED, DEFAULTED, DEFAULTED, DELETED)
192193};
193194
194- class CustomizedMoveCtorNonCompliant { // NON_COMPLIANT
195+ class CustomizedMoveCtorNonCompliant { // NON_COMPLIANT: copy-enabled (2)
195196public:
196197 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedMoveCtorNonCompliant, DEFAULTED,
197198 CUSTOMIZED, DEFAULTED, DEFAULTED, DEFAULTED)
198199};
199200
200- class CustomizedCopyAssignNonCompliant { // NON_COMPLIANT
201+ class CustomizedCopyAssignNonCompliant { // NON_COMPLIANT: copy-enabled (2)
201202public:
202203 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedCopyAssignNonCompliant, DEFAULTED,
203204 DEFAULTED, CUSTOMIZED, DEFAULTED, DEFAULTED)
204205};
205206
206- class CustomizedMoveAssignNonCompliant { // NON_COMPLIANT
207+ class CustomizedMoveAssignNonCompliant { // NON_COMPLIANT: copy-enabled (2)
207208public:
208209 DEFINE_ALL_SPECIAL_MEMBERS (CustomizedMoveAssignNonCompliant, CUSTOMIZED,
209210 CUSTOMIZED, DEFAULTED, CUSTOMIZED, DEFAULTED)
210211};
211212
212- // Move-only with a customized dtor requires customized move operations .
213- class MoveOnlyNotCustomizedNonCompliant { // NON_COMPLIANT
213+ // Move-only with a customized dtor requires customized move constructor .
214+ class MoveOnlyNotCustomizedNonCompliant { // NON_COMPLIANT: move-only (1)
214215public:
215216 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyNotCustomizedNonCompliant, DELETED,
216217 DEFAULTED, DELETED, DELETED, CUSTOMIZED)
217218};
218219
219- // Move-only with a customized dtor requires customized move operations.
220- class MoveOnlyAssignableNotCustomizedNonCompliant { // NON_COMPLIANT
220+ // Move-only with a customized dtor requires customized move assignment
221+ // operator.
222+ class MoveOnlyAssignableNotCustomizedNonCompliant { // NON_COMPLIANT: move-only (2)
221223public:
222224 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyAssignableNotCustomizedNonCompliant,
223225 DELETED, DEFAULTED, DELETED, DEFAULTED, CUSTOMIZED)
224226};
225227
226- class MoveOnlyCustomizedCompliant { // COMPLIANT -- customized move
228+ class MoveOnlyCustomizedCompliant { // COMPLIANT -- customized move: move-only (1)
227229public:
228230 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyCustomizedCompliant, DELETED, CUSTOMIZED,
229231 DELETED, DELETED, CUSTOMIZED)
230232};
231233
232- class MoveOnlyAssignableCustomizedCompliant { // COMPLIANT -- customized move
234+ class MoveOnlyAssignableCustomizedCompliant { // COMPLIANT -- customized move: move-only (2)
233235public:
234236 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyAssignableCustomizedCompliant, DELETED,
235237 CUSTOMIZED, DELETED, CUSTOMIZED, CUSTOMIZED)
236238};
237239
238- class MoveOnlyNotCustomizedCompliant { // COMPLIANT -- default dtor
240+ class MoveOnlyNotCustomizedCompliant { // COMPLIANT -- default dtor: move-only (1)
239241public:
240242 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyNotCustomizedCompliant, DELETED, DEFAULTED,
241243 DELETED, DELETED, DEFAULTED)
242244};
243245
244- class MoveOnlyAssignableNotCustomizedCompliant { // COMPLIANT -- default dtor
246+ class MoveOnlyAssignableNotCustomizedCompliant { // COMPLIANT -- default dtor: move-only (2)
245247public:
246248 DEFINE_ALL_SPECIAL_MEMBERS (MoveOnlyAssignableNotCustomizedCompliant, DELETED,
247249 DEFAULTED, DELETED, DEFAULTED, DEFAULTED)
248250};
249251
250252// Copy-enabled with customized dtor requires customized copy and move
251- class CopyEnabledCustomizedDtorNonCompliant { // NON_COMPLIANT
253+ class CopyEnabledCustomizedDtorNonCompliant { // NON_COMPLIANT: copy-enabled (2)
252254public:
253255 DEFINE_ALL_SPECIAL_MEMBERS (CopyEnabledCustomizedDtorNonCompliant, DEFAULTED,
254256 DEFAULTED, DEFAULTED, DEFAULTED, CUSTOMIZED)
255257};
256258
257- class CopyEnabledNonCustomizedDtorCompliant { // COMPLIANT
259+ class CopyEnabledNonCustomizedDtorCompliant { // COMPLIANT: copy-enabled (2)
258260public:
259261 DEFINE_ALL_SPECIAL_MEMBERS (CopyEnabledNonCustomizedDtorCompliant, DEFAULTED,
260262 DEFAULTED, DEFAULTED, DEFAULTED, DEFAULTED)
261263};
262264
263- class CopyEnabledCustomizedDtorCompliant { // COMPLIANT
265+ class CopyEnabledCustomizedDtorCompliant1 { // COMPLIANT: copy-enabled (2)
264266public:
265- DEFINE_ALL_SPECIAL_MEMBERS (CopyEnabledCustomizedDtorCompliant , CUSTOMIZED,
267+ DEFINE_ALL_SPECIAL_MEMBERS (CopyEnabledCustomizedDtorCompliant1 , CUSTOMIZED,
266268 CUSTOMIZED, CUSTOMIZED, CUSTOMIZED, CUSTOMIZED)
267269};
268270
271+ class CopyEnabledCustomizedDtorCompliant2 { // COMPLIANT: copy-enabled (2)
272+ public:
273+ DEFINE_ALL_SPECIAL_MEMBERS (CopyEnabledCustomizedDtorCompliant2, CUSTOMIZED,
274+ DEFAULTED, CUSTOMIZED, DEFAULTED, CUSTOMIZED)
275+ };
276+
277+ class CopyAssignableCustomizedDtorCompliant1 { // COMPLIANT: copy-assignable class with both move operations customized
278+ public:
279+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorCompliant1, DEFAULTED,
280+ CUSTOMIZED, CUSTOMIZED, CUSTOMIZED, CUSTOMIZED)
281+ };
282+
283+ class CopyAssignableCustomizedDtorCompliant2 { // COMPLIANT: copy-assignable class with both move operations not declared
284+ public:
285+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorCompliant2, DEFAULTED,
286+ NOT_DECLARED, CUSTOMIZED, NOT_DECLARED, CUSTOMIZED)
287+ };
288+
289+ class CopyAssignableCustomizedDtorNonCompliant1 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
290+ public:
291+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant1, CUSTOMIZED,
292+ CUSTOMIZED, CUSTOMIZED, NOT_DECLARED, CUSTOMIZED)
293+ };
294+
295+ class CopyAssignableCustomizedDtorNonCompliant2 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
296+ public:
297+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant2, CUSTOMIZED,
298+ NOT_DECLARED, CUSTOMIZED, CUSTOMIZED, CUSTOMIZED)
299+ };
300+
301+ class CopyAssignableCustomizedDtorNonCompliant3 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
302+ public:
303+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant3, CUSTOMIZED,
304+ CUSTOMIZED, CUSTOMIZED, NOT_DECLARED, CUSTOMIZED)
305+ };
306+
307+ class CopyAssignableCustomizedDtorNonCompliant4 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
308+ public:
309+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant4, CUSTOMIZED,
310+ NOT_DECLARED, CUSTOMIZED, CUSTOMIZED, CUSTOMIZED)
311+ };
312+
313+ class CopyAssignableCustomizedDtorNonCompliant5 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
314+ public:
315+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant5, CUSTOMIZED,
316+ DEFAULTED, CUSTOMIZED, NOT_DECLARED, CUSTOMIZED)
317+ };
318+
319+ class CopyAssignableCustomizedDtorNonCompliant6 { // NON_COMPLIANT: copy-assignable class with only one of move operations not declared
320+ public:
321+ DEFINE_ALL_SPECIAL_MEMBERS (CopyAssignableCustomizedDtorNonCompliant6, CUSTOMIZED,
322+ NOT_DECLARED, CUSTOMIZED, DEFAULTED, CUSTOMIZED)
323+ };
324+
325+
269326// A public unmovable base class shall have a public virtual destructor
270327class UnmovableBaseNonvirtualDtor { // NON_COMPLIANT
271328public:
0 commit comments