1 // RUN: %check_clang_tidy %s bugprone-undelegated-constructor %t
2
3 struct Ctor;
4 Ctor foo();
5
6 struct Ctor {
7 Ctor();
8 Ctor(int);
9 Ctor(int, int);
CtorCtor10 Ctor(Ctor *i) {
11 Ctor();
12 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor? A temporary object is created here instead [bugprone-undelegated-constructor]
13 Ctor(0);
14 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor?
15 Ctor(1, 2);
16 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor?
17 foo();
18 }
19 };
20
Ctor()21 Ctor::Ctor() {
22 Ctor(1);
23 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: did you intend to call a delegated constructor?
24 }
25
Ctor(int i)26 Ctor::Ctor(int i) : Ctor(i, 1) {} // properly delegated.
27
28 struct Dtor {
29 Dtor();
30 Dtor(int);
31 Dtor(int, int);
DtorDtor32 Dtor(Ctor *i) {
33 Dtor();
34 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor?
35 Dtor(0);
36 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor?
37 Dtor(1, 2);
38 // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: did you intend to call a delegated constructor?
39 }
40 ~Dtor();
41 };
42
43 struct Base {};
44 struct Derived : public Base {
DerivedDerived45 Derived() { Base(); }
46 // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: did you intend to call a delegated constructor?
47 };
48
49 template <typename T>
50 struct TDerived : public Base {
TDerivedTDerived51 TDerived() { Base(); }
52 };
53
54 TDerived<int> t;
55