p16.cpp revision 743cbb91499e138a63a398c6515667905f1b3be8
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnantstruct A { 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual void a(); // expected-note{{overridden virtual function is here}} 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant virtual void b() = delete; // expected-note{{overridden virtual function is here}} 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant}; 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct B: A { 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual void a() = delete; // expected-error{{deleted function 'a' cannot override a non-deleted function}} 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual void b(); // expected-error{{non-deleted function 'b' cannot override a deleted function}} 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct C: A { 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual void a(); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual void b() = delete; 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct E; 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct F; 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct G; 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct H; 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct D { 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual E &operator=(const E &); // expected-note {{here}} 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual F &operator=(const F &); 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual G &operator=(G&&); // expected-note {{here}} 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual H &operator=(H&&); // expected-note {{here}} 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant friend struct F; 28 29private: 30 D &operator=(const D&) = default; 31 D &operator=(D&&) = default; 32 virtual ~D(); // expected-note 2{{here}} 33}; 34struct E : D {}; // expected-error {{deleted function '~E' cannot override a non-deleted function}} \ 35 // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} 36struct F : D {}; 37struct G : D {}; // expected-error {{deleted function '~G' cannot override a non-deleted function}} 38 // expected-error@-1 {{deleted function 'operator=' cannot override a non-deleted function}} 39struct H : D { 40 H &operator=(H&&) = default; // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} 41 ~H(); 42}; 43