1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | struct ConstCopy { |
4 | ConstCopy(); |
5 | ConstCopy(const ConstCopy&); |
6 | }; |
7 | |
8 | struct NonConstCopy { |
9 | NonConstCopy(); |
10 | NonConstCopy(NonConstCopy&); |
11 | }; |
12 | |
13 | struct VirtualInheritsNonConstCopy : virtual NonConstCopy { |
14 | VirtualInheritsNonConstCopy(); |
15 | VirtualInheritsNonConstCopy(const VirtualInheritsNonConstCopy&); |
16 | }; |
17 | |
18 | struct ImplicitNonConstCopy1 : NonConstCopy { // expected-note {{candidate constructor}} |
19 | ImplicitNonConstCopy1(); // expected-note {{candidate constructor}} |
20 | }; |
21 | |
22 | struct ImplicitNonConstCopy2 { // expected-note {{candidate constructor}} |
23 | ImplicitNonConstCopy2(); // expected-note {{candidate constructor}} |
24 | NonConstCopy ncc; |
25 | }; |
26 | |
27 | struct ImplicitNonConstCopy3 { // expected-note {{candidate constructor}} |
28 | ImplicitNonConstCopy3(); // expected-note {{candidate constructor}} |
29 | NonConstCopy ncc_array[2][3]; |
30 | }; |
31 | |
32 | struct ImplicitNonConstCopy4 : VirtualInheritsNonConstCopy { // expected-note {{candidate constructor}} |
33 | ImplicitNonConstCopy4(); // expected-note {{candidate constructor}} |
34 | }; |
35 | |
36 | void test_non_const_copy(const ImplicitNonConstCopy1 &cincc1, |
37 | const ImplicitNonConstCopy2 &cincc2, |
38 | const ImplicitNonConstCopy3 &cincc3, |
39 | const ImplicitNonConstCopy4 &cincc4) { |
40 | (void)sizeof(ImplicitNonConstCopy1(cincc1)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy1' to 'ImplicitNonConstCopy1'}} |
41 | (void)sizeof(ImplicitNonConstCopy2(cincc2)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy2' to 'ImplicitNonConstCopy2'}} |
42 | (void)sizeof(ImplicitNonConstCopy3(cincc3)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy3' to 'ImplicitNonConstCopy3'}} |
43 | (void)sizeof(ImplicitNonConstCopy4(cincc4)); // expected-error{{no matching conversion for functional-style cast from 'const ImplicitNonConstCopy4' to 'ImplicitNonConstCopy4'}} |
44 | } |
45 | |