58 lines · cpp
1// RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -config="{CheckOptions: {cppcoreguidelines-special-member-functions.IgnoreMacros: false}}" --2 3class DefinesDestructor {4 ~DefinesDestructor();5};6// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesDestructor' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]7 8class DefinesDefaultedDestructor {9 ~DefinesDefaultedDestructor() = default;10};11// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesDefaultedDestructor' 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]12 13class DefinesCopyConstructor {14 DefinesCopyConstructor(const DefinesCopyConstructor &);15};16// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesCopyConstructor' defines a copy constructor but does not define a destructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]17 18class DefinesNothing {19};20 21class DefinesEverything {22 DefinesEverything(const DefinesEverything &);23 DefinesEverything &operator=(const DefinesEverything &);24 DefinesEverything(DefinesEverything &&);25 DefinesEverything &operator=(DefinesEverything &&);26 ~DefinesEverything();27};28 29#define DEFINE_DESTRUCTOR_ONLY(ClassName) \30 class ClassName { \31 ~ClassName(); \32 };33 34#define DEFINE_COPY_CTOR_ONLY(ClassName) \35 class ClassName { \36 ClassName(const ClassName &); \37 };38 39#define DEFINE_CLASS_WITH_DTOR(ClassName) \40 class ClassName { \41 ~ClassName(); \42 };43 44DEFINE_DESTRUCTOR_ONLY(MacroDefinedClass1)45// CHECK-MESSAGES: [[@LINE-1]]:24: warning: class 'MacroDefinedClass1' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator46DEFINE_COPY_CTOR_ONLY(MacroDefinedClass2)47// CHECK-MESSAGES: [[@LINE-1]]:23: warning: class 'MacroDefinedClass2' defines a copy constructor but does not define a destructor, a copy assignment operator, a move constructor or a move assignment operator48DEFINE_CLASS_WITH_DTOR(MacroDefinedClass3)49// CHECK-MESSAGES: [[@LINE-1]]:24: warning: class 'MacroDefinedClass3' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator50 51// Test partial macro expansion52#define CLASS_NAME MacroNamedClass53class CLASS_NAME {54 ~MacroNamedClass();55};56// CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'MacroNamedClass' defines a destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator57 58