In C++ primer 5 edition. chapter 12 Dynamic memory:
If there are fewer initializers than elements, the remaining elements are value initialized. If there are more initializers than the given size, then the new expression fails and no storage is allocated. In this case, new throws an exception of type bad_array_new_length. Like bad_alloc, this type is defined in the new header.
This is about allocating and initializing Dynamic arrays. But I think it is incorrect: If the number of initializers is greater than the size of the dynamic-array then this is a compile-time error rather than a runtime error:
auto p = new int[3]{4, 5, 6, 7}; // compile-time error: Too many initializers.
This might be a compile-time error, in case you use constants for the array size and compiler can clearly tell you there's a problem.
However, there are a lot of cases, when the size of the allocated memory is not constant, but rather a variable that cannot be deduced at compile time. In this case the exception will be thrown at the run time.