A declaration of a placement deallocation function matches the
declaration of a placement allocation function if it has the same number
of parameters and, after parameter transformations (
[dcl.fct]), all
parameter types except the first are identical
. If
the lookup finds a single matching deallocation function, that function
will be called; otherwise, no deallocation function will be called
. If
the lookup finds a usual deallocation
function
and that function,
considered as a placement deallocation function, would have been
selected as a match for the allocation function, the program is
ill-formed
. For a non-placement allocation function, the normal deallocation
function lookup is used to find the matching deallocation
function (
[expr.delete])
. In any case,
the matching deallocation function (if any) shall be non-deleted and
accessible from the point where the
new-expression appears
. [
Example 7:
struct S {
static void* operator new(std::size_t, std::size_t);
static void operator delete(void*, std::size_t);
};
S* p = new (0) S;
—
end example]