#include <new>
#include <iostream>
struct widget
{
static std::size_t m_count;
void *operator new (std::size_t, void *p)
{
++m_count;
return p;
}
void operator delete (void *, void *)
{
--m_count;
}
void hello() const
{
std::cout << "hello";
}
};
std::size_t widget::m_count = 0;
int main(void)
{
char mem[sizeof(widget)];
widget *pw = new (mem) widget();
pw->hello();
pw->~widget();
// widget::operator delete (pw, mem);
if(widget::m_count != 0)
std::cout << "!";
return 0;
}