Home | History | Annotate | Download | only in class.temporary
      1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
      2 
      3 namespace test0 {
      4   struct A {
      5     A() = default;
      6     int x;
      7     int y;
      8 
      9     A(const A&) = delete; // expected-note {{function has been explicitly marked deleted here}}
     10   };
     11 
     12   void foo(...);
     13 
     14   void test() {
     15     A a;
     16     foo(a); // expected-error {{call to deleted constructor of 'test0::A'}}
     17   }
     18 }
     19 
     20 namespace test1 {
     21   struct A {
     22     A() = default;
     23     int x;
     24     int y;
     25 
     26   private:
     27     A(const A&) = default; // expected-note {{declared private here}}
     28   };
     29 
     30   void foo(...);
     31 
     32   void test() {
     33     A a;
     34     // FIXME: this error about variadics is bogus
     35     foo(a); // expected-error {{calling a private constructor of class 'test1::A'}} expected-error {{cannot pass object of non-trivial type 'test1::A' through variadic function}}
     36   }
     37 }
     38 
     39 // Don't enforce this in an unevaluated context.
     40 namespace test2 {
     41   struct A {
     42     A(const A&) = delete; // expected-note {{marked deleted here}}
     43   };
     44 
     45   typedef char one[1];
     46   typedef char two[2];
     47 
     48   one &meta(bool);
     49   two &meta(...);
     50 
     51   void a(A &a) {
     52     char check[sizeof(meta(a)) == 2 ? 1 : -1];
     53   }
     54 
     55   void b(A &a) {
     56     meta(a); // expected-error {{call to deleted constructor}}
     57   }
     58 }
     59