brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 9a85eac Raw
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