20 Memory management library [mem]
namespace std {
  template<class T> struct default_delete {
    constexpr default_delete() noexcept = default;
    template<class U> constexpr default_delete(const default_delete<U>&) noexcept;
    constexpr void operator()(T*) const;
  };
}
template<class U> constexpr default_delete(const default_delete<U>& other) noexcept;
Constraints: 
U* is implicitly convertible to 
T*. Effects: Constructs a 
default_delete object
from another 
default_delete<U> object
. constexpr void operator()(T* ptr) const;
Mandates: 
T is a complete type
. Effects: Calls 
delete on 
ptr.