78 lines
1.8 KiB
C++
78 lines
1.8 KiB
C++
|
// 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;
|
||
|
}
|
||
|
}
|