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 | |