Ваша программа генерирует необработанное исключение.Это означает, что std::terminate
вызывается.
В этой ситуации может быть или не быть разматывание стека (это определяется реализацией независимо от того, происходит ли это).Ваша реализация явно решает вызвать std::terminate
без выполнения разматывания стека.
Вызов operator delete
на самом деле является частью разматывания стека , даже если здесь не используется стек, этобит неправильного числа.
Чтобы увидеть, как вызывается ваша функция, измените код на:
try
{
A* a = new(o) A;
}
catch(...) {}
.