1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2*67e74705SXin Li 3*67e74705SXin Li struct foo { 4*67e74705SXin Li int i; 5*67e74705SXin Li foo(); 6*67e74705SXin Li foo(int); 7*67e74705SXin Li foo(int, int); 8*67e74705SXin Li foo(bool); 9*67e74705SXin Li foo(char); 10*67e74705SXin Li foo(const float*); 11*67e74705SXin Li foo(const float&); 12*67e74705SXin Li foo(void*); 13*67e74705SXin Li }; 14*67e74705SXin Li 15*67e74705SXin Li // Good foo(int i)16*67e74705SXin Lifoo::foo (int i) : i(i) { 17*67e74705SXin Li } 18*67e74705SXin Li // Good foo()19*67e74705SXin Lifoo::foo () : foo(-1) { 20*67e74705SXin Li } 21*67e74705SXin Li // Good foo(int,int)22*67e74705SXin Lifoo::foo (int, int) : foo() { 23*67e74705SXin Li } 24*67e74705SXin Li foo(bool)25*67e74705SXin Lifoo::foo (bool) : foo(true) { // expected-error{{creates a delegation cycle}} 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li // Good foo(const float * f)29*67e74705SXin Lifoo::foo (const float* f) : foo(*f) { // expected-note{{it delegates to}} 30*67e74705SXin Li } 31*67e74705SXin Li foo(const float & f)32*67e74705SXin Lifoo::foo (const float &f) : foo(&f) { //expected-error{{creates a delegation cycle}} \ 33*67e74705SXin Li //expected-note{{which delegates to}} 34*67e74705SXin Li } 35*67e74705SXin Li foo(char)36*67e74705SXin Lifoo::foo (char) : 37*67e74705SXin Li i(3), 38*67e74705SXin Li foo(3) { // expected-error{{must appear alone}} 39*67e74705SXin Li } 40*67e74705SXin Li 41*67e74705SXin Li // This should not cause an infinite loop foo(void *)42*67e74705SXin Lifoo::foo (void*) : foo(4.0f) { 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li struct deleted_dtor { 46*67e74705SXin Li ~deleted_dtor() = delete; // expected-note{{'~deleted_dtor' has been explicitly marked deleted here}} 47*67e74705SXin Li deleted_dtor(); deleted_dtordeleted_dtor48*67e74705SXin Li deleted_dtor(int) : deleted_dtor() // expected-error{{attempt to use a deleted function}} 49*67e74705SXin Li {} 50*67e74705SXin Li }; 51