74 lines · cpp
1// RUN: %clang_cc1 -verify -std=c++1y %s2 3// Example from the standard.4namespace X {5 void p() {6 q(); // expected-error {{undeclared}}7 extern void q();8 }9 void middle() {10 q(); // expected-error {{undeclared}}11 }12 void q() { /*...*/ }13 void bottom() {14 q();15 }16}17int q();18 19namespace Test1 {20 void f() {21 extern int a; // expected-note {{previous}}22 int g(void); // expected-note {{previous}}23 }24 double a; // expected-error {{different type: 'double' vs 'int'}}25 double g(); // expected-error {{differ only in their return type}}26}27 28namespace Test2 {29 void f() {30 extern int a; // expected-note {{previous}}31 int g(void); // expected-note {{previous}}32 }33 void h() {34 extern double a; // expected-error {{different type: 'double' vs 'int'}}35 double g(void); // expected-error {{differ only in their return type}}36 }37}38 39namespace Test3 {40 constexpr void (*f())() {41 void h();42 return &h;43 }44 constexpr void (*g())() {45 void h();46 return &h;47 }48 static_assert(f() == g(), "");49}50 51namespace Test4 {52 template<typename T>53 constexpr void (*f())() {54 void h();55 return &h;56 }57 static_assert(f<int>() == f<char>(), "");58 void h();59 static_assert(f<int>() == &h, "");60}61 62namespace Test5 {63 constexpr auto f() -> void (*)() {64 void g();65 struct X {66 friend void g();67 static constexpr auto h() -> void (*)() { return g; }68 };69 return X::h();70 }71 void g();72 static_assert(f() == g, "");73}74