Home | History | Annotate | Download | only in SemaCXX
      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