overriding delete with parameters
===

I can override global `operator new` with different parameters, so for example I can have:

    void* operator new (std::size_t size) throw (std::bad_alloc);
    void* operator new (std::size_t size, int num) throw (std::bad_alloc);

which can be called separately as

    int* p1 = new int; // calls new(size_t)
    int* p2 = new(5) int; // calls new(size_t, int)

since each of these can potentially use some different allocation scheme, I would need a separate `delete()` function for each. However, `delete(void*)` cannot be overloaded in the same way! `delete(void*)` is the only valid signature. So how can the above case be handled?

P.S. I am not suggesting this is a good idea. This kind of thing happened to me and so I discovered this "flaw" (at least in my opinion) in c++. If the language allows the `new` overrides, it *must* allow the `delete` overrides, or it becomes useless. And so I was wondering if there is a way around this, not if this a good idea.