inout_ptr_t is a class template used to adapt types
such as smart pointers ([smartptr])
for functions that use output pointer parameters
whose dereferenced values may first be deleted
before being set to another allocated value.
Program-defined specializations of inout_ptr_t
that depend on at least one program-defined type
need not meet the requirements for the primary template.
any modification of *v
that is not followed by subsequent modification of *this
affects the value of p during the destruction of *this,
such that static_cast<void*>(p)==*v.