xref: /llvm-project/clang/test/SemaCXX/constructor-initializer.cpp (revision 49de5340c04c9f6b03611223aaf20caf3fbb8243)
1 // RUN: clang -fsyntax-only -verify %s
2 class A {
3   int m;
4 };
5 
6 class B : public A {
7 public:
8   B() : A(), m(1), n(3.14) { }
9 
10 private:
11   int m;
12   float n;
13 };
14 
15 
16 class C : public virtual B {
17 public:
18   C() : B() { }
19 };
20 
21 class D : public C {
22 public:
23   D() : B(), C() { }
24 };
25 
26 class E : public D, public B {
27 public:
28   E() : B(), D() { } // expected-error{{base class initializer 'B' names both a direct base class and an inherited virtual base class}}
29 };
30 
31 
32 typedef int INT;
33 
34 class F : public B {
35 public:
36   int B;
37 
38   F() : B(17),
39         m(17), // expected-error{{member initializer 'm' does not name a non-static data member or base class}}
40         INT(17) // expected-error{{constructor initializer 'INT' does not name a class}}
41   {
42   }
43 };
44 
45 class G : A {
46   G() : A(10); // expected-error{{expected '{'}}
47 };
48