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