| // RUN: clang-cc -fsyntax-only -verify %s |
| class A { |
| int m; |
| }; |
| |
| class B : public A { |
| public: |
| B() : A(), m(1), n(3.14) { } |
| |
| private: |
| int m; |
| float n; |
| }; |
| |
| |
| class C : public virtual B { |
| public: |
| C() : B() { } |
| }; |
| |
| class D : public C { |
| public: |
| D() : B(), C() { } |
| }; |
| |
| class E : public D, public B { |
| public: |
| E() : B(), D() { } // expected-error{{base class initializer 'B' names both a direct base class and an inherited virtual base class}} |
| }; |
| |
| |
| typedef int INT; |
| |
| class F : public B { |
| public: |
| int B; |
| |
| F() : B(17), |
| m(17), // expected-error{{member initializer 'm' does not name a non-static data member or base class}} |
| INT(17) // expected-error{{constructor initializer 'INT' (aka 'int') does not name a class}} |
| { |
| } |
| }; |
| |
| class G : A { |
| G() : A(10); // expected-error{{expected '{'}} |
| }; |
| |
| void f() : a(242) { } // expected-error{{only constructors take base initializers}} |
| |
| class H : A { |
| H(); |
| }; |
| |
| H::H() : A(10) { } |
| |