11d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith// RUN: %clang_cc1 -std=c++11 -verify %s 21d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct A { // expected-note 2{{candidate}} 31d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith A(int); // expected-note {{candidate}} 41d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 51d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 61d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint a = A().n; // expected-error {{no matching constructor}} 71d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 81d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct B { 95bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith B() = delete; // expected-note 3{{here}} 101d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 111d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 121d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint b = B().n; // expected-error {{call to deleted}} 131d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 146c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct C { 156c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith B b; // expected-note {{deleted default constructor}} 161d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 17e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint c = C().b.n; // expected-error {{call to implicitly-deleted default}} 181d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 196c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct D { 206c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith D() = default; // expected-note {{here}} 215bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith B b; // expected-note {{'b' has a deleted default constructor}} 221d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 23e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint d = D().b.n; // expected-error {{call to implicitly-deleted default}} 241d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 251d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct E { 261d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith E() = default; 271d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 281d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 291d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint e = E().n; // ok 301d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 311d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct F { 321d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith F(); 331d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 341d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 351d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint f = F().n; // ok 361d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 376c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion G { 386c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith F f; // expected-note {{non-trivial default constructor}} 391d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 40e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint g = G().f.n; // expected-error {{call to implicitly-deleted default}} 411d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 421d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct H { 431d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 441d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithprivate: 451d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith H(); // expected-note {{here}} 461d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 471d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint h = H().n; // expected-error {{private constructor}} 481d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 496c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct I { 506c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith H h; // expected-note {{inaccessible default constructor}} 511d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 52e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint i = I().h.n; // expected-error {{call to implicitly-deleted default}} 531d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 541d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct J { 551d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith J(); 561d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith virtual int f(); 571d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int n; 581d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 591d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint j1 = J().n; // ok 601d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint j2 = J().f(); // ok 611d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith 626c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion K { 636c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith J j; // expected-note 2{{non-trivial default constructor}} 641d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith int m; 651d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith}; 66e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint k1 = K().j.n; // expected-error {{call to implicitly-deleted default}} 67e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint k2 = K().j.f(); // expected-error {{call to implicitly-deleted default}} 68