// { dg-do compile }

void
nonconst(int n)
{
  new (long[n][n]); // { dg-error "variable length|array size|not a constant|runtime bound" }
  new long[n][n]; // { dg-error "variable length|array size|not a constant" }
}

template <typename T>
void *
callnew(int n)
{
  return new long[n][T::n];
}

template <typename T>
void *
callnew_fail_1(int n)
{
  return new long[n][T::n]; // { dg-error "variable length|array size|usable in a constant" }
}

template <typename T>
void *
callnew_fail_2()
{
  return new long[T::n]; // { dg-error "size in array new" }
}

template <typename T>
void *
callnew_fail_3()
{
  return new T[2][T::n]; // { dg-error "could not convert|size of array has non-integral type|converted constant expression" }
}

struct T1 {
  static int n;
};

struct T2 {
  static const double n = 2; // { dg-error "23:'constexpr' needed" "" { target c++11 } }
  // { dg-error "23:ISO C\\+\\+ forbids" "" { target c++98_only } .-1 }
};

struct T3 {
  static const int n = 2;
};

struct T4 {
  enum { n = 3 };
};

void
test_callnew(int n)
{
  new long[0.2]; // { dg-error "integral or enumeration type" }
  callnew_fail_1<T1>(n);
  callnew_fail_2<T2>();
  callnew_fail_3<T2>();
  callnew<T3>(n);
  callnew<T4>(n);
}
