Annex C (informative) Compatibility [diff]

C.2 C++ and ISO C++ 2003 [diff.cpp03]

C.2.9 Clause [language.support]: language support library [diff.cpp03.language.support]

[new.delete.single]
Изменение: Связывание new и delete операторы.
Обоснование: две метательные сигнатуры одного объекта operator new и operator delete теперь определены для формирования базовой функциональности для других операторов. Это поясняет, что замена только этих двух подписей изменяет другие, даже если они не были изменены явно.
Влияние на исходную функцию: действительный код C ++ 2003, заменяющий глобальные операторы new или, deleteможет выполняться иначе в этом международном стандарте. Например, следующая программа должна писать "custom deallocation" дважды: один раз для удаления одного объекта и один раз для удаления массива.

#include <cstdio>
#include <cstdlib>
#include <new>

void* operator new(std::size_t size) throw(std::bad_alloc) {
  return std::malloc(size);
}

void operator delete(void* ptr) throw() {
  std::puts("custom deallocation");
  std::free(ptr);
}

int main() {
  int* i = new int;
  delete i;                     // single-object delete
  int* a = new int[3];
  delete [] a;                  // array delete
}

[new.delete.single]
Изменение: operator new может вызывать исключения, отличные от std​::​bad_­alloc.
Обоснование: последовательное применение noexcept.
Влияние на исходную функцию: действительный код C ++ 2003, который предполагает, что operator new только глобальные выбросы std​::​bad_­alloc могут выполняться иначе в этом международном стандарте.