// RUN: %clang_cc1 -fsyntax-only -verify %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s // rdar4641403 namespace N { struct X { // expected-note{{candidate found by name lookup}} float b; }; } using namespace N; typedef struct { int a; } X; // expected-note{{candidate found by name lookup}} struct Y { }; void Y(int) { } void f() { X *x; // expected-error{{reference to 'X' is ambiguous}} Y(1); // okay } namespace PR17731 { void f() { struct S { S() {} }; int S(void); int a = S(); struct S b; { int S(void); int a = S(); struct S c = b; } { struct S { S() {} }; // expected-note {{candidate constructor (the implicit copy constructor) not viable}} #if __cplusplus >= 201103L // C++11 or later // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} #endif int a = S(); // expected-error {{no viable conversion from 'S'}} struct S c = b; // expected-error {{no viable conversion from 'struct S'}} } } void g() { int S(void); struct S { S() {} }; int a = S(); struct S b; { int S(void); int a = S(); struct S c = b; } { struct S { S() {} }; // expected-note {{candidate constructor (the implicit copy constructor) not viable}} #if __cplusplus >= 201103L // C++11 or later // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} #endif int a = S(); // expected-error {{no viable conversion from 'S'}} struct S c = b; // expected-error {{no viable conversion from 'struct S'}} } } struct A { struct B; void f(); int B; }; struct A::B {}; void A::f() { B = 123; struct B b; } }