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;
Effects: Constructs a
default_delete object
from another
default_delete<U> object
. Remarks: This constructor shall not participate in overload resolution unless
U* is implicitly convertible to
T*. void operator()(T* ptr) const;
Effects: Calls
delete on
ptr. Remarks: If
T is an incomplete type, the program is ill-formed
.
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;
Effects:
constructs a
default_delete object from another
default_delete<U[]> object
. Remarks:
This constructor shall not participate in overload resolution unless
U(*)[] is
convertible to
T(*)[]. template <class U> void operator()(U* ptr) const;
Effects:
Calls
delete[] on
ptr. Remarks: If
U is an incomplete type, the program is ill-formed
. This function shall not participate in overload resolution
unless
U(*)[] is convertible to
T(*)[].