1 // RUN: clang-cc -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' (aka 'int') does not name a class}}
41   {
42   }
43 };
44 
45 class G : A {
46   G() : A(10); // expected-error{{expected '{'}}
47 };
48 
49 void f() : a(242) { } // expected-error{{only constructors take base initializers}}
50 
51 class H : A {
52   H();
53 };
54 
55 H::H() : A(10) { }
56 
57