Unless otherwise specified,
if an exception is thrown in the following algorithms,
objects constructed by a placement new-expression ([expr.new])
are destroyed in an unspecified order
before allowing the exception to propagate.
When invoked on ranges of
potentially-overlapping subobjects ([intro.object]),
the algorithms specified in [specialized.algorithms]
result in undefined behavior.
Some algorithms specified in [specialized.algorithms] make use of the exposition-only function
voidify:
template<class T>constexprvoid*voidify(T& obj)noexcept{returnconst_cast<void*>(static_cast<constvolatilevoid*>(addressof(obj)));
}