1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3struct ConstCopy { 4 ConstCopy(); 5 ConstCopy(const ConstCopy&); 6}; 7 8struct NonConstCopy { 9 NonConstCopy(); 10 NonConstCopy(NonConstCopy&); 11}; 12 13struct VirtualInheritsNonConstCopy : virtual NonConstCopy { 14 VirtualInheritsNonConstCopy(); 15 VirtualInheritsNonConstCopy(const VirtualInheritsNonConstCopy&); 16}; 17 18struct ImplicitNonConstCopy1 : NonConstCopy { // expected-note {{candidate constructor}} 19 ImplicitNonConstCopy1(); // expected-note {{candidate constructor}} 20}; 21 22struct ImplicitNonConstCopy2 { // expected-note {{candidate constructor}} 23 ImplicitNonConstCopy2(); // expected-note {{candidate constructor}} 24 NonConstCopy ncc; 25}; 26 27struct ImplicitNonConstCopy3 { // expected-note {{candidate constructor}} 28 ImplicitNonConstCopy3(); // expected-note {{candidate constructor}} 29 NonConstCopy ncc_array[2][3]; 30}; 31 32struct ImplicitNonConstCopy4 : VirtualInheritsNonConstCopy { // expected-note {{candidate constructor}} 33 ImplicitNonConstCopy4(); // expected-note {{candidate constructor}} 34}; 35 36void 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