// RUN: %clang_cc1 -fsyntax-only -verify %s namespace N1 { struct X0 { }; int& f0(X0); } namespace N2 { char& f0(char); template struct call_f0 { void test_f0(T t) { Result result = f0(t); } }; } template struct N2::call_f0; template struct N2::call_f0; namespace N3 { template struct call_f0 { void test_f0(T t) { Result &result = f0(t); // expected-error {{undeclared identifier}} \ expected-error {{neither visible in the template definition nor found by argument-dependent lookup}} } }; } template struct N3::call_f0; // expected-note{{instantiation}} template struct N3::call_f0; short& f0(char); // expected-note {{should be declared prior to the call site}} namespace N4 { template struct call_f0 { void test_f0(T t) { Result &result = f0(t); } }; } template struct N4::call_f0; template struct N4::call_f0; template struct N3::call_f0; // expected-note{{instantiation}} // FIXME: test overloaded function call operators, calls to member // functions, etc.