xref: /llvm-project/clang/test/SemaCXX/overload-call-copycon.cpp (revision 2fe9883a961dfa872b0a20e8b56e7bf65fc98b6f)
1 // RUN: clang -fsyntax-only %s
2 class X { };
3 
4 int& copycon(X x);
5 float& copycon(...);
6 
7 void test_copycon(X x, X const xc, X volatile xv) {
8   int& i1 = copycon(x);
9   int& i2 = copycon(xc);
10   float& f1 = copycon(xv);
11 }
12 
13 class A {
14 public:
15   A(A&);
16 };
17 
18 class B : public A { };
19 
20 short& copycon2(A a);
21 int& copycon2(B b);
22 float& copycon2(...);
23 
24 void test_copycon2(A a, const A ac, B b, B const bc, B volatile bv) {
25   int& i1 = copycon2(b);
26   float& f1 = copycon2(bc);
27   float& f2 = copycon2(bv);
28   short& s1 = copycon2(a);
29   float& f3 = copycon2(ac);
30 }
31 
32 int& copycon3(A a);
33 float& copycon3(...);
34 
35 void test_copycon3(B b, const B bc) {
36   int& i1 = copycon3(b);
37   float& f1 = copycon3(bc);
38 }
39 
40 
41 class C : public B { };
42 
43 float& copycon4(A a);
44 int& copycon4(B b);
45 
46 void test_copycon4(C c) {
47   int& i = copycon4(c);
48 };
49