(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
other/
abstract8.C
// 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>(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" }
}