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 {{'A' has been explicitly marked deleted here}}
10   };
11 
12   void foo(...);
13 
test()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 
test()32   void test() {
33     A a;
34     foo(a); // expected-error {{calling a private constructor of class 'test1::A'}}
35   }
36 }
37 
38 // Don't enforce this in an unevaluated context.
39 namespace test2 {
40   struct A {
41     A(const A&) = delete; // expected-note {{marked deleted here}}
42   };
43 
44   typedef char one[1];
45   typedef char two[2];
46 
47   one &meta(bool);
48   two &meta(...);
49 
a(A & a)50   void a(A &a) {
51     char check[sizeof(meta(a)) == 2 ? 1 : -1];
52   }
53 
b(A & a)54   void b(A &a) {
55     meta(a); // expected-error {{call to deleted constructor}}
56   }
57 }
58