1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // XFAIL: *
3 
4 // Note: we fail this test because we perform template instantiation
5 // at the end of the translation unit, so argument-dependent lookup
6 // finds functions that occur after the point of instantiation. Note
7 // that GCC fails this test; EDG passes the test in strict mode, but
8 // not in relaxed mode.
9 namespace N {
10   struct A { };
11   struct B : public A { };
12 
13   int& f0(A&);
14 }
15 
16 template<typename T, typename Result>
17 struct X0 {
18   void test_f0(T t) {
19     Result r = f0(t);
20   };
21 };
22 
23 void test_f0() {
24   X0<N::A, int&> xA;
25   xA.test_f0(N::A());
26   X0<N::B, int&> xB;
27   xB.test_f0(N::B());
28 }
29 
30 namespace N {
31   char& f0(B&);
32 }
33