1*1376c739SNathan James // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 2*1376c739SNathan James 3*1376c739SNathan James struct Deleted { 4*1376c739SNathan James Deleted() = delete; // expected-note 3{{marked deleted here}} 5*1376c739SNathan James Deleted(const Deleted &) = delete; // expected-note 2{{marked deleted here}} 6*1376c739SNathan James Deleted(Deleted &&) = delete; // expected-note 2{{marked deleted here}} 7*1376c739SNathan James Deleted &operator=(const Deleted &) = delete; // expected-note 2{{marked deleted here}} 8*1376c739SNathan James Deleted &operator=(Deleted &&) = delete; // expected-note 2{{marked deleted here}} 9*1376c739SNathan James ~Deleted() = delete; // expected-note 2{{marked deleted here}} 10*1376c739SNathan James }; 11*1376c739SNathan James 12*1376c739SNathan James struct Derive : Deleted { // expected-note 6{{because base class}} 13*1376c739SNathan James Derive() = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 14*1376c739SNathan James Derive(const Derive &) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 15*1376c739SNathan James Derive(Derive &&) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 16*1376c739SNathan James Derive &operator=(const Derive &) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 17*1376c739SNathan James Derive &operator=(Derive &&) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 18*1376c739SNathan James ~Derive() = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 19*1376c739SNathan James }; 20*1376c739SNathan James 21*1376c739SNathan James struct Member { 22*1376c739SNathan James Deleted A; // expected-note 6{{because field 'A'}} 23*1376c739SNathan James Member() = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 24*1376c739SNathan James Member(const Member &) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 25*1376c739SNathan James Member(Member &&) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 26*1376c739SNathan James Member &operator=(const Member &) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 27*1376c739SNathan James Member &operator=(Member &&) = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 28*1376c739SNathan James ~Member() = default; // expected-warning{{explicitly defaulted}} expected-note{{replace 'default' with 'delete'}} 29*1376c739SNathan James }; 30*1376c739SNathan James 31*1376c739SNathan James template<typename T> 32*1376c739SNathan James struct TDerive : T { // expected-note {{because base class}} 33*1376c739SNathan James TDerive() = default; //expected-note {{explicitly defaulted}} // Don't expect a fix note to be emitted 34*1376c739SNathan James }; 35*1376c739SNathan James 36*1376c739SNathan James using ShouldDelete = TDerive<Deleted>; 37*1376c739SNathan James 38*1376c739SNathan James ShouldDelete A; // expected-error{{call to implicitly-deleted}} 39