• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
test_non_const_copy(const ImplicitNonConstCopy1 & cincc1,const ImplicitNonConstCopy2 & cincc2,const ImplicitNonConstCopy3 & cincc3,const ImplicitNonConstCopy4 & cincc4)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