(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
expr/
anew6.C
// PR c++/97523
// { dg-do compile { target c++11 } }

// [expr.new]/24: If the new-expression creates an object or an array of
// objects of class type, access and ambiguity control are done for the
// [...] constructor selected for the initialization (if any).
// NB: We only check for a default constructor if the array has a non-constant
// bound, or there are insufficient initializers.  Since an array is an
// aggregate, we perform aggregate-initialization, which performs
// copy-initialization, so we only accept converting constructors.

struct T {
  explicit T();
  T(int);
};

struct S {
  S(int);
};

void
fn (int n)
{
  new T[1]{}; // { dg-error "explicit constructor" }
  new T[2]{1, 2};
  new T[3]{1, 2}; // { dg-error "explicit constructor" }
  new T[n]{}; // { dg-error "explicit constructor" }

  new S[1]{}; // { dg-error "could not convert" }
  new S[2]{1, 2};
  new S[3]{1, 2}; // { dg-error "could not convert" }
  new S[n]{}; // { dg-error "could not convert" }
}