brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · da1eb49 Raw
52 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3namespace N1 {4  struct X0 { };5 6  int& f0(X0);7}8 9namespace N2 {10  char& f0(char);11 12  template<typename T, typename Result>13  struct call_f0 {14    void test_f0(T t) {15      Result result = f0(t);16    }17  };18}19 20template struct N2::call_f0<int, char&>;21template struct N2::call_f0<N1::X0, int&>;22 23namespace N3 {24  template<typename T, typename Result>25  struct call_f0 {26    void test_f0(T t) {27      Result &result = f0(t); // expected-error {{undeclared identifier}} \28                                 expected-error {{neither visible in the template definition nor found by argument-dependent lookup}}29    }30  };31}32 33template struct N3::call_f0<int, char&>; // expected-note{{instantiation}}34template struct N3::call_f0<N1::X0, int&>;35 36short& f0(char); // expected-note {{should be declared prior to the call site}}37namespace N4 {38  template<typename T, typename Result>39  struct call_f0 {40    void test_f0(T t) {41      Result &result = f0(t);42    }43  };44}45 46template struct N4::call_f0<int, short&>;47template struct N4::call_f0<N1::X0, int&>;48template struct N3::call_f0<int, short&>; // expected-note{{instantiation}}49 50// FIXME: test overloaded function call operators, calls to member51// functions, etc.52