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