blob: 0bf89145302baacf66dbb825eef0dccac1729bfa [file] [log] [blame]
Sean Hunt1f2f3842011-05-17 00:19:05 +00001// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s
2
3struct non_trivial {
4 non_trivial();
5 non_trivial(const non_trivial&);
6 non_trivial& operator = (const non_trivial&);
7 ~non_trivial();
8};
9
10union bad_union { // expected-note {{marked deleted here}}
11 non_trivial nt;
12};
13bad_union u; // expected-error {{call to deleted constructor}}
14union bad_union2 { // expected-note {{marked deleted here}}
15 const int i;
16};
17bad_union2 u2; // expected-error {{call to deleted constructor}}
18
19struct bad_anon { // expected-note {{marked deleted here}}
20 union {
21 non_trivial nt;
22 };
23};
24bad_anon a; // expected-error {{call to deleted constructor}}
25struct bad_anon2 { // expected-note {{marked deleted here}}
26 union {
27 const int i;
28 };
29};
30bad_anon2 a2; // expected-error {{call to deleted constructor}}
31
32// This would be great except that we implement
33union good_union {
34 const int i;
35 float f;
36};
37good_union gu;
38struct good_anon {
39 union {
40 const int i;
41 float f;
42 };
43};
44good_anon ga;
45
46struct good : non_trivial {
47 non_trivial nt;
48};
49good g;