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