p16.cpp revision 0ab5b4c438b40c72252933072d4c9e9a948106f0
1// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
2
3struct A {
4  virtual void a(); // expected-note{{overridden virtual function is here}}
5  virtual void b() = delete; // expected-note{{overridden virtual function is here}}
6};
7
8struct B: A {
9  virtual void a() = delete; // expected-error{{deleted function 'a' cannot override a non-deleted function}}
10  virtual void b(); // expected-error{{non-deleted function 'b' cannot override a deleted function}}
11};
12
13struct C: A {
14  virtual void a();
15  virtual void b() = delete;
16};
17
18struct E;
19struct F;
20struct G;
21struct H;
22struct D {
23  virtual E &operator=(const E &); // expected-note {{here}}
24  virtual F &operator=(const F &);
25  virtual G &operator=(G&&);
26  virtual H &operator=(H&&); // expected-note {{here}}
27  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 {};
37// No move ctor here, because it would be deleted.
38struct G : D {}; // expected-error {{deleted function '~G' 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