// P0929R2: Checking for abstract class types. // { dg-do compile { target c++11 } } // { dg-additional-options -Wno-return-type } struct A { virtual void f() = 0; }; struct B { A a; // { dg-error "abstract" } A ar[4]; // { dg-error "abstract" } }; using Aa = A[4]; // OK Aa* aap; // OK extern A a; // OK extern Aa aa; // OK A f(); // OK void g(A); // OK A a; // { dg-error "abstract" } Aa aa; // { dg-error "abstract" } A f() { } // { dg-error "abstract" } void g(A) { } // { dg-error "abstract" } int main() { (A(a)); // { dg-error "abstract" } A{}; // { dg-error "abstract" } static_cast(a); // { dg-error "abstract" } Aa{}; // { dg-error "abstract" } f(); // { dg-error "abstract" } decltype(f())* p; // OK g(a); // { dg-error "abstract" } throw a; // { dg-error "abstract" } }