1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 struct S { 4 S (S); // expected-error {{copy constructor must pass its first argument by reference}} 5 }; 6 7 S f(); 8 9 void g() { 10 S a( f() ); 11 } 12 13 class foo { 14 foo(foo&, int); // expected-note {{previous}} 15 foo(int); // expected-note {{previous}} 16 foo(const foo&); // expected-note {{previous}} 17 }; 18 19 foo::foo(foo&, int = 0) { } // expected-error {{makes this constructor a copy constructor}} 20 foo::foo(int = 0) { } // expected-error {{makes this constructor a default constructor}} 21 foo::foo(const foo& = 0) { } //expected-error {{makes this constructor a default constructor}} 22 23 namespace PR6064 { 24 struct A { 25 A() { } 26 inline A(A&, int); // expected-note {{previous}} 27 }; 28 29 A::A(A&, int = 0) { } // expected-error {{makes this constructor a copy constructor}} 30 31 void f() { 32 A const a; 33 A b(a); 34 } 35 } 36 37 namespace PR10618 { 38 struct A { 39 A(int, int, int); // expected-note {{previous}} 40 }; 41 A::A(int a = 0, // expected-error {{makes this constructor a default constructor}} 42 int b = 0, 43 int c = 0) {} 44 45 struct B { 46 B(int); 47 B(const B&, int); // expected-note {{previous}} 48 }; 49 B::B(const B& = B(0), // expected-error {{makes this constructor a default constructor}} 50 int = 0) { 51 } 52 53 struct C { 54 C(const C&, int); // expected-note {{previous}} 55 }; 56 C::C(const C&, 57 int = 0) { // expected-error {{makes this constructor a copy constructor}} 58 } 59 } 60