user-defined-conversions.cpp revision cb9b977d5989efc1e5bc7684091912ca2915aacb
1// RUN: clang -fsyntax-only -verify %s
2struct X {
3  operator bool();
4};
5
6int& f(bool);
7float& f(int);
8
9void f_test(X x) {
10  int& i1 = f(x);
11}
12
13struct Y {
14  operator short();
15  operator float();
16};
17
18void g(int);
19
20void g_test(Y y) {
21  g(y);
22  short s;
23  s = y;
24}
25
26struct A { };
27struct B : A { };
28
29struct C {
30  operator B&();
31};
32
33// Test reference binding via an lvalue conversion function.
34void h(volatile A&);
35void h_test(C c) {
36  h(c);
37}
38