namespace std {
  template <class T> struct default_delete {
    constexpr default_delete() noexcept = default;
    template <class U> default_delete(const default_delete<U>&) noexcept;
    void operator()(T*) const;
  };
} template <class U> default_delete(const default_delete<U>& other) noexcept;
void operator()(T* ptr) const;
namespace std {
  template <class T> struct default_delete<T[]> {
    constexpr default_delete() noexcept = default;
    template <class U> default_delete(const default_delete<U[]>&) noexcept;
    template <class U> void operator()(U* ptr) const;
  };
}template <class U> default_delete(const default_delete<U[]>& other) noexcept;
template <class U> void operator()(U* ptr) const;