blob: 3bd4c8e96ebe9506d3d15e45ab70d74d4177abab [file] [log] [blame]
Manuel Klimek8f9e4442015-10-22 14:54:50 +00001// RUN: %check_clang_tidy %s modernize-use-default %t -- -- -std=c++11 -fno-delayed-template-parsing
Angel Garcia Gomez8dedeb02015-10-21 12:58:15 +00002
3class A {
4public:
5 A();
6 ~A();
7};
8
9A::A() {}
10// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: use '= default' to define a trivial default constructor [modernize-use-default]
11// CHECK-FIXES: A::A() = default;
12A::~A() {}
13// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: use '= default' to define a trivial destructor [modernize-use-default]
14// CHECK-FIXES: A::~A() = default;
15
16// Inline definitions.
17class B {
18public:
19 B() {}
20 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
21 // CHECK-FIXES: B() = default;
22 ~B() {}
23 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
24 // CHECK-FIXES: ~B() = default;
25};
26
27void f();
28
29class C {
30public:
31 // Non-empty constructor body.
32 C() { f(); }
33 // Non-empty destructor body.
34 ~C() { f(); }
35};
36
37class D {
38public:
39 // Constructor with initializer.
40 D() : Field(5) {}
41 // Constructor with arguments.
42 D(int Arg1, int Arg2) {}
43 int Field;
44};
45
46// Private constructor/destructor.
47class E {
48 E() {}
49 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
50 // CHECK-FIXES: E() = default;
51 ~E() {}
52 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
53 // CHECK-FIXES: ~E() = default;
54};
55
56// struct.
57struct F {
58 F() {}
59 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
60 // CHECK-FIXES: F() = default;
61 ~F() {}
62 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
63 // CHECK-FIXES: F() = default;
64};
65
66// Deleted constructor/destructor.
67class G {
68public:
69 G() = delete;
70 ~G() = delete;
71};
72
73// Do not remove other keywords.
74class H {
75public:
76 explicit H() {}
77 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
78 // CHECK-FIXES: explicit H() = default;
79 virtual ~H() {}
80 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
81 // CHECK-FIXES: virtual ~H() = default;
82};
83
84// Nested class.
85struct I {
86 struct II {
87 II() {}
88 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use '= default'
89 // CHECK-FIXES: II() = default;
90 ~II() {}
91 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use '= default'
92 // CHECK-FIXES: ~II() = default;
93 };
94 int Int;
95};
96
97// Class template.
98template <class T>
99class J {
100public:
101 J() {}
102 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
103 // CHECK-FIXES: J() = default;
104 ~J() {}
105 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
106 // CHECK-FIXES: ~J() = default;
107};
108
109// Non user-provided constructor/destructor.
110struct K {
111 int Int;
112};
113void g() {
114 K *PtrK = new K();
115 PtrK->~K();
116 delete PtrK;
117}
118
119// Already using default.
120struct L {
121 L() = default;
122 ~L() = default;
123};
124struct M {
125 M();
126 ~M();
127};
128M::M() = default;
129M::~M() = default;
130
131// Delegating constructor and overriden destructor.
132struct N : H {
133 N() : H() {}
134 ~N() override {}
135 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
136 // CHECK-FIXES: ~N() override = default;
137};