https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85795
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Erroneous expressions include negative ones, as in PR 105077: #include <new> #include <stdexcept> int main() { try { int negative = -1; new char[negative]; } catch(const std::bad_array_new_length &e) { } return 0; } This throws bad_alloc instead of bad_array_new_length. PR 99934 is another example where we should not call the allocation function, but the FE should return a nullptr instead of throwing.