Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -Wno-uninitialized
      2 
      3 struct A {};
      4 
      5 struct BASE {
      6   operator A(); // expected-note {{candidate function}}
      7 };
      8 
      9 struct BASE1 {
     10  operator A();  // expected-note {{candidate function}}
     11 };
     12 
     13 class B : public BASE , public BASE1
     14 {
     15   public:
     16   B();
     17 } b;
     18 
     19 extern B f();
     20 
     21 const int& ri = (void)0; // expected-error {{reference to type 'const int' could not bind to an rvalue of type 'void'}}
     22 
     23 int main() {
     24         const A& rca = f(); // expected-error {{reference initialization of type 'const A &' with initializer of type 'B' is ambiguous}}
     25         A& ra = f(); // expected-error {{non-const lvalue reference to type 'A' cannot bind to a temporary of type 'B'}}
     26 }
     27 
     28 struct PR6139 { A (&x)[1]; };
     29 PR6139 x = {{A()}}; // expected-error{{non-const lvalue reference to type 'A [1]' cannot bind to an initializer list temporary}}
     30 
     31 struct PR6139b { A (&x)[1]; };
     32 PR6139b y = {A()}; // expected-error{{non-const lvalue reference to type 'A [1]' cannot bind to a temporary of type 'A'}}
     33 
     34 namespace PR16502 {
     35   struct A { int &&temporary; int x, y; };
     36   int f();
     37   const A &c = { 10, ++c.temporary };
     38 }
     39