#include <new>
#include <cstdlib>
#include <iostream>
#include <stdexcept>
 
struct foo {};
 
inline void* operator new(size_t size, foo*) throw (std::bad_alloc)
{
    std::cout << "my new " << size << std::endl;
    return malloc(size);
}
 
inline void operator delete(void* p, foo*) throw()
{
    std::cout << "my delete" << std::endl;
    free(p);
}
 
int main()
{
    delete new((foo*)NULL) foo;
}