xref: /aosp_15_r20/external/clang/test/SemaCXX/dr1301.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -verify %s
2*67e74705SXin Li struct A { // expected-note 2{{candidate}}
3*67e74705SXin Li   A(int); // expected-note {{candidate}}
4*67e74705SXin Li   int n;
5*67e74705SXin Li };
6*67e74705SXin Li int a = A().n; // expected-error {{no matching constructor}}
7*67e74705SXin Li 
8*67e74705SXin Li struct B {
9*67e74705SXin Li   B() = delete; // expected-note 3{{here}}
10*67e74705SXin Li   int n;
11*67e74705SXin Li };
12*67e74705SXin Li int b = B().n; // expected-error {{call to deleted}}
13*67e74705SXin Li 
14*67e74705SXin Li struct C {
15*67e74705SXin Li   B b; // expected-note {{deleted default constructor}}
16*67e74705SXin Li };
17*67e74705SXin Li int c = C().b.n; // expected-error {{call to implicitly-deleted default}}
18*67e74705SXin Li 
19*67e74705SXin Li struct D {
20*67e74705SXin Li   D() = default; // expected-note {{here}}
21*67e74705SXin Li   B b; // expected-note {{'b' has a deleted default constructor}}
22*67e74705SXin Li };
23*67e74705SXin Li int d = D().b.n; // expected-error {{call to implicitly-deleted default}}
24*67e74705SXin Li 
25*67e74705SXin Li struct E {
26*67e74705SXin Li   E() = default;
27*67e74705SXin Li   int n;
28*67e74705SXin Li };
29*67e74705SXin Li int e = E().n; // ok
30*67e74705SXin Li 
31*67e74705SXin Li struct F {
32*67e74705SXin Li   F();
33*67e74705SXin Li   int n;
34*67e74705SXin Li };
35*67e74705SXin Li int f = F().n; // ok
36*67e74705SXin Li 
37*67e74705SXin Li union G {
38*67e74705SXin Li   F f; // expected-note {{non-trivial default constructor}}
39*67e74705SXin Li };
40*67e74705SXin Li int g = G().f.n; // expected-error {{call to implicitly-deleted default}}
41*67e74705SXin Li 
42*67e74705SXin Li struct H {
43*67e74705SXin Li   int n;
44*67e74705SXin Li private:
45*67e74705SXin Li   H(); // expected-note {{here}}
46*67e74705SXin Li };
47*67e74705SXin Li int h = H().n; // expected-error {{private constructor}}
48*67e74705SXin Li 
49*67e74705SXin Li struct I {
50*67e74705SXin Li   H h; // expected-note {{inaccessible default constructor}}
51*67e74705SXin Li };
52*67e74705SXin Li int i = I().h.n; // expected-error {{call to implicitly-deleted default}}
53*67e74705SXin Li 
54*67e74705SXin Li struct J {
55*67e74705SXin Li   J();
56*67e74705SXin Li   virtual int f();
57*67e74705SXin Li   int n;
58*67e74705SXin Li };
59*67e74705SXin Li int j1 = J().n; // ok
60*67e74705SXin Li int j2 = J().f(); // ok
61*67e74705SXin Li 
62*67e74705SXin Li union K {
63*67e74705SXin Li   J j; // expected-note 2{{non-trivial default constructor}}
64*67e74705SXin Li   int m;
65*67e74705SXin Li };
66*67e74705SXin Li int k1 = K().j.n; // expected-error {{call to implicitly-deleted default}}
67*67e74705SXin Li int k2 = K().j.f(); // expected-error {{call to implicitly-deleted default}}
68