#include <iostream>
using namespace std;

int i = 0;

struct A
{
	A() { cout << "A()\n"; if(i++ > 0) throw 42; }
	~A() { cout << "~A()\n"; }
    void * operator new [] (size_t t, int, int)
    {
        cout << "3 parameters allocation" << endl;
        return ::operator new[](t);
    }

    void operator delete [] (void *p, int, int)
    {
        cout << "3 parameters deallocation" << endl;
        return ::operator delete[](p);
    }
};

int main() 
{
	try{
    A *a = new (5,5) A[10]; //operator new [] (size_t, int, int) invoked
	}catch(...) {}
    //delete [] a; //Error. Overload resolution is failed.
}