1*e8a3ddafSNathan James // RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -config="{CheckOptions: {cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted: true}}" -- 289a1d03eSRichard 389a1d03eSRichard class DefinesEverything { 489a1d03eSRichard DefinesEverything(const DefinesEverything &); 589a1d03eSRichard DefinesEverything(DefinesEverything &&); 689a1d03eSRichard DefinesEverything &operator=(const DefinesEverything &); 789a1d03eSRichard DefinesEverything &operator=(DefinesEverything &&); 889a1d03eSRichard ~DefinesEverything(); 989a1d03eSRichard }; 1089a1d03eSRichard 1189a1d03eSRichard class DefinesNothing { 1289a1d03eSRichard }; 1389a1d03eSRichard 1489a1d03eSRichard class DeletedCopyCtorAndOperator { 1589a1d03eSRichard ~DeletedCopyCtorAndOperator() = default; 1689a1d03eSRichard DeletedCopyCtorAndOperator(const DeletedCopyCtorAndOperator &) = delete; 1789a1d03eSRichard DeletedCopyCtorAndOperator &operator=(const DeletedCopyCtorAndOperator &) = delete; 1889a1d03eSRichard }; 1989a1d03eSRichard 2089a1d03eSRichard // 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] 2189a1d03eSRichard class DefaultedCopyCtorAndOperator { 2289a1d03eSRichard ~DefaultedCopyCtorAndOperator() = default; 2389a1d03eSRichard DefaultedCopyCtorAndOperator(const DefaultedCopyCtorAndOperator &) = default; 2489a1d03eSRichard DefaultedCopyCtorAndOperator &operator=(const DefaultedCopyCtorAndOperator &) = default; 2589a1d03eSRichard }; 2689a1d03eSRichard 2789a1d03eSRichard // 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] 2889a1d03eSRichard class DefinedCopyCtorAndOperator { 2989a1d03eSRichard ~DefinedCopyCtorAndOperator() = default; 3089a1d03eSRichard DefinedCopyCtorAndOperator(const DefinedCopyCtorAndOperator &); 3189a1d03eSRichard DefinedCopyCtorAndOperator &operator=(const DefinedCopyCtorAndOperator &); 3289a1d03eSRichard }; 3389a1d03eSRichard 3489a1d03eSRichard // 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] 3589a1d03eSRichard class MissingCopyCtor { 3689a1d03eSRichard ~MissingCopyCtor() = default; 3789a1d03eSRichard MissingCopyCtor &operator=(const MissingCopyCtor &) = delete; 3889a1d03eSRichard }; 3989a1d03eSRichard 4089a1d03eSRichard // 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] 4189a1d03eSRichard class MissingCopyOperator { 4289a1d03eSRichard ~MissingCopyOperator() = default; 4389a1d03eSRichard MissingCopyOperator(const MissingCopyOperator &) = delete; 4489a1d03eSRichard }; 4589a1d03eSRichard 4689a1d03eSRichard // 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] 4789a1d03eSRichard class MissingAll { 4889a1d03eSRichard ~MissingAll() = default; 4989a1d03eSRichard }; 50