template<class T>
void destroy_at(T* location);
namespace ranges {
template<Destructible T>
void destroy_at(T* location) noexcept;
}
template<class ForwardIterator>
void destroy(ForwardIterator first, ForwardIterator last);
namespace ranges {
template<no-throw-input-iterator I, no-throw-sentinel<I> S>
requires Destructible<iter_value_t<I>>
I destroy(I first, S last) noexcept;
template<no-throw-input-range R>
requires Destructible<iter_value_t<iterator_t<R>>>
safe_iterator_t<R> destroy(R&& r) noexcept;
}
for (; first != last; ++first) destroy_at(addressof(*first)); return first;
template<class ForwardIterator, class Size>
ForwardIterator destroy_n(ForwardIterator first, Size n);
for (; n > 0; (void)++first, --n) destroy_at(addressof(*first)); return first;
namespace ranges {
template<no-throw-input-iterator I>
requires Destructible<iter_value_t<I>>
I destroy_n(I first, iter_difference_t<I> n) noexcept;
}