1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 // rdar4641403 6 namespace N { 7 struct X { // expected-note{{candidate found by name lookup}} 8 float b; 9 }; 10 } 11 12 using namespace N; 13 14 typedef struct { 15 int a; 16 } X; // expected-note{{candidate found by name lookup}} 17 18 19 struct Y { }; 20 void Y(int) { } 21 22 void f() { 23 X *x; // expected-error{{reference to 'X' is ambiguous}} 24 Y(1); // okay 25 } 26 27 namespace PR17731 { 28 void f() { 29 struct S { S() {} }; 30 int S(void); 31 int a = S(); 32 struct S b; 33 { 34 int S(void); 35 int a = S(); 36 struct S c = b; 37 } 38 { 39 struct S { S() {} }; // expected-note {{candidate constructor (the implicit copy constructor) not viable}} 40 #if __cplusplus >= 201103L // C++11 or later 41 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} 42 #endif 43 int a = S(); // expected-error {{no viable conversion from 'S'}} 44 struct S c = b; // expected-error {{no viable conversion from 'struct S'}} 45 } 46 } 47 void g() { 48 int S(void); 49 struct S { S() {} }; 50 int a = S(); 51 struct S b; 52 { 53 int S(void); 54 int a = S(); 55 struct S c = b; 56 } 57 { 58 struct S { S() {} }; // expected-note {{candidate constructor (the implicit copy constructor) not viable}} 59 #if __cplusplus >= 201103L // C++11 or later 60 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} 61 #endif 62 int a = S(); // expected-error {{no viable conversion from 'S'}} 63 struct S c = b; // expected-error {{no viable conversion from 'struct S'}} 64 } 65 } 66 67 struct A { 68 struct B; 69 void f(); 70 int B; 71 }; 72 struct A::B {}; 73 void A::f() { 74 B = 123; 75 struct B b; 76 } 77 } 78