// Negative test for defaulted/deleted fns.
// { dg-do compile { target c++11 } }

void f();			// { dg-message "previous" }
void f() = delete;		// { dg-error "deleted" }

struct A
{
  A() { }			// { dg-message "previous" }
  void f() = default;		// { dg-error "default" }
};

A::A() = default;		// { dg-error "redefinition" }

void g() {}			// { dg-message "previous" }
void g() = delete;		// { dg-error "redefinition" }

struct B // { dg-message "user-provided default constructor" }
{
  int i;
  B() = default;		// { dg-message "not user-provided" }
};

const B b;			// { dg-error "uninitialized 'const" }

struct C
{
  virtual void f() = delete;	// { dg-message "overridden" }
};

struct D: public C
{
  virtual void f();		// { dg-error "non-deleted function" }
};

struct E
{
  const B b;			// { dg-message "should be initialized" }
  E() { }			// { dg-error "uninitialized" }
};

struct F
{
  F() = default;
  F(const F&) = delete;		// { dg-message "declared" }
};

struct G
{
  G();
};

// ctor defaulted after class defn is not trivial
G::G() = default;

union U
{
  G g;				// { dg-error "union member.*non-trivial" }
};

int main()
{
  F f;
  F f2(f);			// { dg-error "use" }
  const B* b = new const B;		// { dg-error "uninitialized const" }
  U u;				// { dg-error "deleted" }
}

// { dg-prune-output "implicitly deleted because" }
