Home | History | Annotate | Download | only in class.copy
      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