Annex F (informative) Core undefined behavior [ub]

F.3 [expr]: Expressions [ub.expr]

F.3.21[ub:expr.new.non.allocating.null]
Specified in: [expr.new]

If the allocation function is a non-allocating form ([new.delete.placement]) that returns null, the behavior is undefined.
[Example 1: #include <new> [[nodiscard]] void* operator new(std::size_t size, void* ptr) noexcept { return nullptr; // undefined behavior, should return non-null pointer } — end example]
[Example 2: #include <new> struct A { int x; }; int main() { char *p = nullptr; A *a = new (p) A; // undefined behavior, non-allocating new returning nullptr } — end example]