A client-supplied template argument
D shall be a function
object type (
[function.objects]), lvalue reference to function, or
lvalue reference to function object type
for which, given
a value
d of type
D and a value
ptr of type
unique_ptr<T, D>::pointer, the expression
d(ptr) is valid and has the effect of disposing of the
pointer as appropriate for that deleter
.