// RUN: clang-cc -fsyntax-only -verify %s class A { virtual void f(); virtual void g() = 0; void h() = 0; // expected-error {{'h' is not virtual and cannot be declared pure}} void i() = 1; // expected-error {{initializer on function does not look like a pure-specifier}} void j() = 0u; // expected-error {{initializer on function does not look like a pure-specifier}} void k(); public: A(int); }; virtual void A::k() { } // expected-error{{'virtual' can only be specified inside the class definition}} class B : public A { // Needs to recognize that overridden function is virtual. //void g() = 0; // Needs to recognize that function does not override. //void g(int) = 0; }; // Needs to recognize invalid uses of abstract classes. /* A fn(A) { A a; static_cast(0); try { } catch(A) { } } */