https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99845
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |INVALID --- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Keith Halligan from comment #11) > While adding noexcept to the "opeator new[]()" overloaded functions does > stop the crash on 64-bit, it does nothing for the 32-bit code, with the Clearly not "does nothing" since the behaviour changes. > compiler attempting to throw a std::bad_alloc. No, not bad_alloc: > terminate called after throwing an instance of 'std::bad_array_new_length' > what(): std::bad_array_new_length You've asked for an array of -1u objects of size 4, which is four times larger than the entire address space on 32-bit x86. That makes the new-expression erroneous, and what GCC does is exactly what the C++14 standard requires. C++17 was changed by https://wg21.link/cwg1992 but GCC doesn't implement that yet, which I've reported as Bug 99934.