Clauses [language.support] through [thread] and Annex [depr] describe the behavior of numerous functions defined by the C++ standard library. Under some circumstances, however, certain of these function descriptions also apply to replacement functions defined in the program ([definitions]).
A C++ program may provide the definition for any of twelve dynamic memory allocation function signatures declared in header <new> ([basic.stc.dynamic], [support.dynamic]):
operator new(std::size_t, const std::nothrow_t&)
operator new[](std::size_t, const std::nothrow_t&)
operator delete(void*, const std::nothrow_t&)
operator delete[](void*, const std::nothrow_t&)
operator delete(void*, std::size_t)
operator delete(void*, std::size_t, const std::nothrow_t&)
operator delete[](void*, std::size_t)
operator delete[](void*, std::size_t, const std::nothrow_t&)
The program's definitions are used instead of the default versions supplied by the implementation ([support.dynamic]). Such replacement occurs prior to program startup ([basic.def.odr], [basic.start]). The program's definitions shall not be specified as inline. No diagnostic is required.