Each deallocation function shall return 
void.  If the function is a destroying operator delete
declared in class type 
C,
the type of its first parameter shall be 
C*;
otherwise, the type of its first
parameter shall be 
void*.  A deallocation function may have more
than one parameter
.  A 
usual deallocation function is a deallocation function
whose parameters after the first are
- optionally, a parameter of type std::destroying_delete_t, then
 - optionally, a parameter of type std::size_t,
then
 - optionally, a parameter of type std::align_val_t.
 
  
A destroying operator delete shall be a usual deallocation function
.  A deallocation function may be an instance of a function
template
.  Neither the first parameter nor the return type shall depend
on a template parameter
.  A deallocation
function template shall have two or more function parameters
.  A template
instance is never a usual deallocation function, regardless of its
signature
.