I think the problem comes from this wording in the specification:
If the class T does not declare such a delete operator, but declares a member deletion function named operator delete using two parameters, the second of which is of type std :: size_t (18.1), then this function is a normal release function
This would mean that if you tried to declare a pair operator newand operator deletethat took size_tas the second parameter, the compiler would think that yours operator deletewith this signature:
void operator delete (void* memory, size_t arg)
( ) deallocator, , operator new(void*, size_t).
, , . , , , new , . - , g++ , , ( , ).
: ! , , ++ 0x. , 3.5.4/20:
(3.7.4.2), , , , .
, . , ++ 0x, , g++.