@@ -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