189a1d03eSRichard // RUN: %check_clang_tidy -std=c++98 %s cppcoreguidelines-special-member-functions %t
289a1d03eSRichard 
389a1d03eSRichard class DefinesDestructor {
489a1d03eSRichard   ~DefinesDestructor();
589a1d03eSRichard };
6*aa56e66bSRoy Jacobson // CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesDestructor' defines a destructor but does not define a copy constructor or a copy assignment operator [cppcoreguidelines-special-member-functions]
789a1d03eSRichard 
889a1d03eSRichard class DefinesCopyConstructor {
989a1d03eSRichard   DefinesCopyConstructor(const DefinesCopyConstructor &);
1089a1d03eSRichard };
1189a1d03eSRichard // CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesCopyConstructor' defines a copy constructor but does not define a destructor or a copy assignment operator [cppcoreguidelines-special-member-functions]
1289a1d03eSRichard 
1389a1d03eSRichard class DefinesCopyAssignment {
1489a1d03eSRichard   DefinesCopyAssignment &operator=(const DefinesCopyAssignment &);
1589a1d03eSRichard };
1689a1d03eSRichard // CHECK-MESSAGES: [[@LINE-3]]:7: warning: class 'DefinesCopyAssignment' defines a copy assignment operator but does not define a destructor or a copy constructor [cppcoreguidelines-special-member-functions]
1789a1d03eSRichard 
1889a1d03eSRichard class DefinesNothing {
1989a1d03eSRichard };
2089a1d03eSRichard 
2189a1d03eSRichard class DefinesEverything {
2289a1d03eSRichard   DefinesEverything(const DefinesEverything &);
2389a1d03eSRichard   DefinesEverything &operator=(const DefinesEverything &);
2489a1d03eSRichard   ~DefinesEverything();
2589a1d03eSRichard };
2689a1d03eSRichard 
27