Clang Project

clang_source_code/test/CXX/class.derived/class.abstract/p4.cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3namespace PR6631 {
4  struct A { 
5    virtual void f() = 0;
6  };
7
8  struct B : virtual A { };
9
10  struct C : virtual A { 
11    virtual void f();
12  };
13
14  struct D : public B, public C { 
15    virtual void f();
16  };
17
18  void f() {
19    (void)new D; // okay
20  }
21}
22
23// Check cases where we have a virtual function that is pure in one
24// subobject but not pure in another subobject.
25namespace PartlyPure {
26  struct A { 
27    virtual void f() = 0; // expected-note{{unimplemented pure virtual method}}
28  };
29
30  struct B : A {
31    virtual void f();
32  };
33
34  struct C : virtual A { };
35
36  struct D : B, C { };
37
38  void f() {
39    (void) new D; // expected-error{{abstract class}}
40  }
41}
42
43namespace NonPureAlongOnePath {
44  struct A { 
45    virtual void f() = 0;
46  };
47
48  struct B : virtual A {
49    virtual void f();
50  };
51
52  struct C : virtual A { };
53
54  struct D : B, C { };
55
56  void f() {
57    (void) new D; // okay
58  }  
59}
60
61namespace NonPureAlongOnePath2 {
62  struct Aprime { 
63    virtual void f() = 0;
64  };
65
66  struct A : Aprime {
67  };
68
69  struct B : virtual A {
70    virtual void f();
71  };
72
73  struct C : virtual A { };
74
75  struct D : B, C { };
76
77  void f() {
78    (void) new D; // okay
79  }  
80}
81