cxx0x-deleted-default-ctor.cpp revision 1f2f384eb7d0ea368819fe9cc4cc20a4b337ebea
11f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s
21f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt
31f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct non_trivial {
41f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  non_trivial();
51f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  non_trivial(const non_trivial&);
61f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  non_trivial& operator = (const non_trivial&);
71f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  ~non_trivial();
81f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
91f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt
101f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntunion bad_union { // expected-note {{marked deleted here}}
111f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  non_trivial nt;
121f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
131f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntbad_union u; // expected-error {{call to deleted constructor}}
141f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntunion bad_union2 { // expected-note {{marked deleted here}}
151f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  const int i;
161f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
171f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntbad_union2 u2; // expected-error {{call to deleted constructor}}
181f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt
191f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct bad_anon { // expected-note {{marked deleted here}}
201f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  union {
211f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt    non_trivial nt;
221f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  };
231f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
241f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntbad_anon a; // expected-error {{call to deleted constructor}}
251f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct bad_anon2 { // expected-note {{marked deleted here}}
261f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  union {
271f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt    const int i;
281f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  };
291f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
301f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntbad_anon2 a2; // expected-error {{call to deleted constructor}}
311f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt
321f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt// This would be great except that we implement
331f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntunion good_union {
341f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  const int i;
351f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  float f;
361f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
371f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood_union gu;
381f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct good_anon {
391f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  union {
401f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt    const int i;
411f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt    float f;
421f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  };
431f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
441f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood_anon ga;
451f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt
461f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntstruct good : non_trivial {
471f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt  non_trivial nt;
481f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Hunt};
491f2f384eb7d0ea368819fe9cc4cc20a4b337ebeaSean Huntgood g;
50