// PR c++/43719
// { dg-do compile }

struct A1 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const j; // { dg-message "should be initialized" }
};

struct A2 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const volatile i; // { dg-message "should be initialized" }
};

struct A3 // { dg-error "uninitialized" "" { target c++11 } }
{
  int& ref; // { dg-message "should be initialized" }
};

struct A4 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const& ref; // { dg-message "should be initialized" }
};

struct A5 // { dg-error "uninitialized" "" { target c++11 } }
{
  int& ref; // { dg-message "should be initialized" }
  int const i; // { dg-message "should be initialized" }
};

template <class T> struct S1 // { dg-error "uninitialized" "" { target c++11 } }
{
  T const i; // { dg-message "should be initialized" }
};

template <class T> struct S2 // { dg-error "uninitialized" "" { target c++11 } }
{
  T const volatile i; // { dg-message "should be initialized" }
};

template <class T> struct S3 // { dg-error "uninitialized" "" { target c++11 } }
{
  T& ref; // { dg-message "should be initialized" }
};

template <class T> struct S4 // { dg-error "uninitialized" "" { target c++11 } }
{
  T const i; // { dg-message "should be initialized" }
  T& ref; // { dg-message "should be initialized" }
};

struct X
{
  X () : c (0), r (c) {}
  int const c;
  int const& r;
};

struct Y11 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const i; // { dg-message "should be initialized" }
};

struct Y1		  // { dg-error "deleted" "" { target c++11 } }
{
  Y11 a[1];
};

struct Y22 // { dg-error "uninitialized" "" { target c++11 } }
{
  int& ref; // { dg-message "should be initialized" }
};

struct Y2		      // { dg-error "deleted" "" { target c++11 } }
{
  Y22 a[1];
};

struct Z1 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const i; // { dg-message "should be initialized" }
};

struct Z2 // { dg-error "uninitialized" "" { target c++11 } }
{
  int& ref; // { dg-message "should be initialized" }
};

struct Z3 // { dg-error "uninitialized" "" { target c++11 } }
{
  int const i; // { dg-message "should be initialized" }
};

struct Z4 // { dg-error "uninitialized" "" { target c++11 } }
{
  int& ref; // { dg-message "should be initialized" }
};

struct Z5
{
  int i;
};

struct Z		// { dg-error "deleted" "" { target c++11 } }
{
  Z1 z1;
  Z2 z2;
  Z3 z3;
  Z4 z4;
  Z5 z5;
};

union U // { dg-error "uninitialized" "" { target c++11 } }
{
  int const i; // { dg-message "should be initialized" }
};


void f1 ()
{
  A1 a1; // { dg-error "uninitialized const member|deleted" }
}

void f2 ()
{
  A2 a2; // { dg-error "uninitialized const member|deleted" }
}

void f3 ()
{
  A3 a3; // { dg-error "uninitialized reference member|deleted" }
}

void f4 ()
{
  A4 a4; // { dg-error "uninitialized reference member|deleted" }
}

void f5 ()
{
  A5 a5; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
}

void f6 ()
{
  S1<int> s; // { dg-error "uninitialized const member|deleted" }
}

void f7 ()
{
  S2<int> s; // { dg-error "uninitialized const member|deleted" }
}

void f8 ()
{
  S3<int> s; // { dg-error "uninitialized reference member|deleted" }
}

void f9 ()
{
  S4<int> s; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
}

void f10 ()
{
  X x;
}

void f11 ()
{
  A1 a[ 1 ]; // { dg-error "uninitialized const member|deleted" }
}

void f12 ()
{
  A3 a[ 1 ]; // { dg-error "uninitialized reference member|deleted" }
}

void f13 ()
{
  Y1 y1; // { dg-error "uninitialized const member|deleted" }
}

void f14 ()
{
  Y2 y2; // { dg-error "uninitialized reference member|deleted" }
}

void f15 ()
{
  Z z; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
}

void f16 ()
{
  U u; // { dg-error "uninitialized const member|deleted" }
}

