Douglas Gregor | 6b90686 | 2009-08-21 00:16:32 +0000 | [diff] [blame^] | 1 | // RUN: clang-cc -fsyntax-only -verify %s |
Douglas Gregor | 37b372b | 2009-08-20 22:52:58 +0000 | [diff] [blame] | 2 | |
| 3 | struct X { |
Douglas Gregor | 6b90686 | 2009-08-21 00:16:32 +0000 | [diff] [blame^] | 4 | template<typename T> T& f0(T); |
| 5 | |
| 6 | void g0(int i, double d) { |
| 7 | int &ir = f0(i); |
| 8 | double &dr = f0(d); |
| 9 | } |
| 10 | |
| 11 | template<typename T> T& f1(T); |
| 12 | template<typename T, typename U> U& f1(T, U); |
| 13 | |
| 14 | void g1(int i, double d) { |
| 15 | int &ir1 = f1(i); |
| 16 | int &ir2 = f1(d, i); |
| 17 | int &ir3 = f1(i, i); |
| 18 | } |
Douglas Gregor | 37b372b | 2009-08-20 22:52:58 +0000 | [diff] [blame] | 19 | }; |
Douglas Gregor | 6b90686 | 2009-08-21 00:16:32 +0000 | [diff] [blame^] | 20 | |
| 21 | void test_X_f0(X x, int i, float f) { |
| 22 | int &ir = x.f0(i); |
| 23 | float &fr = x.f0(f); |
| 24 | } |
| 25 | |
| 26 | void test_X_f1(X x, int i, float f) { |
| 27 | int &ir1 = x.f1(i); |
| 28 | int &ir2 = x.f1(f, i); |
| 29 | int &ir3 = x.f1(i, i); |
| 30 | } |