Я читал другие сообщения (один пример: Как я мог разумно перегрузить оператор размещения new ?), что стандарт C++ запрещает перегружать глобальное размещение new.
GCC выдал ошибку, когда я определил:
void* operator new(size_t sz, void*) {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
Однако GCC позволяет мне определить:
template <class T>
void* operator new(size_t sz, T t) {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
Я попытался использовать новое размещение, и приведенный выше шаблон функции получил вызов.
Чем он отличается от замены размещения новым? В чем причина того, что стандарт С++ запрещает перегружать глобальное размещение new?