[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaCXX / cxx0x-deleted-default-ctor.cpp
blob7b5697bfab56a8396c19a9f0c0d6f7806b783be0
1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
3 struct non_trivial {
4 non_trivial();
5 non_trivial(const non_trivial&);
6 non_trivial& operator = (const non_trivial&);
7 ~non_trivial();
8 };
10 union bad_union {
11 non_trivial nt; // expected-note {{non-trivial default constructor}}
13 bad_union u; // expected-error {{call to implicitly-deleted default constructor}}
14 union bad_union2 { // expected-note {{all data members are const-qualified}}
15 const int i;
17 bad_union2 u2; // expected-error {{call to implicitly-deleted default constructor}}
19 struct bad_anon {
20 union {
21 non_trivial nt; // expected-note {{non-trivial default constructor}}
24 bad_anon a; // expected-error {{call to implicitly-deleted default constructor}}
25 struct bad_anon2 {
26 union { // expected-note {{all data members of an anonymous union member are const-qualified}}
27 const int i;
30 bad_anon2 a2; // expected-error {{call to implicitly-deleted default constructor}}
32 // This would be great except that we implement
33 union good_union {
34 const int i;
35 float f;
37 good_union gu;
38 struct good_anon {
39 union {
40 const int i;
41 float f;
44 good_anon ga;
46 struct good : non_trivial {
47 non_trivial nt;
49 good g;
51 struct bad_const_inner {
52 int x;
55 struct bad_const {
56 const bad_const_inner g; // expected-note {{field 'g' of const-qualified type 'const bad_const_inner' would not be initialized}}
58 bad_const bc; // expected-error {{call to implicitly-deleted default constructor}}
60 struct good_const {
61 const non_trivial nt;
63 good_const gc;
65 struct no_default {
66 no_default() = delete; // expected-note 5{{deleted here}}
68 struct no_dtor {
69 ~no_dtor() = delete; // expected-note 2{{deleted here}}
72 struct bad_field_default {
73 no_default nd; // expected-note {{field 'nd' has a deleted default constructor}}
75 bad_field_default bfd; // expected-error {{call to implicitly-deleted default constructor}}
76 struct bad_base_default : no_default { // expected-note {{base class 'no_default' has a deleted default constructor}}
78 bad_base_default bbd; // expected-error {{call to implicitly-deleted default constructor}}
80 struct bad_field_dtor {
81 no_dtor nd; // expected-note {{field 'nd' has a deleted destructor}}
83 bad_field_dtor bfx; // expected-error {{call to implicitly-deleted default constructor}}
84 struct bad_base_dtor : no_dtor { // expected-note {{base class 'no_dtor' has a deleted destructor}}
86 bad_base_dtor bbx; // expected-error {{call to implicitly-deleted default constructor}}
88 struct ambiguous_default {
89 ambiguous_default();
90 ambiguous_default(int = 2);
92 struct has_amb_field {
93 ambiguous_default ad; // expected-note {{field 'ad' has multiple default constructors}}
95 has_amb_field haf; // expected-error {{call to implicitly-deleted default constructor}}
97 class inaccessible_default {
98 inaccessible_default();
100 struct has_inacc_field {
101 inaccessible_default id; // expected-note {{field 'id' has an inaccessible default constructor}}
103 has_inacc_field hif; // expected-error {{call to implicitly-deleted default constructor}}
105 class friend_default {
106 friend struct has_friend;
107 friend_default();
109 struct has_friend {
110 friend_default fd;
112 has_friend hf;
114 struct defaulted_delete {
115 no_default nd; // expected-note 2{{because field 'nd' has a deleted default constructor}}
116 defaulted_delete() = default; // expected-note{{implicitly deleted here}} expected-warning {{implicitly deleted}} expected-note{{replace 'default'}}
118 defaulted_delete dd; // expected-error {{call to implicitly-deleted default constructor}}
120 struct late_delete {
121 no_default nd; // expected-note {{because field 'nd' has a deleted default constructor}}
122 late_delete();
124 late_delete::late_delete() = default; // expected-error {{would delete it}}
126 namespace empty {
127 static union {}; // expected-warning {{does not declare anything}}
128 static union { union {}; }; // expected-warning {{does not declare anything}}
129 static union { struct {}; }; // expected-warning {{does not declare anything}}
130 static union { union { union {}; }; }; // expected-warning {{does not declare anything}}
131 static union { union { struct {}; }; }; // expected-warning {{does not declare anything}}
132 static union { struct { union {}; }; }; // expected-warning {{does not declare anything}}
133 static union { struct { struct {}; }; }; // expected-warning {{does not declare anything}}