1 // RUN: %clang_cc1 -fsyntax-only -verify %s
8 void test_f0(int i
, int *ip
) {
13 template<typename T
, typename U
>
19 void test_f1(int i
, float f
) {
21 float &fr1
= f1(i
, i
);
22 float &fr2
= f1(f
, f
);
25 template<typename T
, typename U
>
31 template<typename T
, typename U
>
37 void test_f2(int i
, A
<int, float> aif
, A
<int, int> aii
) {
43 template<typename T
, typename U
>
44 int &f3(T
*, U
); // expected-note{{candidate}}
46 template<typename T
, typename U
>
47 float &f3(T
, U
*); // expected-note{{candidate}}
49 void test_f3(int i
, int *ip
, float *fp
) {
51 float &fr
= f3(i
, fp
);
52 f3(ip
, ip
); // expected-error{{ambiguous}}
61 void test_f4(int i
, const int ic
) {
66 template<typename T
, typename U
>
67 int &f5(T
&, const U
&); // expected-note{{candidate}}
69 template<typename T
, typename U
>
70 float &f5(const T
&, U
&); // expected-note{{candidate}}
72 void test_f5(int i
, const int ic
) {
73 f5(i
, i
); // expected-error{{ambiguous}}
76 template<typename T
, typename U
>
79 template<typename T
, typename U
>
80 float &f6(const T
&, U
&);
82 void test_f6(int i
, const int ic
) {
84 float &fr
= f6(ic
, ic
);
88 template<typename T
, typename U
> operator A
<T
, U
>();
89 template<typename T
> operator A
<T
, T
>();
92 void fun(CrazyFun cf
) {
93 A
<int, float> aif
= cf
;