1 // RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -config="{CheckOptions: [{key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted, value: true}]}" -- 2 3 class DefinesEverything { 4 DefinesEverything(const DefinesEverything &); 5 DefinesEverything(DefinesEverything &&); 6 DefinesEverything &operator=(const DefinesEverything &); 7 DefinesEverything &operator=(DefinesEverything &&); 8 ~DefinesEverything(); 9 }; 10 11 class DefinesNothing { 12 }; 13 14 class DeletedCopyCtorAndOperator { 15 ~DeletedCopyCtorAndOperator() = default; 16 DeletedCopyCtorAndOperator(const DeletedCopyCtorAndOperator &) = delete; 17 DeletedCopyCtorAndOperator &operator=(const DeletedCopyCtorAndOperator &) = delete; 18 }; 19 20 // CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'DefaultedCopyCtorAndOperator' defines a default destructor, a copy constructor and a copy assignment operator but does not define a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] 21 class DefaultedCopyCtorAndOperator { 22 ~DefaultedCopyCtorAndOperator() = default; 23 DefaultedCopyCtorAndOperator(const DefaultedCopyCtorAndOperator &) = default; 24 DefaultedCopyCtorAndOperator &operator=(const DefaultedCopyCtorAndOperator &) = default; 25 }; 26 27 // CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'DefinedCopyCtorAndOperator' defines a default destructor, a copy constructor and a copy assignment operator but does not define a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] 28 class DefinedCopyCtorAndOperator { 29 ~DefinedCopyCtorAndOperator() = default; 30 DefinedCopyCtorAndOperator(const DefinedCopyCtorAndOperator &); 31 DefinedCopyCtorAndOperator &operator=(const DefinedCopyCtorAndOperator &); 32 }; 33 34 // CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingCopyCtor' defines a default destructor and a copy assignment operator but does not define a copy constructor, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] 35 class MissingCopyCtor { 36 ~MissingCopyCtor() = default; 37 MissingCopyCtor &operator=(const MissingCopyCtor &) = delete; 38 }; 39 40 // CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingCopyOperator' defines a default destructor and a copy constructor but does not define a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] 41 class MissingCopyOperator { 42 ~MissingCopyOperator() = default; 43 MissingCopyOperator(const MissingCopyOperator &) = delete; 44 }; 45 46 // CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingAll' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] 47 class MissingAll { 48 ~MissingAll() = default; 49 }; 50