| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // RUN: %clang_cc1 -verify -std=c++1y %s
- // Example from the standard.
- namespace X {
- void p() {
- q(); // expected-error {{undeclared}}
- extern void q();
- }
- void middle() {
- q(); // expected-error {{undeclared}}
- }
- void q() { /*...*/ }
- void bottom() {
- q();
- }
- }
- int q();
- namespace Test1 {
- void f() {
- extern int a; // expected-note {{previous}}
- int g(void); // expected-note {{previous}}
- }
- double a; // expected-error {{different type: 'double' vs 'int'}}
- double g(); // expected-error {{differ only in their return type}}
- }
- namespace Test2 {
- void f() {
- extern int a; // expected-note {{previous}}
- int g(void); // expected-note {{previous}}
- }
- void h() {
- extern double a; // expected-error {{different type: 'double' vs 'int'}}
- double g(void); // expected-error {{differ only in their return type}}
- }
- }
- namespace Test3 {
- constexpr void (*f())() {
- void h();
- return &h;
- }
- constexpr void (*g())() {
- void h();
- return &h;
- }
- static_assert(f() == g(), "");
- }
- namespace Test4 {
- template<typename T>
- constexpr void (*f())() {
- void h();
- return &h;
- }
- static_assert(f<int>() == f<char>(), "");
- void h();
- static_assert(f<int>() == &h, "");
- }
- namespace Test5 {
- constexpr auto f() -> void (*)() {
- void g();
- struct X {
- friend void g();
- static constexpr auto h() -> void (*)() { return g; }
- };
- return X::h();
- }
- void g();
- static_assert(f() == g, "");
- }
|