// PR c++/97523 // { dg-do compile } // We were turning the () into {} which made it seem like // aggregate-initialization (we are dealing with arrays here), which // performs copy-initialization, which only accepts converting constructors. struct T { explicit T(); T(int); }; void fn (int n) { new T[1](); new T[2](); new T[3](); new T[n](); #if __cpp_aggregate_paren_init new T[](); new T[2](1, 2); // T[2] is initialized via copy-initialization, so we can't call // explicit T(). new T[3](1, 2); // { dg-error "explicit constructor" "" { target c++20 } } #endif }