| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s |
| |
| namespace test0 { |
| struct A { |
| A() = default; |
| int x; |
| int y; |
| |
| A(const A&) = delete; // expected-note {{'A' has been explicitly marked deleted here}} |
| }; |
| |
| void foo(...); |
| |
| void test() { |
| A a; |
| foo(a); // expected-error {{call to deleted constructor of 'test0::A'}} |
| } |
| } |
| |
| namespace test1 { |
| struct A { |
| A() = default; |
| int x; |
| int y; |
| |
| private: |
| A(const A&) = default; // expected-note {{declared private here}} |
| }; |
| |
| void foo(...); |
| |
| void test() { |
| A a; |
| foo(a); // expected-error {{calling a private constructor of class 'test1::A'}} |
| } |
| } |
| |
| // Don't enforce this in an unevaluated context. |
| namespace test2 { |
| struct A { |
| A(const A&) = delete; // expected-note {{marked deleted here}} |
| }; |
| |
| typedef char one[1]; |
| typedef char two[2]; |
| |
| one &meta(bool); |
| two &meta(...); |
| |
| void a(A &a) { |
| char check[sizeof(meta(a)) == 2 ? 1 : -1]; |
| } |
| |
| void b(A &a) { |
| meta(a); // expected-error {{call to deleted constructor}} |
| } |
| } |