Перегрузка глобального размещения Новое?

Я читал другие сообщения (один пример: Как я мог разумно перегрузить оператор размещения 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?


person Hei    schedule 12.03.2016    source источник