https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86954
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Arguably this was good defensive programming for C++03. The program could have replaced operator new(size_t) and operator delete(void*) but not replaced operator new(size_t, const nothrow_t&) and operator delete(void*, const nothrow_t&). That would be undefined (C++03 [lib.new.delete.single] p7) but by using the nothrow version of operator delete the library avoids mixing the default version of new with a replaced version of delete. LWG 206 changed the behaviour for C++11, so that combining the nothrow new and normal delete does the right thing, but GCC has only met that requirement since yesterday. I'm not sure it's worth changing anything here now. get_temporary_buffer was deprecated and removed from C++2a anyway.