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 | |
40 | namespace IncompleteTest { |
41 | struct String; |
42 | // expected-error@+1 {{reference to incomplete type 'const IncompleteTest::String' could not bind to an lvalue of type 'const char [1]'}} |
43 | void takeString(const String& = "") {} // expected-note {{passing argument to parameter here}} expected-note {{candidate function}} |
44 | void test() { |
45 | takeString(); // expected-error {{no matching function for call}} |
46 | } |
47 | } |
48 | |